注册推送通知功能不会被调用

时间:2016-11-11 04:32:22

标签: ios swift push-notification

我正在制作这款需要推送通知的甜蜜应用。

但是,当尝试获取Push令牌时,并非所有必需的功能都会被执行。

用户确实会收到此警报:

enter image description here

当用户点击OK时,我会逐步执行我的代码,看到并非所有内容都被执行:

override func viewDidLoad(){
    let tapper = UITapGestureRecognizer(target: view, action:#selector(UIView.endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)

    print("gets called")
    registerForPushNotifications(UIApplication.sharedApplication())
}

func registerForPushNotifications(application: UIApplication) {
    print("gets called")
    let notificationSettings = UIUserNotificationSettings(
        forTypes: [.Badge, .Sound, .Alert], categories: nil)
    application.registerUserNotificationSettings(notificationSettings)
}

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
    print("doesn't get called")
    if notificationSettings.types != .None {
        application.registerForRemoteNotifications()
    }
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    print("doesn't get called")
    let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
    var apnsTokenString = ""

    for i in 0..<deviceToken.length {
        apnsTokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
    }

    Constant.pushToken = apnsTokenString

    print("Device Token:", Constant.pushToken)
}

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    debugPrint("Error Registering Remote Notification")
}

在我的控制台中打印以下内容:

  

被称为

     

被称为

意味着不会调用所有必需的函数。我究竟做错了什么?

2 个答案:

答案 0 :(得分:1)

假设您在问题中发布的所有代码都在视图控制器类中,问题是您需要将UIApplicationDelegate方法放在实际的app委托类中,而不是视图控制器类。只需将这些方法移动到适当的类,它们就可以工作。

答案 1 :(得分:-1)

只需使用此代码

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


    print("gets called")
    let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)

          application.registerUserNotificationSettings(settings)
          application.registerForRemoteNotifications()
}



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

          let characterSet: NSCharacterSet = NSCharacterSet(charactersInString: "<>")

          let deviceTokenString: String = (deviceToken.description as NSString)
               .stringByTrimmingCharactersInSet(characterSet)
               .stringByReplacingOccurrencesOfString( " ", withString: "") as String
         print(deviceTokenString)
     }