ios - 在 Swift 中注册远程通知时未收到设备 token

标签 ios swift apple-push-notifications

我在注册远程通知时无法收到设备 token 。我得到模态说“你想让 App X 能够向你发送通知”,但是当我接受它时,没有调用 didRegisterForRemoteNotifications 函数。

当我使用此代码在 iOS 8/Swift 中注册远程通知时:

    UIApplication.sharedApplication().registerForRemoteNotifications()
    let settings = UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Alert | UIUserNotificationType.Sound, categories: nil)
    UIApplication.sharedApplication().registerUserNotificationSettings(settings)
    UIApplication.sharedApplication().registerForRemoteNotifications()

这些函数根本没有被触发:

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

func application(application: UIApplication,    didFailToRegisterForRemoteNotificationsWithError error: NSError!) 

但是当我记录这个

println("current settings \(UIApplication.sharedApplication().currentUserNotificationSettings()) and \(UIApplication.sharedApplication().isRegisteredForRemoteNotifications())")

我收到了

"current settings <UIUserNotificationSettings: 0x170437120; types: (UIUserNotificationTypeAlert UIUserNotificationTypeBadge UIUserNotificationTypeSound);> and true" 

我的配置文件和证书都井井有条。

有其他人遇到过这个问题吗?

最佳答案

你可以试试这个

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        var types: UIUserNotificationType = UIUserNotificationType.Badge |
            UIUserNotificationType.Alert |
            UIUserNotificationType.Sound

        var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)

        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()

        return true
    }

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

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

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

        println(deviceTokenString)

    }

编辑:Swift 2.x 更新

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.


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

        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()

        return true
    }

编辑:Swift 3.x 更新

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

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

    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()

    return true
}


func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
let characterSet = CharacterSet(charactersIn: "<>")
    let deviceTokenString = deviceToken.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "");
    print(deviceTokenString)
}

关于ios - 在 Swift 中注册远程通知时未收到设备 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012420/

相关文章:

ios - 如何快速改变颜色的一小部分?

ios - iOS 中本地通知自定义图像图标的大小是多少

iOS:没有 cocoapods 和插件的 crashlytics 集成

ios - 适用于 iOS 的推送通知和服务

swift - 如何在 macOs 中禁用键盘输入?

ios - 使用 Unresolved 标识符 FIRMessaging

iphone - 使用铃声作为 iOS 的自定义推送通知声音

iOS 框架接收 Apple 推送通知

ios - 添加多行/连续行 - 在 Coredata 中填充数据库

ios - 如何在 Swift 中捕获 "Index out of range"?