跳到主要内容

App Attest 与隐私

问题

App Attest 是什么?iOS 隐私相关的面试知识点?

答案

App Attest

iOS 14+ 提供的设备完整性验证,可以验证请求来自正版未被篡改的 App。

import DeviceCheck

let service = DCAppAttestService.shared

// 1. 生成密钥
service.generateKey { keyId, error in
guard let keyId = keyId else { return }

// 2. 请求服务端发送 challenge
let challenge = serverChallenge.data(using: .utf8)!
let hash = SHA256.hash(data: challenge)
let hashData = Data(hash)

// 3. 生成 attestation
service.attestKey(keyId, clientDataHash: hashData) { attestation, error in
// 4. 发送 attestation 到服务端验证
}
}

iOS 隐私要求

特性版本说明
ATT 跟踪透明度iOS 14.5+必须弹框获取追踪授权
隐私标签iOS 14+App Store 展示数据使用
隐私清单iOS 17+声明 API 使用原因
剪贴板访问提示iOS 14+读取剪贴板会显示横幅

Privacy Manifest

PrivacyInfo.xcprivacy
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>

常见面试问题

Q1: ATT 弹框被用户拒绝怎么办?

答案:不能再次弹框。可以在弹框前展示自定义引导页说明追踪用途,提升用户同意率。如果被拒,使用 SKAdNetwork 归因替代 IDFA。

Q2: iOS 17 的隐私清单是必须的吗?

答案:是。Apple 要求所有包含"Required Reason API"(如 UserDefaults、文件时间戳、系统启动时间等)的 App 和 SDK 都必须声明使用原因,否则会收到审核警告。

相关链接