【问题标题】:APNS Push Notification - device token and keychainAPNS 推送通知 - 设备令牌和钥匙串
【发布时间】:2014-10-10 11:33:24
【问题描述】:

据我所知,一旦我们从 APNS 获得了 device token,我们就无法再获得它。 (除非将数据备份到新设备或计算机,或重新安装操作系统或任何时候设备令牌发生更改,这将调用didRegisterForRemoteNotificationsWithDeviceToken

所以,

每当设备令牌更改时,我都会替换并将新设备令牌保存在钥匙串中,以避免它因其他目的而消失(例如将设备令牌用于 UUID)。

  1. 钥匙串数据消失但设备令牌没有改变时是否可能?

    (如果是,会导致didRegisterForRemoteNotificationsWithDeviceToken不再被调用,无法取回最后一个设备token。)

  2. 或者让钥匙串数据消失的事件也(通常)让设备令牌改变(或再次触发didRegisterForRemoteNotificationsWithDeviceToken)?

    在我的测试中,

    A. iPhone中的“重置所有设置”不会清除钥匙串数据并触发didRegisterForRemoteNotificationsWithDeviceToken

    B. iPhone 中的“删除所有内容和设置”将清除钥匙串数据并删除所有应用程序。因此,当重新安装将再次调用didRegisterForRemoteNotificationsWithDeviceToken 的应用程序时。

    情况 A 和 B 不会打扰我,我认为更新操作系统版本、重新安装操作系统或任何事件都会让设备令牌发生变化。

  3. 有人知道钥匙串和设备令牌之间正确对应的值变化状态吗?

谢谢!!

更新

问题是任何事件让钥匙串数据消失也(通常)再次触发“didRegisterForRemoteNotificationsWithDeviceToken”?

如果不是,是哪个事件?

【问题讨论】:

  • 您可以在需要时获取设备令牌.. 并且在您需要时也调用了 didRegisterForRemoteNotificationsWithDeviceToken。

标签: ios objective-c apple-push-notifications keychain devicetoken


【解决方案1】:

“据我所知,一旦我们从 APNS 获得了设备令牌,我们就无法再次获得它”

当您的应用加载时,您调用

[[UIApplication sharedApplication] registerForRemoteNotifications];

这会导致您的应用委托方法:

- (void) application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)token

被调用。每次您的应用程序运行时,都会将令牌交给您。您不需要存储在钥匙串中。

您当然需要将令牌值发送到您的后端,以便它可以用于发起推送消息。

【讨论】:

  • 谢谢。但就我而言,我使用设备令牌作为 UUID 来从后端查询一些数据。所以它必须保存在钥匙串中。因为设备令牌没有改变,“didRegisterForRemoteNotificationsWithDeviceToken:”不再被调用。(文档说)。然后钥匙串消失时无法检索最后一个设备令牌。
【解决方案2】:

我想到的一个建议是使用NSUserDefaults 存储设备令牌,然后在每次应用程序以appDelegate.m 启动时从那里检索它并将其发送到后端

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多