我的应用已连接到远程推送通知服务。在服务器端,他们希望为设备保留唯一ID,即使应用已删除并重新安装,也不应更改。我们可以获取Device UDID并发送到服务器吗?如果我这样做,Apple会拒绝我的应用程序从商店?而且我认为即使应用程序被删除,这也是在服务器端永久保留的最佳ID。
我需要你的建议。请帮我。 感谢
答案 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时,它将从钥匙串访问中获取。即使应用程序被删除/替换了它的唯一性。