Ios 应用程序是否在重新安装时提供不同的设备令牌

Ios 应用程序是否在重新安装时提供不同的设备令牌,ios,apple-push-notifications,devicetoken,Ios,Apple Push Notifications,Devicetoken,我记得,重新安装iPhone时,设备令牌从未更改 然而最近(特别是在iOS 9上),我注意到如果我重新安装应用程序,设备令牌正在发生变化 这个设置是由苹果完成的还是我遗漏了什么 我必须知道这一点,因为这对我来说非常重要,因为我正在向特定用户发送基于推送的消息,以通知他们的更新 此外,毫无理由,还有许多设备代币是不需要的 注意 我在应用程序内的webservice下面呼叫代理 rtfm: 对于在同一设备上运行的来自同一供应商的应用,此属性的值是相同的。对于来自不同供应商的同一设备上的应用,以及对于

我记得,重新安装iPhone时,设备令牌从未更改

然而最近(特别是在iOS 9上),我注意到如果我重新安装应用程序,设备令牌正在发生变化

这个设置是由苹果完成的还是我遗漏了什么

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

此外,毫无理由,还有许多设备代币是不需要的

注意

我在应用程序内的webservice下面呼叫代理

rtfm: 对于在同一设备上运行的来自同一供应商的应用,此属性的值是相同的。对于来自不同供应商的同一设备上的应用,以及对于不同设备上的应用,无论供应商如何,都会返回不同的值


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


是指向苹果公司关于更改设备令牌的文档的链接是的,每次安装应用程序时都可能会更改。您需要在每次启动应用程序时更新设备令牌。

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

  • 设备
    推送令牌
    可以随时更改。您可以在应用程序启动期间跟踪此更改,并要求服务器切换令牌,但在此之前在旧令牌上发送的消息将丢失
  • 供应商的标识符
    -唯一标识符的来源也非常不可靠,因为它在很多情况下都会发生变化。 在iOS设备上安装应用程序(或来自同一供应商的其他应用程序)时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值将发生变化。当使用Xcode安装测试生成或在使用即席分发的设备上安装应用程序时,该值也会更改。因此,如果您的应用程序将此属性的值存储在任何位置,您应该优雅地处理标识符更改的情况


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

但我的应用程序来自同一供应商。。。当我从app store重新安装时,它总是给我新的设备id。是的,我也面临同样的问题,但是删除应用程序、派生数据和生成文件,然后再次安装可以解决我的问题。@PratikShah:我没有任何问题。。我只是想确定这只发生在苹果身上,我没有做错任何事。。。在此之前,我想删除未被通缉的设备令牌,我必须找到一种方法…正如我在问题中所说,我已经在每次打开应用程序时注册了…&我记得这以前从未发生过……我认为它在iOS 9A中是新的,而且如果使用钥匙链,该项目将在应用程序删除和重新安装期间持续存在,甚至是在一个组的所有应用程序中。@zaph Yes!当我们使用MKStoreKit时,这种持久性的东西给我们带来了很大的痛苦,我们不明白为什么在应用程序重新安装后我们看不到合适的接口。功能已购买并处于活动状态。当我们深入研究他的代码时,我们发现了Keychain,并从这种情况中学到了Keychain是如何有用的:)
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    // sending it to online database for my record
}