使用UIDevice.current.identifierForVendor实现设备限制的问题咨询
问题1:App Store正式版是否会出现相同问题
会,该问题和App分发渠道没有关联。
identifierForVendor的核心变化规则仅和设备上「同一开发者账号下的App留存状态」绑定:只要用户把该开发者名下所有App全部卸载,之后不管通过什么渠道重装App,identifierForVendor都会重新生成。你目前仅在Xcode、TestFlight场景遇到问题,是因为测试阶段频繁卸载、重装测试包的操作更容易触发「全部同开发者App卸载」的条件,正式环境下如果用户卸载了你家所有App后再重装,同样会触发设备计数异常。
问题2:准确识别设备实现数量限制的方案
以下方案均符合苹果审核规则,按可靠性从高到低排序:
- 方案1:采用
DeviceCheck框架
iOS 11及以上系统支持,苹果官方提供的跨App卸载、跨系统升级的设备标识能力,每台设备对应持久化的2 bit状态位,你可以将「设备是否已绑定账号」的标记写入该状态位,即使App卸载、刷机后恢复备份,该状态位都不会丢失。配合后端存储的绑定关系,即可准确识别旧设备,不会出现重复计数问题。
注意:状态位仅能存储2种布尔状态,复杂的绑定关系需要存储在你方后端,不要用该字段存储额外信息。 - 方案2:Keychain持久化存储自定义UUID
首次启动App时生成随机UUID,存储到系统Keychain中,只要用户不刷机、不恢复出厂设置,即使App卸载重装,Keychain内对应Access Group的存储内容不会丢失,你可以直接读取该UUID作为设备唯一标识。如果有同开发者的多款App,可以开启Keychain共享能力,保证多App读取到同一个设备标识,进一步降低标识丢失概率。
该方案兼容全版本iOS系统,实现成本极低。 - 方案3:IDFA辅助校验
如果你的App本身具备广告投放相关功能,已经合规申请了IDFA权限,可以将IDFA作为辅助校验字段,和前两种方案的标识组合校验,进一步降低识别误差。如果App没有广告相关功能,不要强制申请IDFA权限,否则会被App Store拒审。
内容的提问来源于stack exchange,提问作者Janek Podwysocki
相关产品推荐
相关产品推荐

