簡體   English   中英

didRegisterForRemoteNotificationsWithDeviceToken 未在 ios 10 上調用

[英]didRegisterForRemoteNotificationsWithDeviceToken not getting called on ios 10

我已經在 appDelegate 中編寫了這段代碼

import UserNotifications
var registerId = String()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.registerForPushNotifications(application)
    return true   
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
    var tokenString = ""
    for i in 0..<deviceToken.length {
        tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
    }
    registerId = tokenString
}
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
    if notificationSettings.types != .None {
        application.registerForRemoteNotifications()
    }
}
func registerForPushNotifications(application: UIApplication) {

    if #available(iOS 10.0, *){
        UNUserNotificationCenter.currentNotificationCenter().delegate = self
        UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert], completionHandler: {(granted, error) in
            if (granted)
            {
               application.registerForRemoteNotifications()
            }
            else{
                registerId = "111111"
                //Do stuff if unsuccessful...
            }
        })
    }

    else{
        let notificationSettings = UIUserNotificationSettings(
            forTypes: [.Badge, .Sound, .Alert], categories: nil)
        application.registerUserNotificationSettings(notificationSettings)

    }

}
}

使用此代碼,我可以在 ios 版本 < 10 中獲取設備令牌,但對於 ios 10 及更高版本,不會調用 didRegisterForRemoteNotificationsWithDeviceToken。 任何幫助表示贊賞

最后一件事,添加框架:

import UserNotifications

class AppDelegate: /*Some other protocols I am extending...*/, UNUserNotificationCenterDelegate {

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
    registerForPushNotifications(application)
...
}


    func registerForPushNotifications(application: UIApplication) {

    if #available(iOS 10.0, *){
        UNUserNotificationCenter.current().delegate = self
        UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: {(granted, error) in
            if (granted)
            {
                UIApplication.shared.registerForRemoteNotifications()
            }
            else{
                //Do stuff if unsuccessful...
            }
        })
    }
    else { //If user is not on iOS 10 use the old methods we've been using
        let notificationSettings = UIUserNotificationSettings(
            types: [.badge, .sound, .alert], categories: nil)
        application.registerUserNotificationSettings(notificationSettings)

    }

}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

 }
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
    //Handle the notification
}

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
    //Handle the notification
}

}

除了所有這些,您還必須啟用來自功能的推送通知。

單擊您的項目目標,您將看到屏幕和啟用推送通知的功能。

在此處輸入圖片說明

將此用於 ios 10 -

func registerForPushNotifications(_ application: UIApplication) {
      let notificationSettings = UIUserNotificationSettings(
                types: [.badge, .sound, .alert], categories: nil)
            application.registerUserNotificationSettings(notificationSettings)
}
func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
      if notificationSettings.types != UIUserNotificationType() {
                application.registerForRemoteNotifications()
      }
}
func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) {

       var token: String = ""
       for i in 0..<deviceToken.count {
           token += String(format: "%02.2hhx", deviceToken[i] as CVarArg)
       }

       UserDefaults.standard.setValue(token, forKey: "kDeviceToken")
       UserDefaults.standard.synchronize()
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {}

PS:- 創建適當的證書和捆綁 ID 也。按照本教程 - https://www.raywenderlich.com/123862/push-notifications-tutorial

使用 //Register 推送通知

registerForPushNotifications(application)

didFinishLaunchingWithOptions方法中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM