ios - 限制设备号与 UIDevice.current.identifierForVendor
问题描述
我是一名初级专业软件开发人员。我正在开发具有每个用户设备限制的应用程序,我们使用 UIDevice.current.identifierForVendor 来识别设备。不幸的是,我们在安装和重新安装应用程序时遇到了“达到设备限制”的问题。
根据 identifierForVendor 文档:
当应用程序(或来自同一供应商的另一个应用程序)安装在 iOS 设备上时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值会发生变化。
问题很明显——删除并重新安装应用程序后,我们有一个新的标识符ForVendor,我们将其视为新设备。
根据文档的另一部分:
通常,供应商由 App Store 提供的数据确定。如果应用程序不是从应用程序商店安装的(例如企业应用程序和仍在开发中的应用程序),则会根据应用程序的捆绑 ID 计算供应商标识符。
我有两个问题:
- 当我们从 Xcode 或 TestFlight 安装应用程序时会出现问题。当我们从 AppStore 安装应用程序时,它也会出现吗?
- 有没有其他方法可以限制设备数量和确定设备?
PS。我知道,已经有一些类似的问题,但在我看来,答案并不详尽,而且是几年前的事了 :)
解决方案
您可以尝试使用Keychain来做到这一点:
- 产生
UUID().uuidString
- 使用密钥“UniqueDeveiceID”或其他东西将其保存到带有一些钥匙串包装器(例如KeychainAccess )的钥匙串。
- 将生成的 UUID 发送到服务器(或其他)
总结:应用程序启动后,只需检查键的值是否UniqueDeveiceID
存在。重新安装后钥匙串没有清理,因此您必须有机会检查它是重新安装还是新注册的设备。
推荐阅读
- angular - 需要帮助来重构 Angular 中的异步管道
- laravel - 如何在 GCP Standard App Engine 上部署 laravel websocket?
- inheritance - Mapstruct如何从组合映射到继承?
- dns - DNS 数据包(标头、请求、响应)如何解析
- r - 由于不正确的长度检查,R tapply() 不适用于 data.frame
- sql - PostgreSql:将行插入数据库后无法检索行?
- java - 尽管显式编写了另一个构造函数,但是否创建了空构造函数?
- c# - 如何使用 IConfiguration 对象访问其他键的父键的值?
- javascript - 如果附加了组标签 ID,如何克服 D3JS 树的消失
- php - PHP 中的 ImageMagick Watermark - 如何使用原始图像大小的 % 而不是水印图像大小的 % 来缩放水印?