数治入门 | 做好 SDK 和 APP 合规应对苹果新的隐私要求

新的隐私保护要求从2024年春季开始实施,苹果早就针对有问题的开发者进行邮件通知,相关开发者现在需要进行内部梳理,落实苹果的隐私新规,避免影响产品上架使用。

做好SDK和APP合规应对苹果新的隐私要求
出处: CCIA数据安全工作委员会

自苹果推出IDFA之后,就一直在不断加大力度来完善苹果内部的隐私保护机制,在2023年苹果全球开发者大会(Worldwide Developers Conference,简称“WWDC”)上,苹果又宣布了2024年的春季新政策,同时在官网发布的《关于App Store提交的隐私更新》文档中新增了两类隐私保护要求。

第一就是要求SDK开发者要增加SDK隐私清单和签名,第二是要求SDK开发者和App开发者如果使用了5类特殊的API,则需要声明具体的使用原因。因此,SDK开发者和App开发者均需要关注新的隐私要求,并在2024年春季之前完成内部整改。

1. SDK新增隐私清单和签名要求

1.1 苹果为什么要新增SDK隐私清单和签名要求?

苹果在官网发布的《即将发布的第三方SDK要求》中指出,SDK能够为App带来很多的便利,但也可能会对用户的隐私产生一定的影响,所以当App集成SDK时,需要对其使用的SDK包含的所有代码负责,并且切实了解SDK的数据收集和使用实践。因此,苹果在WWDC上宣布了新的SDK隐私清单和签名要求,旨在帮助大家更好地了解第三方SDK的数据处理方式。同时,Xcode会在开发者准备上架和分发App时,为其提供一份由此App所嵌入的所有的SDK的隐私清单合并成的一份报告,使得开发者能够基于此报告真正全面了解SDK的数据处理情况,从而创建更准确的隐私标签,切实保障用户的知情权。

1.2 SDK隐私清单和签名要求适用于哪些SDK?

苹果官网发布的《即将发布的第三方SDK要求》中指出,苹果提出的SDK 隐私清单和签名要求目前强制适用于App常用的86款SDK,具体如下:

Abseil
AFNetworking
Alamofire
AppAuth
BoringSSL/openssl_grpc
Capacitor
Charts
connectivity_plus
Cordova
device_info_plus
DKImagePickerController
DKPhotoGallery
FBAEMKitFBLPromises
FBSDKCoreKit
FBSDKCoreKit_BasicsFBSDKLoginKit
FBSDKShareKit
file_picker
FirebaseABTesting
FirebaseAuth
FirebaseCore
FirebaseCoreDiagnostics
FirebaseCoreExtension
FirebaseCorelnternal
FirebaseCrashlytics
FirebaseDynamicLinks
FirebaseFirestore
FirebaseInstallations
FirebaseMessaging
FirebaseRemoteConfig
Flutter
flutter _inappwebview
flutter local notifications
fluttertoast
FMDB
geolocator_appleGoogleDataTransportGoogleSigninGoogleToolboxForMac
GoogleUtilities
grpcpp
GTMAppAuth
GTMSessionFetcher
hermes
image_picker_ioslQKeyboardManagerlQKeyboardManagerSwift
Kingfisher
leveldb
Lottie
MBProgressHUD
nanopb
OneSignal
OneSignalCore
OneSignalExtension
OneSignalOutcomes
OpenSSL
OrderedSet
package_info
package_info_plus
path_provider
path_provider_ios
Promises
Protobuf
便捷访问功能
RealmSwift
RxCocoa
RxRelay
RxSwift
SDWeblmage
share_plus
shared preferences ios
SnapKit
sqflite
Starscream
SVProgressHUD
SwiftyGif
SwiftyJSON
Toast
UnityFramework
url launcher
url launcher ios
video_player_avfoundation
wakelock
webview _flutter_wkwebview

此外,苹果特别强调该要求适用于所有上述SDK的任何版本,以及重新打包上述范围的任何SDK。针对并不属于上述范围的其他SDK,苹果强调其鼓励所有SDK采用这项功能,但是这目前并非强制性要求。

1.3 SDK如何建立隐私清单来披露数据使用情况?

