美文网首页
本地推送工具类封装

本地推送工具类封装

作者: 风吹柳絮如花落 | 来源:发表于2022-01-08 15:42 被阅读0次
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)
        }
        
    }
    
}

相关文章

网友评论

      本文标题:本地推送工具类封装

      本文链接:https://www.haomeiwen.com/subject/ohiecrtx.html