05 / iOS
iOS 上本地指纹基本不成立
这是三端里最需要换思路的一端。如果照着 Android 的方式设计 iOS 采集,会发现根本凑不出足够的熵。
主干:IDFV 加 Keychain
identifierForVendor(IDFV)是系统给同一开发者旗下应用的设备标识。它的问题是:用户卸载该开发者的最后一个应用后,值就会重置。
通行做法是把它写进 Keychain。Keychain 的数据在应用卸载后仍可能保留,因此能跨重装续上。
依赖风险
Keychain 卸载后保留这个行为 Apple 从未写进文档。它多年未变,但没有任何承诺。把它当作唯一依赖是有风险的,官方自己的建议也是把 IDFV 作为方案的一部分而非全部。
能读到的本地信号
- 机型与硬件信息
- 磁盘容量
- 内存容量
- 系统版本
- 内核信息
- locale
- 用户设置类项
开源 iOS 库只公开三档稳定性策略,不公开具体信号清单。
读不到的
- IMEI:公开 API 完全拿不到
- IDFA:需要 ATT 弹窗用户主动授权,实践中同意率低,不能作为主干
- UDID:iOS 5 起已废弃
稳定性三档
| 档位 | 取值 | 适用 |
|---|---|---|
| unique | 用上全部可采集信号 | 要最高辨识度 |
| optimal | 稳定信号加少量可能变化的信号 | 默认,平衡取舍 |
| stable | 只用硬件类不会变的信号 | 要最高稳定性 |
iOS 专属 Smart Signals
- 越狱检测
- Simulator 检测
越狱本身不会让 visitorId 变,恢复出厂会。完整对照见 06 持久性。