SDK开发者需要自行提供一个独立的SDK隐私清单,以统一标准格式概述SDK的数据使用情况。隐私清单需要披露收集的数据类型和收集目的,具体示例如下:

数据使用情况 类型
示例

联系

数据

姓名、邮件地址、电话号码、实际住所、其他用户的联系数据。
健康
数据
健康医疗数据、健康运动数据。
金融
数据
支付数据、信用数据、其他财务数据。
位置
数据
精确位置(经纬度坐标精确到小数点3位及以上)、粗略位置(经纬度坐标精确到小数点3位以内)。
敏感
数据
种族或民族数据、性取向、怀孕或分娩数据、残疾、宗教或哲学信仰、工会成员身份、政治观点、遗传或生物识别数据等。
联系
数据
用户电话、通讯簿或社交联系人列表等。
用户
内容
数据
电子邮件
或短信
主题行、发件人、收件人以及电子邮件或消息的内容。
照片或
视频
用户的照片或视频。
音频数据
用户的语音或录音。
游戏
内容
保存的游戏、多人游戏匹配或游戏逻辑,或用户在游戏中生成的内容等。
客户支持
用户在使用客服期间生成的数据。
其他
用户内容
任何其他用户生成的内容。
浏览
记录
有关用户查看过的不属于应用的内容的数据,例如网站。
搜索
历史
有关在应用程序中执行的搜索的数据。
标识符
用户ID
屏幕名称、句柄、账户ID、分配的用户ID、客户编号或其他可用于标识特定用户或账户的用户级或账户ID。
设备ID
设备的广告标识符或其他设备级ID。
购物
数据
购买记录。
使用
数据
产品
交互
数据
应用启动、点击、点击、滚动数据、音乐收听数据、视频观看次数、游戏、视频或歌曲中的保存位置,或有关用户如何与应用交互的其他数据。
广告数据
有关用户看到的广告的数据。
其他应用中用户活动的使用数据。
诊断
数据
崩溃数据、性能数据、其他诊断数据。
环境
数据
环境扫描数据。
身体
数据
手、头的动作数据。
其他
数据
上述未提及的其他类型数据。

开展
三方
广告
活动
在应用中显示第三方广告,或与显示第三方广告的组织机构共享数据。
开展
一方
广告
营销
在应用中展示第一方广告、直接向用户发送营销数据,或与展示广告的组织机构共享数据。
分析
使用数据来评估用户行为,包括了解现有产品功能的有效性、规划新功能或衡量受众规模或特征。
产品
个性化
自定义用户看到的内容,例如推荐产品、帖子或建议的列表。
应用
功能
对用户进行身份验证、启用功能、防止欺诈、实施安全措施、确保服务器正常运行时间、最大限度地减少应用程序崩溃、提高可扩展性和性能或提供客户支持。
其他
用途
未列出的任何其他用途。

1.4 App开发者如何使用SDK隐私清单?

SDK隐私清单可以清晰的披露SDK的数据处理情况,如果一个App集成了多款SDK,苹果的Xcode工具会将App使用的所有第三方SDK的隐私清单合并为一个简单易读的隐私报告,帮助开发者更好地了解App中SDK的数据处理情况。App开发者可以通过执行以下操作来创建隐私报告:

  1. 在Xcode中打开项目;
  2. 选择“产品”>“存档”,Xcode会创建归档并在管理器中显示它;
  3. 按住Control键点按管理器中的归档,然后选取“生成隐私报告”;
  4. 选择保存隐私报告的位置;
  5. 切换到Finder;
  6. 导航到保存隐私报告的位置,然后双击以在“预览”中打开报告。

1.5 SDK如何进行签名?

苹果官网发布的《即将发布的第三方SDK要求》中指出,苹果现在推出了SDK签名功能,在上述86款SDK用作二进制文件依赖项的情况下,需要采用签名功能,因为用作二进制依赖项的SDK是以二进制文件形式存在的预编译完成的代码库或框架,可以直接被链接至App,可能存在被篡改的风险,所以当App将新版本的SDK作为已编译好的代码库或框架(二进制文件)集成至App中时,Xcode将验证它是否由同一开发者签名,验证一致后才可以继续进行编译,从而通过确保SDK未被篡改的一致性来提高软件供应链的完整性。

