1

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

所以,

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

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

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

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

    在我的测试中,

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

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

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

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

谢谢!!

更新

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

如果不是,是哪个事件?

4

2 回答 2

2

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

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

[[UIApplication sharedApplication] registerForRemoteNotifications];

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

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

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

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

于 2014-10-10T12:40:49.760 回答
0

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

于 2014-10-11T07:50:21.617 回答