首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不返回deviceToken

不返回deviceToken
EN

Stack Overflow用户
提问于 2015-06-20 11:29:16
回答 1查看 1K关注 0票数 0

我是通过这种方式注册推送通知的:

代码语言:javascript
复制
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    Parse.setApplicationId("RfSGbVes0FGIX1sfxTEb3iybVsKgKPrfDuxco3vC", clientKey: "3pFBMar6vO6iUJouqTMt4VJVKZaXUc6p9RgHzTep")
    if application.applicationState != UIApplicationState.Background {
        let preBackgroundPush = !application.respondsToSelector("backgroundRefreshStatus")
        let oldPushHandlerOnly = !self.respondsToSelector("application:didReceiveRemoteNotification:fetchCompletionHandler:")
        var pushPayload = false
        if let options = launchOptions {
            pushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] != nil
        }
        if (preBackgroundPush || oldPushHandlerOnly || pushPayload) {
            PFAnalytics.trackAppOpenedWithLaunchOptionsInBackground(launchOptions, block: nil)
        }
    }
    let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound
    let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()
    return true
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let installation = PFInstallation.currentInstallation()
    installation.badge = 0
    println(installation.deviceToken) //deviceToken is nil
    let standardUserDefaults = NSUserDefaults.standardUserDefaults()
    standardUserDefaults.setObject(installation.deviceToken, forKey: "parseDeviceToken")
    standardUserDefaults.synchronize()
    delegate?.didFinishSettingToken()
    installation.setDeviceTokenFromData(deviceToken)
    installation.saveInBackgroundWithBlock(nil)
}

当我运行应用程序时,我有一个来自println(installation.deviceToken)的零值

也许还有其他方法来处理deviceToken

编辑:如果我停止应用程序并再次运行它,它将给出deviceToken。我不只是在第一次运行应用程序时才收到deviceToken

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-20 11:44:21

根据苹果文档

第一次注册应用程序的首选通知类型时,系统会询问用户是否应该允许应用程序传递通知并存储用户的响应。在随后的注册尝试中,系统不会提示用户。用户可以随时使用Settings应用程序更改通知首选项。

代码语言:javascript
复制
optional func application(_ application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings)
{
    application.registerForRemoteNotifications()
}

另外,你还得加上

代码语言:javascript
复制
UIApplication.sharedApplication().registerForRemoteNotificationSettings(settings)

对于iOS 7和8版本问题,请检查此教程

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30953457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档