import UIKit
import UserNotifications
typealias NotificationManagerAddResultCallBack = ((Error?) -> Void)?
typealias NotificationManagerGetResultCallBack = (([UNNotificationRequest]?) -> Void)?
//MARK: 增
extension GHFNotificationManager {
/// 添加/更新 本地通知核心方法 - 业务侧封装
/// - Parameters:
/// - identifier: 业务ID
/// - title: 本地推送标题
/// - userInfo: 业务数据 - 同点击push的userInfo
/// - timeInterval: 时间间隔触发此本地push
/// - completionHandler: 回调结果 - 是否添加/更新成功
class func addLocationNoti(identifier: String?, title: String?, userInfo: [String: Any]?, timeInterval: TimeInterval, completionHandler: NotificationManagerAddResultCallBack) {
addLocationNoti(identifier: identifier, title: title, subTitle: nil, userInfo: userInfo, timeInterval: timeInterval, completionHandler: completionHandler)
}
/// 添加/更新 本地通知核心方法 - 业务侧封装
/// - Parameters:
/// - identifier: 业务ID
/// - title: 本地推送标题
/// - subTitle: 本地推送子标题
/// - userInfo: 业务数据 - 同点击push的userInfo - url:allfuture:///xxx?xx=xx&xx=xx
/// - timeInterval: 时间间隔触发此本地push
/// - completionHandler: 回调结果 - 是否添加/更新成功
class func addLocationNoti(identifier: String?, title: String?, subTitle: String?, userInfo: [String: Any]?, timeInterval: TimeInterval, completionHandler: NotificationManagerAddResultCallBack) {
let content = UNMutableNotificationContent.init()
content.title = title ?? ""
content.subtitle = subTitle ?? ""
content.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: "noticeMusic.mp3"))
content.userInfo = userInfo ?? Dictionary()
#if DEBUG
GHFToast.toast("\(timeInterval)s后提醒")
#endif
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: timeInterval, repeats: false)
addLocationNoti(identifier: identifier, content: content, trigger: trigger, completionHandler: completionHandler)
}
/// 添加/更新 本地通知核心方法 - 工具侧封装
/// - Parameters:
/// - identifier: 业务ID
/// - content: UNMutableNotificationContent实例
/// - trigger: UNNotificationTrigger 子类的实例
/// - completionHandler: 回调结果 - 是否添加/更新成功
class func addLocationNoti(identifier: String?, content: UNMutableNotificationContent, trigger: UNNotificationTrigger, completionHandler: NotificationManagerAddResultCallBack) {
if let identifier = identifier {
let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { (error) in
print("\n----------------------------添加提醒回调START----------------------------\n error:\(String(describing: error))\n identifier:\(identifier)\n title:\(content.title)\n userInfo:\(content.userInfo)\n timeInterval:\((trigger as! UNTimeIntervalNotificationTrigger).timeInterval)\n ----------------------------添加提醒回调END----------------------------\n")
completionHandler?(error)
}
}
}
}
//MARK: 删
extension GHFNotificationManager {
/// 移除指定ID列表的未触发的本地通知
/// - Parameter noticIds: 本地通知id list
class func removeLocalNoti(noticIds: [String]?) {
if let noticIds = noticIds {
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: noticIds)
}
}
/// 移除所有未触发的本地通知
class func removeAllLocalNotification() {
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
}
}
//MARK: 查
extension GHFNotificationManager {
/// 获取全量未触发的本地通知
/// - Parameter completionHandler: 本地通知列表
class func getAllLocationNotification(completionHandler: NotificationManagerGetResultCallBack) {
UNUserNotificationCenter.current().getPendingNotificationRequests { (requests) in
completionHandler?(requests)
}
}
}
网友评论