美文网首页
关于远程通知的相关函数

关于远程通知的相关函数

作者: 斯瓦尔巴 | 来源:发表于2019-07-22 16:27 被阅读0次

[图片上传失败...(image-89a956-1563784038464)]
参照 pro648的 UserNotifications框架详解
https://github.com/pro648/BasicDemos-iOS/tree/master/UserNotifications

1.申请通知权限和通知方式

1.请求可以收取通知

         let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .badge, .sound, .carPlay]) { (granted, error) in

               guard granted else { return }            
               // Register for push notification.
               UIApplication.shared.registerForRemoteNotifications()
        }

2.获取到Token,将token保存到自己的服务器。然后服务器可以使用次token,推送消息到手机

 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        // Receive device token
        let token = deviceToken.map { data -> String in
            return String(format: "%02.2hhx", data)
        }.joined()
        // Forward token to server.
        // Enable remote notification features.
    }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Fail to register for remote notifications. error:\(error)")
        
        // Disable remote notification features.
    }

2.管理通知,使用UNUserNotificationCenterDelegate

1.包含两个主要方法,程序在后台时,收到通知后,用户点击通知会调用

    // Use this method to process the user's response to a notification.
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
            print("Default Action")
        } else if (response.actionIdentifier == UNNotificationDismissActionIdentifier){
            print("Dismiss action")
        }else if (response.notification.request.content.categoryIdentifier == "calendarCategory") {
            handleCalendarCategory(response: response)
        }
        
        UIApplication.shared.applicationIconBadgeNumber = 0
        
        completionHandler()
    }
    
    private func handleCalendarCategory(response: UNNotificationResponse) {
        if response.actionIdentifier == "markAsCompleted" {
            
        } else if response.actionIdentifier == "remindMeIn1Minute" {
            // 1 Minute
            let newDate = Date(timeInterval: 60, since: Date())
            scheduleNotification(at: newDate)
        } else if response.actionIdentifier == "remindMeIn1Minute" {
            // 5 Minutes
            let newDate = Date(timeInterval: 60*5, since: Date())
            scheduleNotification(at: newDate)
        }
    }

2.前台收到通知时,如果不进行相关处理,用户看不到通知。可以通过下面方法显示通知

   func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping(UNNotificationPresentationOptions) -> Void) {  let identifier = notification.request.identifier
        let options: UNNotificationPresentationOptions
        
        if identifier == "calendar" {
            options = []
        } else {
            options = [.alert, .sound]
        }
        
        completionHandler(options)
    }

相关文章

网友评论

      本文标题:关于远程通知的相关函数

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