据我所知,一旦我们从APNS获得device token,我们就无法再次获得它。 (除了备份数据到新设备或计算机,或重新安装操作系统或设备令牌更改时将调用didRegisterForRemoteNotificationsWithDeviceToken
)
所以,
每当设备令牌发生变化时,我都会将新设备令牌替换并保存在钥匙串中,以避免因其他目的而消失(例如将设备令牌用于UUID)。
当钥匙串数据消失但设备令牌没有改变时是否可能?
(如果是的话。它会导致再次调用didRegisterForRemoteNotificationsWithDeviceToken
,并且无法检索最后一个设备令牌。)
或者事件让钥匙串数据也消失(通常)让设备令牌改变(或再次触发didRegisterForRemoteNotificationsWithDeviceToken
)?
在我的测试中,
一个。 "重置所有设置"在iPhone中不会清除钥匙串数据并触发didRegisterForRemoteNotificationsWithDeviceToken
。
B中。 "删除所有内容和设置"在iPhone中将清除钥匙串数据并删除所有应用程序。因此,重新安装将再次调用didRegisterForRemoteNotificationsWithDeviceToken
的应用时。
案例A和B没有打扰我,我认为更新操作系统版本,重新安装操作系统或任何事件也会让设备令牌发生变化。
任何人都知道钥匙串和设备令牌之间价值变化的正确对应状态?
谢谢!
更新
问题是任何事件让钥匙串数据也消失(通常)触发" didRegisterForRemoteNotificationsWithDeviceToken"是不是?
如果没有,哪个事件?
答案 0 :(得分:2)
“据我所知,一旦我们从APNS获得设备令牌,我们就无法再次获取它”
当您的应用加载时,请致电
[[UIApplication sharedApplication] registerForRemoteNotifications];
这会导致您的app委托方法:
- (void) application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)token
被召唤。每次您的应用运行时,令牌都会发送给您。您不应该存储在钥匙串中。
您当然需要将令牌值发送到后端,以便可以使用它来发送推送消息。
答案 1 :(得分:0)
我想到的一个建议是使用NSUserDefaults
来存储设备令牌,然后从那里检索它并在每次应用程序启动时将其发送到后端appDelegate.m