APNS推送通知 - 设备令牌和钥匙串

时间:2014-10-10 11:33:24

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

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

所以,

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

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

    (如果是的话。它会导致再次调用didRegisterForRemoteNotificationsWithDeviceToken,并且无法检索最后一个设备令牌。)

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

    在我的测试中,

    一个。 "重置所有设置"在iPhone中不会清除钥匙串数据并触发didRegisterForRemoteNotificationsWithDeviceToken

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

    案例A和B没有打扰我,我认为更新操作系统版本,重新安装操作系统或任何事件也会让设备令牌发生变化。

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

  4. 谢谢!

    更新

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

    如果没有,哪个事件?

2 个答案:

答案 0 :(得分:2)

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

当您的应用加载时,请致电

[[UIApplication sharedApplication] registerForRemoteNotifications];

这会导致您的app委托方法:

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

被召唤。每次您的应用运行时,令牌都会发送给您。您不应该存储在钥匙串中。

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

答案 1 :(得分:0)

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