使用 Play Age Signals API(Beta 版)即表示您同意服务条款 并同意遵守所有Google Play 开发者政策。如需请求用户的状态和年龄段,您可以在运行时从应用调用该 API。仅当用户位于 Google Play 须依法律要求提供年龄类别数据的地区时,Play Age Signals API 才会返回其数据。
Google Play 会根据适用管辖区和地区定义的年龄段返回年龄范围。在适用 管辖区和地区,API 返回的默认年龄为 0-12 岁、13-15 岁、16-17 岁和 18 岁以上,但可能会收到自定义年龄 范围。Google Play 会在用户生日后的 2 到 8 周内自动更新用户的缓存年龄信号。
将 Play Age Signals API 集成到您的应用中
搭载 Android 6.0(API 级别 23)及更高版本的手机、可折叠设备和平板电脑支持 Play Age Signals API。如需将
Play Age Signals API 集成到您的应用中,请将以下依赖项添加到应用的 build.gradle 文件:
implementation 'com.google.android.play:age-signals:0.0.3'
请求年龄信号
以下示例展示了如何发出年龄信号请求:
Kotlin
// Create an instance of a manager val ageSignalsManager = AgeSignalsManagerFactory.create(ApplicationProvider.getApplicationContext()) // Request an age signals check ageSignalsManager .checkAgeSignals(AgeSignalsRequest.builder().build()) .addOnSuccessListener { ageSignalsResult -> // Store the install ID for later... val installId = ageSignalsResult.installId() if (ageSignalsResult.userStatus() == AgeSignalsVerificationStatus.SUPERVISED_APPROVAL_DENIED) { // Disallow access... } else { // Do something else if the user is VERIFIED, DECLARED, SUPERVISED, etc. } }
Java
// Create an instance of a manager AgeSignalsManager ageSignalsManager = AgeSignalsManagerFactory.create(ApplicationProvider.getApplicationContext()); // Request an age signals check ageSignalsManager .checkAgeSignals(AgeSignalsRequest.builder().build()) .addOnSuccessListener( ageSignalsResult -> { // Store the install ID for later... String installId = ageSignalsResult.installId(); if (ageSignalsResult .userStatus() .equals(AgeSignalsVerificationStatus.SUPERVISED_APPROVAL_DENIED)) { // Disallow access ... } else { // Do something else if the user is SUPERVISED, VERIFIED, etc. } });
(可选)接收自定义年龄范围
在适用管辖区和地区,API 返回的默认年龄范围为 0-12 岁、13-15 岁、16-17 岁和 18 岁以上。
或者,如需根据应用的最低年龄要求自定义默认年龄范围,您可以在 Google Play 管理中心 的 年龄信号页面上为应用提供这些最低年龄要求。
- 前往 Play 管理中心的“年龄信号”页面。
- 在自定义年龄范围 标签页中,为您的应用输入最多三个最低年龄要求。最低年龄之间必须至少相差 2 岁,且每年只能更改一次。
- 点击保存 。
返回的年龄范围将替换默认 API 响应。例如:
如果您在 Google Play 管理中心内设置了一个最低年龄要求 (15):
- 0-14 岁的用户将返回
ageLower = 0和ageUpper = 14。 - 15 岁以上的用户将返回
ageLower = 15。
- 0-14 岁的用户将返回
如果您设置了两个最低年龄要求(13 岁和 17 岁):
- 0-12 岁的用户将返回
ageLower = 0和ageUpper = 12。 - 13-16 岁的用户将返回
ageLower = 13和ageUpper = 16。 - 17 岁以上的用户将返回
ageLower = 17。
- 0-12 岁的用户将返回
如果您设置了三个最低年龄要求(11 岁、13 岁和 15 岁):
- 0-10 岁的用户将返回
ageLower = 0和ageUpper = 10。 - 11 岁或 12 岁的用户将返回
ageLower = 11和ageUpper = 12。 - 13 岁或 14 岁的用户将返回
ageLower = 13和ageUpper = 14。 - 15 岁以上的用户将返回
ageLower = 15。
- 0-10 岁的用户将返回
年龄信号响应
Play Age Signals API(Beta 版)响应包含以下字段和值。这些值可能会发生变化。如果您想要获取最新值,请在应用打开时请求 API 响应。您有责任使用这些信号提供适合相应年龄段的体验。
| 响应字段 | 值 | 说明 |
|---|---|---|
userStatus |
已验证 | Google 使用商业上合理的方法(例如政府签发的身份证件、信用卡或面部年龄估计)验证了用户的年龄。如果 userStatus 为 VERIFIED,您可以忽略其他字段。
使用 ageLower 和 ageUpper 确定用户的年龄段。 |
| 已声明 | 用户的年龄由用户本人、其家长或法定监护人声明。
使用 ageLower 和 ageUpper 确定用户的年龄段。 |
|
| 受监督 | 用户拥有一个由家长管理的受监督 Google 账号,其年龄由家长设置。
使用 ageLower 和 ageUpper 确定用户的年龄段。使用 mostRecentApprovalDate 确定上次获批的重大变更。 |
|
| 受监督_待批准 | 用户拥有一个受监督 Google 账号,其监督家长尚未批准一项或多项待批准的重大变更。
使用 ageLower 和 ageUpper 确定用户的年龄段。使用 mostRecentApprovalDate 确定上次获批的重大变更。 |
|
| 受监督_已拒绝批准 | 用户拥有一个受监督 Google 账号,其监督家长拒绝批准一项或多项重大变更。
使用 ageLower 和 ageUpper 确定用户的年龄段。使用 mostRecentApprovalDate 确定上次获批的重大变更。 |
|
| 未知 | 用户的年龄未知,且用户位于适用管辖区或地区。
仅适用于美国各州 :如需从 Google Play 获取年龄信号,请让用户访问 Play 商店以解决其状态问题。 |
|
null |
或者 用户不在适用管辖区和地区。
或者 用户不与应用分享其年龄。 |
|
ageLower |
0 到 18 | 受监督用户年龄段的下限(含)。 使用 ageLower 和 ageUpper 确定用户的年龄段。 |
null |
userStatus 为未知或 null。 |
|
ageUpper |
2 到 18 | 受监督用户年龄段的上限(含)。 使用 ageLower 和 ageUpper 确定用户的年龄段。 |
null |
或者 userStatus 为“受监督”,且用户的家长证明的年龄超过 18 岁。
或者 userStatus 为未知或 null。 |
|
mostRecentApprovalDate |
日期戳 | 上次获批的重大变更的 effective from 日期。安装应用时,系统会使用安装前上次重大变更的日期。 |
null |
或者 userStatus 为“受监督”,且未提交任何重大变更。
或者 userStatus 为“已验证”“未知”或 null。 |
|
installID |
由 Google Play 生成的字母数字 ID。 | Google Play 为受监督用户安装的应用分配的 ID,用于在应用批准被撤销时通知您。 请查看有关应用批准被撤销的文档。 |
null |
userStatus 为“已验证”“未知”或 null。 |
针对巴西用户的响应示例
在巴西,userStatus 只能为 DECLARED、
UNKNOWN 或 null。
对于声明了年龄并与应用分享年龄的用户,您将收到以下信息:
userStatus将为AgeSignalsVerificationStatus.DECLARED。ageLower将是一个数字(例如 13)。ageUpper将是一个数字或null(例如 15)。- 其他响应字段将为
null。
对于年龄未知的用户,您将收到以下信息:
userStatus将为AgeSignalsVerificationStatus.UNKNOWN。- 其他响应字段将为
null。
对于不与应用分享年龄的用户,您将收到以下信息:
userStatus将为null。- 其他响应字段将为
null。
用户的年龄
可供分享后,用户状态可能会更改为DECLARED。
针对美国各州用户的响应示例
在美国适用州,userStatus 可以为VERIFIED、
SUPERVISED、SUPERVISED_APPROVAL_PENDING、
SUPERVISED_APPROVAL_DENIED、UNKNOWN 或
null。
对于已验证的用户,您将收到以下信息:
userStatus将为AgeSignalsVerificationStatus.VERIFIED。ageLower将是一个数字(例如 18)。ageUpper将是一个数字或null(例如null)。- 其他响应字段将为
null。
对于受监督的用户,您将收到以下信息:
userStatus将为AgeSignalsVerificationStatus.SUPERVISED。ageLower将是一个数字(例如 13)。ageUpper将是一个数字或null(例如 15)。mostRecentApprovalDate将是一个 Java 日期对象(例如2026-01-01) 或null(如果未批准任何重大变更)。installID将是由 Google Play 生成的字母数字 ID(例如550e8400-e29b-41d4-a716-446655441111)。
对于有待批准的重大变更的受监督用户,您将收到以下信息:
userStatus将为AgeSignalsVerificationStatus.SUPERVISED_APPROVAL_PENDING。ageLower将是一个数字(例如 13)。ageUpper将是一个数字或null(例如 15)。mostRecentApprovalDate将是一个 Java 日期对象(例如2026-01-01) 或null(如果未批准任何重大变更)。installID将是由 Google Play 生成的字母数字 ID(例如550e8400-e29b-41d4-a716-446655441111)。
处理 API 错误代码
如果您的应用发出 Play Age Signals API 请求,但调用失败,您的应用会收到一个错误代码。这些错误可能是由多种原因造成的,例如 Play 商店应用已过时。
重试策略
当用户正在会话中时,我们建议实现一个重试策略,将尝试次数上限作为退出条件,以便尽可能避免错误干扰用户体验。
| 错误代码的数值 | 错误代码 | 说明 | 可重试 |
|---|---|---|---|
| -1 | API_NOT_AVAILABLE | Play Age Signals API 不可用。设备上安装的 Play 商店应用版本可能过旧。 可能的解决方案
|
是 |
| -2 | PLAY_STORE_NOT_FOUND | 在设备上未找到 Play 商店应用。 让用户安装或启用 Play 商店。 | 是 |
| -3 | NETWORK_ERROR | 未找到可用网络。 让用户检查网络连接。 | 是 |
| -4 | PLAY_SERVICES_NOT_FOUND | Play 服务不可用或版本太旧。 让用户安装、更新或启用 Play 服务。 | 是 |
| -5 | CANNOT_BIND_TO_SERVICE | 未能绑定到 Play 商店中的服务。这可能是因为设备上安装的 Play 商店版本太旧,或者设备内存过载。 让用户更新 Play 商店应用。使用指数退避算法重试。 | 是 |
| -6 | PLAY_STORE_VERSION_OUTDATED | Play 商店应用需要更新。 让用户更新 Play 商店应用。 | 是 |
| -7 | PLAY_SERVICES_VERSION_OUTDATED | Play 服务需要更新。 让用户更新 Play 服务。 | 是 |
| -8 | CLIENT_TRANSIENT_ERROR | 客户端设备出现暂时性错误。 实现一个重试策略,将尝试次数上限作为退出条件。如果问题仍然存在,请让用户稍后再试。 | 是 |
| -9 | APP_NOT_OWNED | 该应用并非由 Google Play 安装。 让用户从 Google Play 获取您的应用。 | 否 |
| -10 | SDK_VERSION_OUTDATED | Play Age Signals SDK 版本已不再受支持。 让用户将您的应用更新到使用最新版 Play Age Signals SDK 的更高版本。 | 否 |
| -100 | INTERNAL_ERROR | 未知内部错误。 实现一个重试策略,将尝试次数上限作为退出条件。如果问题仍然存在,请让用户稍后再试。 如果问题持续存在,请与 Google Play 开发者支持团队联系,并在主题中注明“Play Age Signals API”,并尽可能提供详细的技术信息(例如 bug 报告)。 | 否 |