本文档介绍了如何使用 Play 年龄信号 API 请求年龄信号。
Play 年龄信号 0.0.4 SDK 引入了双函数架构,旨在简化年龄信号请求并支持我们基于用户选择的模型。如需请求年龄信号,请使用以下大致工作流:
调用 requestAgeSignalsAccess(Activity) 方法,该方法会返回 ageSignalsStatus。ageSignalsStatus 的值可以是 SHARED、
NOT_SHARED 或 VERIFICATION_REQUIRED。
- 如果
ageSignalsStatus == NOT_SHARED:您的应用不会在 API 响应中获取年龄信号。 - 如果
ageSignalsStatus == SHARED:调用checkAgeSignals()方法。如果用户或家长已决定分享年龄信号,您会收到作为 API 响应一部分的年龄信号,并且可以决定如何处理响应。 - 如果
ageSignalsStatus == VERIFICATION_REQUIRED:用户的年龄未知,并且用户位于必须进行年龄验证和分享年龄信号的适用司法管辖区或地区。如需在这些地区从 Google Play 获取年龄信号,请让用户访问 Play 商店以解决其状态。
requestAgeSignalsAccess(Activity) 方法会返回不同的值,具体取决于某个地区是否必须分享年龄:
- 对于美国境内符合条件的用户,如果其所在州有法律要求应用商店向开发者提供经过验证的年龄信息,则系统不会触发应用内提示。
相反,系统会在用户访问 Play 商店应用时要求用户进行验证或设置监督。使用
ageSignalsStatus的值来确定验证状态:- 如果用户已完成年龄验证或家长监督功能处于启用状态,则
ageSignalsStatus的值为SHARED。 - 如果用户尚未验证自己的年龄或设置监督,则
ageSignalsStatus的值为VERIFICATION_REQUIRED。如需了解详情,请参阅 Google Play 将进行调整,以遵守即将在美国部分州生效的应用商店法案。
- 如果用户已完成年龄验证或家长监督功能处于启用状态,则
- 对于其他地区的用户,年龄分享取决于用户或家长的选择:
- 如果用户的设置是分享前询问,则系统会显示应用内提示
。如果用户同意分享自己的年龄,则
ageSignalsStatus的值为SHARED;否则,为NOT_SHARED。 - 如果用户的设置是始终分享,则系统不会显示应用内提示,并且
ageSignalsStatus的值为SHARED。 - 如果用户的设置是从不分享,则系统不会显示应用内提示
,并且
ageSignalsStatus的值为NOT_SHARED。 - 对于受监督的用户,家长可以在 Family Link 应用设置中选择是否分享孩子的年龄。如果家长选择分享
年龄,则
ageSignalsStatus的值为SHARED,否则 为NOT_SHARED。
- 如果用户的设置是分享前询问,则系统会显示应用内提示
。如果用户同意分享自己的年龄,则
如需了解 Google Play 上的年龄分享功能的工作原理,包括应用内提示 和年龄段共享设置,请参阅Google Play 上的“分享年龄段信息”功能。
以下示例展示了如何请求年龄信号:
Kotlin
// 1. Initialize the AgeSignalsManager (usually in onCreate or class initialization)
val ageSignalsManager = AgeSignalsManagerFactory.create(applicationContext)
// 2. Request or check for age signals access.
// Passing the current Activity allows the Play Store to render the age sharing prompt UI if required.
val accessRequest = AgeSignalsAccessRequest.builder()
.setActivity(this)
.build()
ageSignalsManager.requestAgeSignalsAccess(accessRequest)
.addOnSuccessListener { accessResult ->
if (accessResult.ageSignalsStatus() == AgeSignalsStatus.SHARED) {
// The user (or parent) has agreed to share age range, or is in an eligible auto-share region.
// Retrieve the actual age signals.
retrieveAgeSignals(ageSignalsManager)
} else {
// Age signals are not shared (user didn't share age range, parent rejected the request, or not eligible).
}
}
.addOnFailureListener { exception ->
// Handle API/Play Store connection and system errors
handleAgeSignalsError(exception)
}
private fun retrieveAgeSignals(manager: AgeSignalsManager) {
// 3. Perform the actual age signals query once sharing is active.
manager.checkAgeSignals(AgeSignalsRequest.builder().build())
.addOnSuccessListener { ageSignalsResult ->
val installId = ageSignalsResult.installId()
val ageLower = ageSignalsResult.ageLower()
val ageUpper = ageSignalsResult.ageUpper()
val significantChangeDate = ageSignalsResult.significantChangeApprovalDate()
val ageRangeSource = ageSignalsResult.ageRangeSource()
if (ageLower != null) {
if (ageUpper != null) {
// The user is in a specific closed age range [ageLower, ageUpper] (e.g. [13, 15])
} else {
// The user is in the highest open-ended age band [ageLower, null] (e.g. [18, null])
}
} else {
// Both bounds are null: The user is not sharing their age (e.g. they are a verified adult)
}
}
.addOnFailureListener { exception ->
handleAgeSignalsError(exception)
}
}
Java
// 1. Initialize the AgeSignalsManager (usually in onCreate or class initialization)
AgeSignalsManager ageSignalsManager = AgeSignalsManagerFactory.create(getApplicationContext());
// 2. Request or check for age signals access.
// Passing the current Activity allows the Play Store to render the age sharing prompt UI if required.
AgeSignalsAccessRequest accessRequest = AgeSignalsAccessRequest.builder()
.setActivity(this)
.build();
ageSignalsManager.requestAgeSignalsAccess(accessRequest)
.addOnSuccessListener(accessResult -> {
Integer status = accessResult.ageSignalsStatus();
if (status == AgeSignalsStatus.SHARED) {
// The user (or parent) has agreed to share age range, or is in an eligible auto-share region.
// Retrieve the actual age signals.
retrieveAgeSignals(ageSignalsManager);
} else {
// Age signals are not shared (user didn't share age range, parent rejected the request, or not eligible).
}
})
.addOnFailureListener(exception -> {
// Handle API/Play Store connection and system errors
});
private void retrieveAgeSignals(AgeSignalsManager manager) {
// 3. Perform the actual age signals query once sharing is active.
manager.checkAgeSignals(AgeSignalsRequest.builder().build())
.addOnSuccessListener(ageSignalsResult -> {
String installId = ageSignalsResult.installId();
Integer ageLower = ageSignalsResult.ageLower();
Integer ageUpper = ageSignalsResult.ageUpper();
Date significantChangeDate = ageSignalsResult.significantChangeApprovalDate();
@AgeRangeSource Integer ageRangeSource = ageSignalsResult.ageRangeSource();
if (ageLower != null) {
if (ageUpper != null) {
// The user is in a specific closed age range [ageLower, ageUpper] (e.g. [13, 15])
} else {
// The user is in the highest open-ended age band [ageLower, null] (e.g. [18, null])
}
} else {
// Both bounds are null: The user is not sharing their age (e.g. they are a verified adult)
}
})
.addOnFailureListener(exception -> {
handleAgeSignalsError(exception);
});
}
代码要点
requestAgeSignalsAccess(Activity)方法会对用户的当前年龄信号和年龄信号分享状态执行阻塞检查。- 在您调用
requestAgeSignalsAccess(Activity)后,Play 仅会针对不受监督的用户显示内置的应用内提示。受监督用户的家长可以通过管理 Family Link 应用中的年龄共享设置来选择是否分享孩子的年龄。 - 如果用户关闭或拒绝分享年龄,系统会显示应用内提示几次,然后才会禁止显示该提示。
checkAgeSignals()方法会在 API 响应中获取年龄信号值。此方法会返回ageRangeSource、ageUpper、ageLower和其他重大更改值。