app会在重新安装时给出不同的设备令牌

时间:2015-11-24 08:43:18

标签: ios apple-push-notifications devicetoken

我记得,在重新安装iPhone时设备令牌永远不会改变。

但是现在(特别是在iOS 9上),我注意到如果我重新安装应用程序,设备令牌正在改变。

此设置是由Apple完成还是我遗漏了什么?

我必须知道这一点,因为这对我来说非常重要,因为我发送基于特定用户的推送来通知他们的更新。

也无缘无故地想要许多设备令牌。

注意

我在App Delegate

中的webservice下面调用
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    // sending it to online database for my record
}

4 个答案:

答案 0 :(得分:6)

是的,在iOS9上,Apple表示设备令牌可能会在每次安装应用时发生变化。因此,最好的方法是在每次启动上重新注册设备令牌。

{{3}}是有关更改设备令牌的Apples文档的链接

答案 1 :(得分:1)

您需要找到自己的方式来跟踪用户。以下是您的方法和建议的供应商标识符的问题:

  • 设备push token可随时更改。您可以在应用程序启动期间跟踪此更改并要求服务器切换令牌,但是将在旧令牌上发送到此刻的消息将丢失。
  • identifierForVendor - 也是非常不可靠的唯一标​​识符来源,因为它会在很多情况下发生变化。
      

    在iOS设备上安装应用程序(或来自同一供应商的其他应用程序)时,此属性中的值保持不变。当用户从设备中删除所有该供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。使用Xcode安装测试版本或使用ad-hoc分发在设备上安装应用程序时,该值也会发生变化。因此,如果您的应用程序将此属性的值存储在任何位置,则应优雅地处理标识符更改的情况。

对于单个设备,您可以使用Keychain作为持久标识符存储的来源。您可以为用户生成新的唯一标识符(例如,使用NSUUID)并将其存储在Keychain中(如果尚不存在)。如果将为存储的项目配置访问组并对所有应用程序重复使用 - 您将可以从用户设备上的应用程序访问存储的唯一标识符。如果配置正确,Keychain中的项目将存储在加密的用户设备备份中,甚至将在其新设备上恢复。

答案 2 :(得分:0)

是的,每次安装应用程序时都可能会更改。您需要在每次启动应用时更新device_token。

答案 3 :(得分:-1)

RTFM: “对于来自在同一设备上运行的同一供应商的应用程序,此属性的值相同。对于来自不同供应商的同一设备上的应用程序,以及不同供应商的不同设备上的应用程序,返回不同的值。 “

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/#//apple_ref/occ/instp/UIDevice/identifierForVendor