KappS 知识库 · FAQ

Play Console 对第三方 SDK 的要求

FAQ · Technical Compliance

1. 责任条款一句话就说完了整套要求。Play 的 SDK 要求页写得很直白:「如果你在应用中引入了 SDK,你就有责任确保这些第三方代码及其做法符合 Google Play 开发者计划政策,并且不会导致你的应用违反政策。」Android 官方文档更进一步:「作为应用开发者,你要为 SDK 的数据采集行为负责,即使你并没有使用该 SDK 的某个具体功能。」「是 SDK 干的」从来不是抗辩理由;你从不调用的那个库,也一样被打进安装包。§https://support.google.com/googleplay/android-developer/answer/13326895

2. Google Play 真正了解你发了什么,靠的是依赖文件,不是你的隐私政策,也不是你的自我声明。「为了查明你的应用使用了哪些 SDK,我们使用应用内附带的依赖文件。依赖文件列出了应用所依赖的全部带版本号的库。使用 Android App Bundle 的应用默认提供依赖文件;2021 年 8 月之前创建、用 APK 发布的应用,从 Android Gradle Plugin 4.0 起也会包含依赖文件。」结论是:执法对象是 SDK 版本,所以「为了稳定我们锁死了这个版本」恰恰就是导致新版本被拒的状态。§https://support.google.com/googleplay/android-developer/answer/10358880

3. 三个严重级别对应三种结果,只有一种带倒计时。「如适用,应用所用 SDK 版本的问题会显示在 Play Console 的「发布」页(Production)顶部,或「发布概览」页(Release overview)。」(a)可能导致应用不合规的版本:「使用该 SDK 版本的新版应用可能被拒绝发布」——你会被要求确保用法符合用户数据政策、切换到 SDK 所有者推荐的版本,或移除该 SDK。(b)被 SDK 所有者标记为过时或有明显问题的版本:给出警告,强烈建议按所有者说明处理。(c)带严重问题的版本:「你仍然可以临时再发布一个应用版本。但你必须在发布该版本后的 90 天内升级到更新的 SDK 版本。90 天之后,你将无法再发布使用该严重问题版本的应用版本。」考勤从「那一次发布」起算,而不是从你看到横幅那天起算——所以在被标记的版本上「再发一个版本」这个动作,本身就给账号里所有共用该依赖的应用按下了停发计时器。§https://support.google.com/googleplay/android-developer/answer/10358880

4. Data safety 是 SDK 行为的申报面,而且会被审核。「所有开发者都必须申报其发布在 Google Play 上的应用如何收集和处理用户数据,并说明通过加密等安全做法保护这些数据的细节。这包括通过应用内任何第三方库或 SDK 收集和处理的数据。你可以参考 SDK 提供方公布的 Data safety 信息;先去 Google Play SDK Index 看看提供方是否给出了指引链接。」所以一个采集了你从未申报的标识符的 SDK,不是「SDK 的问题」,而是 Data safety 填写不实——那是另一条独立的违规,另有独立的处置。§https://support.google.com/googleplay/android-developer/answer/10787469

5. 儿童类应用是绝对条款,不是风险加权。「包含儿童为目标受众的应用,不得从儿童或年龄未知的用户处传输以下信息:Android 广告 ID(AAID)、SIM 序列号、Build 序列号、BSSID、MAC、SSID、IMEI、IMSI。」仅面向儿童的应用「绝不应传输这些标识符」;同时面向儿童与更大年龄组的应用「只能传输他们确知为成年人的用户」的这些标识符。Play 还明确:仅面向儿童的应用「只能使用已自我认证符合 Google Play Families 广告计划要求的 SDK 来展示广告,并且只应使用获批可用于儿童导向服务的 SDK」——而 Families 自我认证广告 SDK 计划页目前明示「暂不接受新的申请」,也就是说已公布的认证名单就是硬约束,换一家 mediation 伙伴并不能让你自己「补认证」。§https://support.google.com/googleplay/android-developer/answer/11043825 §https://support.google.com/googleplay/android-developer/answer/9900633

6. 同意必须真的传到 SDK,否则只是装饰。Play 要求开发者「只在第三方确实需要时,才共享通过你的应用采集的用户数据」,「了解应用中的 SDK 如何处理用户数据:用了哪些权限、采集了哪些数据、为什么采集」,并且「确保 SDK 提供方实现了读取并遵守应用开发者所采集用户偏好的逻辑,或者确保存在一种机制,让应用开发者能够依据这次面向用户的同意事件,准确地初始化集成在应用中的 SDK」。弹窗写了个标志位、却没有任何代码去读它,是这类审核里最常见的失分点——而它用一个 grep 查 SDK 的初始化调用,十分钟就能查清。§https://support.google.com/googleplay/android-developer/answer/13326895

7. 两个 Google 工具要用在接入之前,而不是出事之后。Google Play SDK Index「把 Google Play 应用的用量数据与代码检测得到的信息结合起来,提供一组属性和信号,帮助你判断是否应该引入、保留或移除某个 SDK」,其数据来自「安装量至少 1,000」并共享库依赖的应用;Google Play SDK Console 则给 SDK 提供方崩溃报告、用量统计,以及通过 Play Console 和 Android Studio 向开发者推送严重问题的通道。引入某个版本前两边都看一眼;遇到确实含糊的版本合规问题,Play 自己的建议是联系 SDK 所有者,而不是自己猜。§https://support.google.com/googleplay/android-developer/answer/12034434 §https://developer.android.com/distribute/sdk-index

8. 可审计的 SDK 清单长什么样。每个应用的每个依赖一行:Maven 坐标、实际解析出的精确版本、为什么会存在、采集了什么以及对应 Data safety 的哪个类目、触碰了哪些运行时权限与标识符、初始化在何处被同意逻辑卡住、SDK 所有者的联系渠道与公告源、上次复核合规的日期。再配三个习惯:在 CI 里每次升级都对解析后的依赖图做 diff(防止 SDK 以传递依赖的形式偷偷进来)、每次发版前先看「发布」页顶部与「发布概览」而不是等被拒后才看、把任何严重问题横幅当成日历事件并设在 Google 那 90 天之内很靠前的位置。这就是「一分钟内能答出这个库为什么在我们的构建里」和「几个月后要从发版记录里倒推」的差别。§https://developer.android.com/guide/practices/sdk-best-practices