使用 Play Age Signals API(Beta 版)

使用 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 管理中心 的 年龄信号页面上为应用提供这些最低年龄要求。

  1. 前往 Play 管理中心的“年龄信号”页面。
  2. 在自定义年龄范围 标签页中,为您的应用输入最多三个最低年龄要求。最低年龄之间必须至少相差 2 岁,且每年只能更改一次。
  3. 点击保存 。

返回的年龄范围将替换默认 API 响应。例如:

  • 如果您在 Google Play 管理中心内设置了一个最低年龄要求 (15):

    • 0-14 岁的用户将返回 ageLower = 0 和 ageUpper = 14。
    • 15 岁以上的用户将返回 ageLower = 15。
  • 如果您设置了两个最低年龄要求(13 岁和 17 岁):

    • 0-12 岁的用户将返回 ageLower = 0 和 ageUpper = 12。
    • 13-16 岁的用户将返回 ageLower = 13 和 ageUpper = 16。
    • 17 岁以上的用户将返回 ageLower = 17。
  • 如果您设置了三个最低年龄要求(11 岁、13 岁和 15 岁):

    • 0-10 岁的用户将返回 ageLower = 0 和 ageUpper = 10。
    • 11 岁或 12 岁的用户将返回 ageLower = 11 和 ageUpper = 12。
    • 13 岁或 14 岁的用户将返回 ageLower = 13 和 ageUpper = 14。
    • 15 岁以上的用户将返回 ageLower = 15。

年龄信号响应

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 商店应用版本可能过旧。

可能的解决方案
  • 让用户更新 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 报告)。 否