应用程序重新安装后是否会给出不同的设备令牌?

5
我记得在iPhone上重新安装后,设备令牌不会改变。然而,在现在的情况下(特别是在iOS 9上),我注意到重新安装应用程序时设备令牌正在更改。这是否是由苹果设置的,或者我有什么遗漏? 我必须了解这一点,因为对于我来说非常重要,我正在向特定用户发送基于推送的更新信息。此外,出现了许多不需要的设备令牌,原因未知。
注:我在AppDelegate中调用下面的Web服务。
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    // sending it to online database for my record
}

是的,我也遇到了同样的问题,但是删除应用程序、派生数据和构建文件,然后重新安装可以解决我的问题。 - Pratik Shah
@PratikShah:我没有任何问题...我只是想确保这是由苹果自己发生的,而不是我做错了什么...因为这个原因,我想删除不需要的设备令牌,并且我必须找到一个方法来实现这一点... - Fahim Parkar
4个回答

6

iOS9中,苹果表示设备令牌(Device Token) 可能会在每次应用安装时更改。因此,最好的方法是在每次启动时重新注册设备令牌。

这里是苹果关于更改设备令牌的文档链接。


正如我在问题中所说的,每次打开应用程序时我都已经进行了注册...而且我记得以前从来没有发生过这种情况... - Fahim Parkar
1
我认为这是在iOS 9中的新功能。 - Saheb Roy

1
你需要找到自己的方法来跟踪用户。以下是您的方法存在问题和建议使用的供应商标识符:
- 设备推送令牌可以在任何时候更改。您可以在应用程序启动期间跟踪此更改并要求服务器切换令牌,但在旧令牌上发送的消息将在此之前丢失。 - identifierForVendor也是非常不可靠的唯一标识符来源,因为它在许多情况下都会更改。
“此属性中的值在 iOS 设备上安装应用程序(或同一供应商的另一个应用程序)时保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值将更改。在使用 Xcode 安装测试构建或在使用 ad-hoc 分发在设备上安装应用程序时,该值也可能更改。因此,如果您的应用程序在任何地方存储此属性的值,则应优雅地处理标识符更改的情况。”

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


如果使用钥匙串,即使删除并重新安装应用程序,该项也将持久存在,甚至所有组的应用程序都是如此。 - zaph
@zaph 是的!当我们使用 MKStoreKit 时,这种持续性问题给我们带来了很多痛苦,我们不明白为什么在应用重新安装后没有看到正确的界面。该功能已被购买并激活。当我们深入研究他的代码时,我们发现了钥匙串,并从这种情况中学到了关于钥匙串的有用知识 :) - Serhii Mamontov

0

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


-1

但我的应用程序来自同一供应商...当我从应用商店重新安装时,它总是给我一个新的设备ID... - Fahim Parkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接