2. 5类API新增使用声明要求

2.1 为什么苹果要对5类API新增使用声明要求?

苹果官网文档中指出,App或SDK在使用某些API来实现核心功能时,可能会存在滥用API以尝试识别设备或用户的问题,这也被称为指纹识别,但是无论用户是否授予App跟踪权限,指纹识别都是苹果所禁止的行为,所以苹果新增要求App和 SDK阐述在iOS、iPadOS、Apple tvOS、visionOS或watchOS上使用5类特殊API的原因,以便于检查是否仅出于预期目的来使用这些API,从未更好地保护用户隐私。

2.2 使用哪5类API需要说明原因?

苹果官网文档中明确了需要说明使用原因的5类API的名称,并要求App和SDK各自在隐私清单中对此进行独立声明,App及SDK只能出于声明的理由使用这些API及其产生的数据,这些声明的理由必须与向用户呈现的App功能保持一致,且不得使用API或衍生数据进行用户追踪。5类API及其使用原因如下:

序号
权限
使用原因
1
File Timestamp APIs
  1. 向使用设备的用户显示文件时间戳。
  2. 访问App容器、App组容器或App的CloudKit容器内文件的时间戳、大小或其他元数据。
  3. 访问用户明确授予访问权限的文件或目录的时间戳、大小或其他元数据,例如使用文档选取器、视图控制器的数据。
  4. SDK需要基于此API来为App提供包装器函数(wrapper function),App开发者仅在App调用包装器函数时使用此API。(此理由仅能由SDK进行声明)
2
System Boot Time APIs
访问系统启动时间,以便测量应用中发生的事件之间经过的时间量,或执行计算以启用计时器。
3
Disk Space APIs
  1. 向使用设备的人员显示磁盘空间数据。
  2. 检查是否有足够的磁盘空间写入文件,或检查磁盘空间是否不足,以便在磁盘空间不足时删除文件。
  3. 以便在使用设备的用户选择提交的可选错误报告中包含磁盘空间数据。
4
Active Keyboard APIs
  1. 如果App是一个自定义键盘App,需要使用此API来确定设备上处于活动状态的键盘。
  2. 访问活动键盘数据,以便向使用设备的用户显示正确的自定义用户界面。
5
User Defaults APIs
  1. 读取和写入只有App本身才能访问的数据。
  2. 读取和写入只能由与App本身属于同一App组的App、App扩展和轻App访问的数据。
  3. 读取密钥以检索MDM设置的托管App配置,或将密钥设置为存储要通过MDM查询的反馈数据。
  4. SDK需要基于此API来为App提供包装器函数,App开发者仅在App调用包装器函数时使用此API。(此理由仅能由SDK进行声明)

2.3 如果开发者使用API的原因并不在苹果列出的原因范围内,应如何处理?

苹果官网文档中指出,原则上开发者只能基于上述列表中的原因来使用这5类API,但是苹果也会持续审核使用API的原因,并将不时地更新上述原因列表。如果开发者确实是基于有益于用户的考虑,需要基于原因列表外的其他原因来使用这5类API,则开发者可以给苹果发送请求以增加新的原因。

3. 总结

苹果此次针对SDK和API提出了更细化的隐私保护要求,第一就是增加SDK隐私清单和签名。第二是如果使用了5类特殊的API,则需要声明具体的使用原因。需要注意的是,首先,苹果所提出的建立SDK隐私清单和签名只强制适用于官网披露的86款SDK。其次,App开发者和SDK开发者均需要通过履行相应的合规义务,具体总结如下:

主体
合规义务
SDK
开发者
官网披露的86款SDK开发者(包括重新打包上述86款SDK的SDK) 提供SDK隐私清单和签名。 如果使用了5类特殊的API,需要单独声明使用理由。
App
开发者
/
向SDK开发者索要SDK隐私清单,并通过Xcode形成隐私报告。

最后,苹果官网文档中指出,新的隐私保护要求从2024年春季开始实施,但其实从2023年秋季开始,苹果就已经开始检查,并针对有问题的开发者进行邮件通知。因此,相关开发者现在需要进行内部梳理,落实苹果的隐私新规,避免影响产品上架使用。

本文作者:北京腾云天下科技有限公司 葛梦莹 南钰彤