我正在开发一个程序,我需要存储一个唯一的 device_id ,因为我无法为每个设备获取唯一标识符(例如 MAC地址),因为它已被弃用通过 Apple 。
我想要做的是,将文件存储在iOS的特定目录中,即使用户删除我的iOS应用程序,该文件也不会被删除。我这样说是因为我使用了NSUserDefaults
但是如果用户删除了它的应用程序,那么从中存储的数据就会被删除。
* P.S或者,如果有另一种方法来识别具有unique_id的每个设备,欢迎提出建议!*
答案 0 :(得分:5)
您应该使用KeyChain保存不应与app一起删除的信息。 https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/Reference/reference.html
更新
这个SO线程可能对您有用Saving/Reading to/from KeyChain
答案 1 :(得分:0)
我需要存储一个唯一的device_id,因为我无法获得唯一的 标识符
这不是100%正确。你可以使用
[ UIDevice currentDevice ].identifierForVendor
来自Apple's docs:
此属性的值对于来自的应用程序是相同的 在同一设备上运行的同一供应商。返回不同的值 对于来自不同供应商的同一设备上的应用程序,以及 不论供应商如何,都可以在不同的设备上使用。
通常,供应商由App Store提供的数据确定。 我没有从应用商店安装该应用(例如企业版) 应用程序和应用程序仍在开发中,然后是供应商标识符 根据应用程序的包ID计算。假设包ID 是反向DNS格式。
在iOS 6上,捆绑ID的前两个组件用于 生成供应商ID。如果捆绑包ID只有一个组件, 然后使用整个包ID。在IOS 7上,所有组件都是 除最后一个组件之外的bundle用于生成供应商 ID。如果bundle ID只有一个组件,那么整个 使用了包ID。