轻量级的 iOS 设备指纹库
App Store 上的演示应用
安装(CocoaPods)
# Podfile
pod 'FingerprintJS'
注意:如果您从未使用 CocoaPods 进行依赖管理,请查看他们的 Using CocoaPods 指南,该指南会指导您完成设置过程。
快速开始(async/await - 推荐使用)
import FingerprintJS
let fingerprinter = FingerprinterFactory.getInstance()
async {
// Get fingerprint for the current device
let fingerprint = await fingerprinter.getFingerprint()
// Do something awesome with the fingerprint
}
快速开始(闭包 - 兼容性反向)
import FingerprintJS
let fingerprinter = FingerprinterFactory.getInstance()
fingerprinter.getFingerprint { fingerprint in
// Do something awesome with the fingerprint
}
指纹 vs. 设备 ID
FingerprintJS
提供了两种主要方法,返回不同类型的标识符
-
调用
Fingerprinter::getDeviceId()
获取的设备标识符,该标识符内部使用identifierForVendor()
方法,返回当前应用的唯一标识符(与设备相关)。FingerprintJS
还在密钥链中记住此标识符,即使在应用重装之间,该标识符也保持稳定。 -
Fingerprinter::getFingerprint()
通过收集设备信息(硬件、OS、设备设置等)并从可用项计算哈希值来计算设备指纹。由于这些值可能在操作系统更新或用户更改用作计算先前值的设置时发生变化,因此指纹的稳定性不如设备标识符稳定。此外,可以通过向Configuration
对象提供stabilityLevel
选项来自定义指纹的稳定性。
配置
Fingerprinter
实例可以通过 Configuration
对象进行配置,该对象提供选项来选择指纹版本,设置所需的指纹稳定性级别,或更改用于计算个别指纹的算法。
// note that this example exists only to illustrate the available options
// and that its outcome mirrors the current default configuration
let configuration = Configuration(version: .latest, stabilityLevel: .optimal, algorithm: .sha256)
let fingerprinter = FingerprinterFactory.getInstance(config)
// fingerprinter uses latest fingerprint version with OPTIMAL stability level and SHA256 algorithm
指纹稳定性级别
有三种不同的指纹稳定性级别,如下文所述:
unique
,表示使用库能够收集到的每个信号。此稳定性级别建议用于获取最精确的指纹。optimal
,表示使用不变信号和可能变化但不太频繁变化的信号的组合。这是默认稳定性级别,建议提供指纹稳定性和指纹精度之间的最佳平衡。stable
,表示使用硬件信号或根本不应更改的信号。此稳定性级别建议用于获取最稳定的指纹。
注意:所提供的稳定性级别仅适用于指纹版本
v3
及以上,如果使用指纹版本v1
或v2
,则会被忽略。
创建自定义指纹函数
默认的哈希函数是从内容数据计算指纹的 SHA256。通过在 algorithm
变量中指定 .custom(YourCustomFingerprintFunctionInstance)
,Configuration
对象提供了一种注入自定义哈希函数的方法。
struct HitchhikersFunction: FingerprintFunction {
func fingerprint(_ data: Data) -> String {
return "42"
}
}
let fingerprintFunction = HitchhikersFunction()
let config = Configuration(version: .latest, stabilityLevel: .optimal, algorithm: .custom(fingerprintFunction))
let fingerprinter = FingerprinterFactory.getInstance(config)
let fingerprint = await fingerprinter.getFingerprint() // returns "42"
请注意,所提供的哈希函数的更改将不可避免地导致输出指纹的变化。
许可证
此库受MIT许可。版权所有:FingerprintJS, Inc. 2022。