网上看到说这个 devicecheck 数据会存储在苹果服务器中, 而不是在手机里, 即使对手机进行抹机重置, 也照样会保留这个数据, 记录设备的使用情况.
既然数据记录在服务器当中, 而不是在本地, 那么是否可以理解为这个特性跟本机其实是无关的? 它到底是只能用于 ios11, 还是也能用于 ios10 或其它版本?
由于这个原因一直没有升 iOS11, 因为陌陌 探探什么的封号会连设备一起给封了, 担心升了 ios11 的话, 以后如果 app 适配了这个新特性, 就没办法用抹机重置之类的方法更新设备逃脱封禁.
===============================
引用 V2EX @
honeycomb :
"...目前 iOS 上唯一允许的永久识别码只有一个,它有两比特容量,在系统重置后不重置,不跨应用,开发者可以自行设置它的值,因此可用于检测滥用(免费期等),但其容量太小,不具备唯一性..."
"...iOS11 半嘲讽地提供了一个开发者可使用的持久识别码,而且只有 2bit,这个东西可以用来防止滥用重置,但做不到识别用户..."
--------------------------------------------------------------
下面还有网上的一些说明:
"DeviceCheck 允许你通过你的服务器与 Apple 服务器通讯,并为单个设备设置两个 bit 的数据。简单说,你在设备上用 DeviceCheck API 生成一个 token,然后将这个 token 发给自己的服务器,再由自己的服务器与 Apple 的 API 进行通讯,来更新或者查询该设备的值。这两个 bit 的数据用来追踪用户比如是否已经领取奖励这类信息。"
"iOS 11 中写入了便于软件开发者操作使用的“设备检查(DeviceCheck)”功能,这项功能可以帮助软件开发者们准确记录 iPhone 的 4 种运行状态。
比如,某 iPhone 手机在某一个月里免费试使用了一应用软件,这一期间内,“设备检查(DeviceCheck)”将手机状态记录为“状态 A ”。试用期之后,用户停止该免费软件的使用,“设备检查(DeviceCheck)”会将此时的设备情况记录为“状态 B ”。
“设备检查(DeviceCheck)”写入 iOS 系统之前,用户对 iPhone 进行软件删除或初始化操作后,该状态下的手机数据会被系统尽数删除,当再次使用该软件时,手机将显示为初次使用的试用期状态。
上述举例中,对 iPhone 进行初始化操作后,使用“设备检查(DeviceCheck)”程序将手机转换至“状态 B ”,从而避免手机陷入再次试用软件的麻烦中。
但是,“设备检查(DeviceCheck)”程序会将手机的各个状态下的数据保存在 Apple 服务器中,即使对手机进行删除软件,或初始化操作,“设备检查(DeviceCheck)”程序都可以通过连接 Apple 服务器来检查手机的各种状态数据。
但是,在二手的 iPhone 手机中却再次产生问题。无论初次使用的是何种软件,免费试用阶段结束后、仅限新用户享用的优惠条款将无法供手机的新主人再次使用。
变卖,转让不会改变 iPhone 的使用状态
即使对 iPhone 进行初始化操作,手机也会默认保存各项数据,转让与出售并不会改变 iPhone 的使用状态。
该程序不仅限应用于防止程序初始化,比如,用户参与某些仅针对初次使用该软件用户的项目与优惠活动时、或某些仅限新用户的营销活动时,“设备检查(DeviceCheck)”程序便能用来防止因违规操作而受到惩罚的用户,再次享受这些优惠。"