即使在iOS中删除并重新安装的应用,如何唯一地识别设备?

时间:2015-09-25 06:09:49

标签: ios apple-push-notifications udid

我的应用已连接到远程推送通知服务。在服务器端,他们希望为设备保留唯一ID,即使应用已删除并重新安装,也不应更改。我们可以获取Device UDID并发送到服务器吗?如果我这样做,Apple会拒绝我的应用程序从商店?而且我认为即使应用程序被删除,这也是在服务器端永久保留的最佳ID。

我需要你的建议。请帮我。 感谢

3 个答案:

答案 0 :(得分:2)

我在iOS7上使用identifierForVendor进行了一些测试

  

应用安装后:28FD42B6-A993-4602-A988-69E375A1F913
之后   杀死应用程序:28FD42B6-A993-4602-A988-69E375A1F913
删除后   并重新安装应用程序:28FD42B6-A993-4602-A988-69E375A1F913
之后   系统还原并重新安装应用程序:   4948F77F-3D41-4933-B2F0-C4DCB529C7CC
从备份恢复后   系统恢复前:28FD42B6-A993-4602-A988-69E375A1F913

因此,只有在设备上有相同供应商的应用时,即使删除并重新安装应用,供应商的标识符仍然存在。

  

此应用程序(或其他应用程序)中此属性的值保持不变   iOS设备上安装了来自同一供应商的应用程序。价值   当用户从中删除所有该供应商的应用程序时更改   设备,然后重新安装其中一个或多个。因此,如果   你的应用程序应该在任何地方存储此属性的值   优雅地处理标识符更改的情况。

APNS令牌应该仅用作发送推送的标识符,它不应该以任何方式与特定设备相关。推送令牌可以随着时间的推移而改变,你应该准备好管理它,这在Apple文档中有说明(即使在禁用和重新启用它们之后我从未看到一个更改,它似乎在iOS更新后发生了变化)。 另一种方法是创建您的UUID并将其保存在钥匙串中,这只会在系统恢复后才会被删除 如果您想将其保存在NSUserDefault中,请注意它已随您的应用删除
您可以从NSHipster中找到有趣的post

答案 1 :(得分:0)

  • 如果您重置设备,钥匙串将会重置。

  • 每次删除并重新安装应用时,“[[UIDevice currentDevice] identifierForVendor]”中的唯一ID都会更改。

您是对的,您应该使用APNS中的设备令牌获取唯一ID。

答案 2 :(得分:0)

如前所述; 安装应用程序后,其uuid是唯一的,但是如果删除并重新安装应用程序,则其uuid会更改。

因此,克服了这个问题,我使用钥匙串访问来检索和保存uuid。

对于钥匙串访问包装器,我使用了一个名为

的第三方
pod 'SwiftKeychainWrapper'

为了获得uuid,我创建了此方法。

func getUDIDofDevice() -> String {
    //Check is uuid present in keychain or not
    if let deviceId: String = KeychainWrapper.standard.string(forKey: "deviceId") {
        return deviceId
    }else{
        // if uuid is not present then get it and store it into keychain
        let key : String = (UIDevice.current.identifierForVendor?.uuidString)!
        let saveSuccessful: Bool = KeychainWrapper.standard.set(key, forKey: "deviceId")
        print("Save was successful: \(saveSuccessful)")
        return key
    }
}

这里将发生什么::如果在钥匙串访问中不存在uuid,则使用uuid字符串保存它。并且每当您需要此uuid时,它将从钥匙串访问中获取。即使应用程序被删除/替换了它的唯一性。

相关问题