年龄信号
年龄信号是关于用户年龄的信息,可用于确定他们应该拥有哪些权限和功能。开发者根据他们收集的内容向 k-ID 提供年龄信号,k-ID 的接口(VPC 或年龄验证)验证并处理这些年龄信号以确保合规性。
什么是年龄信号?
年龄信号可以来自开发者可能访问的各种来源:
- 出生日期:用户的出生日期,可以以
YYYY、YYYY-MM或YYYY-MM-DD等格式提供 - 自我声明的年龄:用户直接提供的年龄信息(例如,通过年龄门控)
- 年龄估计:来自面部年龄估计技术的估计年龄
- 平台年龄信号:游戏启动时游戏平台(Apple iOS、Google Play、Meta Horizon、Xbox)提供的年龄信息
- 已验证年龄:通过 ID 文档验证或其他可信方法验证的年龄
k-ID 如何处理年龄信号
k-ID 提供用于收集和验证年龄信号的接口:
- 开发者提供年龄信号:如果开发者从任何来源(平台、现有账户)收集了年龄信息,他们可以将其提供给 k-ID
- CDK 提供收集接口:如果开发者使用 CDK,k-ID 提供接口来收集 VPC 的年龄信号
- VPC 和年龄验证验证年龄信号:这些接口验证和处理开发者提供的年龄信号
使用平台年龄信号
许多游戏平台在游戏启动时向游戏发送年龄信号。这些信号提供已由平台验证的用户年龄信息。k-ID 支持来自 Apple iOS、Google Play、Meta Horizon 和 Xbox 的平台年龄信号。
平台年龄信号的工作原理
平台年龄信号通过 /age-gate/check 端点的 platformAgeSignal 字段传递给 k-ID。根据平台不同,您可以使用以下两种格式之一提供信号:
- 年龄范围(
ageLow和ageHigh):平台报告的数值年龄范围。用于 Apple iOS 和 Google Play。 - 类别(
category):平台特定的年龄类别字符串。用于 Meta Horizon 和 Xbox。
所有平台年龄信号都需要一个 name 字段来标识平台(apple-ios、google-play、meta-horizon 或 xbox)。这两种格式是互斥的——在同一请求中同时提供 category 和 ageLow/ageHigh 将返回错误。
Apple iOS 和 Google Play:年龄范围信号
Apple iOS 和 Google Play 提供包含最小和最大年龄的年龄范围信号。使用这些平台时,直接传递 ageLow 和 ageHigh。两个字段必须同时提供,且值必须满足 0 ≤ ageLow ≤ ageHigh ≤ 100:
{
"jurisdiction": "US",
"platformAgeSignal": {
"name": "apple-ios",
"ageLow": 16,
"ageHigh": 18,
"declarationType": "guardianPaymentChecked"
}
}
可选的 declarationType 字段提供关于平台如何验证用户年龄的补充信息:
- Apple iOS:来自 Apple 的 AgeRangeDeclaration 的值,例如
guardianPaymentChecked或governmentIDChecked - Google Play:来自 Google Play 的年龄信号 API 的值,例如
VERIFIED或SUPERVISED
Meta Horizon 和 Xbox:类别信号
Meta Horizon 和 Xbox 提供年龄类别而非特定年龄范围。对于这些平台,传递一个 category 字符串:
{
"jurisdiction": "GB",
"platformAgeSignal": {
"name": "meta-horizon",
"category": "CH"
}
}
例如,Meta Horizon 提供了一个 GetAgeCategory API,它返回类别 CH(儿童,10-12 岁)、TN(青少年,13-17 岁)或 AD(成人,18 岁以上)。
您还可以使用 /age-gate/get-platform-age-range 端点将平台的年龄类别转换为特定司法管辖区的年龄范围(ageLow 和 ageHigh),然后再调用 /age-gate/check。
Meta Horizon 可能会为没有可用年龄数据的账户返回 UNKNOWN。在这种情况下,k-ID 无法解析年龄范围——请回退到直接从玩家收集年龄。
处理年龄冲突
当游戏同时提供主要年龄信号(如出生日期或自我声明的年龄)和平台年龄信号时,k-ID 可以检测两者之间的冲突。当您的产品启用了年龄冲突检测时,如果平台将用户归入比其声称年龄更年轻的年龄类别,/age-gate/check 端点将返回 400 AGE_CONFLICT 错误。
例如,如果玩家提供的出生日期表明他们 18 岁,但平台报告的年龄范围为 0-12(将其归入数字未成年人类别),k-ID 会检测到冲突并返回错误,以便游戏可以处理该差异。
在确定玩家应拥有哪些权限时,k-ID 始终使用玩家声称年龄与平台信号的 ageLow 之间更保守(更年轻)的年龄。即使平台信号不被视为年龄验证目的的可信信号,此规则也适用——不可信的信号仍然可以限制权限,但不能授予权限。
使用平台信号约束年龄门控
为了从一开始就防止年龄冲突,游戏可以使用平台年龄信号来限制玩家在年龄门控中可以给出的可能年龄。为此,有两个重要字段,digitalConsentAge 和 civilAge,它们从 /age-gate/get-requirements API 返回。
使用这些字段,您可以将年龄门控约束为:
- 数字未成年人:只允许数字未成年人的年龄达到数字同意年龄(
digitalConsentAge) - 数字青年(青少年):只允许数字同意年龄(
digitalConsentAge)和民事年龄(civilAge)之间的年龄值 - 合法成年人:允许民事年龄(
civilAge)或更大的年龄
这种方法确保玩家不能声称与平台已验证年龄信号冲突的年龄,减少差异并确保合规性。
可信平台信号和年龄验证阈值
某些权限需要来自可信平台信号的已验证年龄才能启用。这由权限上的 verifiedAgeThreshold 字段控制,该字段指定所需的最低已验证年龄。
例如,在巴西,开箱(loot box)权限要求来自可信来源的已验证年龄为 18 岁或以上。具有 verifiedAgeThreshold 的权限始终为 managedBy: "PLAYER"——它们不能由监护人切换。只有来自可信来源的年龄验证才能解锁它们。
当权限具有 verifiedAgeThreshold 时:
- 如果玩家的有效年龄(其声称年龄与平台的
ageLow中较低的值)低于阈值,则该权限被设置为PROHIBITED,无法通过任何流程启用——不会发起质询 - 如果玩家的有效年龄达到或超过阈值且提供了可信平台信号,则该权限被启用
- 如果玩家的有效年龄达到或超过阈值但没有可信平台信号,则会通过年龄保证质询提示玩家进行年龄验证
哪些平台信号是可信的?
并非所有平台信号具有相同的信任级别。目前,以下被视为可信:
- Apple iOS,声明类型为:
paymentChecked、governmentIDChecked、guardianPaymentChecked或guardianGovernmentIDChecked - Google Play,声明类型为:
VERIFIED或SUPERVISED
来自 Meta Horizon 和 Xbox 的信号目前不被视为年龄验证阈值目的的可信信号。
使用平台年龄信号升级会话
当玩家想要启用具有 verifiedAgeThreshold 的权限时,/session/upgrade API 接受 platformAgeSignal 以及请求的权限。结果取决于信号:
- 可信信号达到阈值:权限立即启用(状态
PASS),不创建质询 - 没有可信信号,但玩家年龄达到阈值:创建年龄保证质询,以便玩家验证其年龄
- 玩家的有效年龄低于阈值:权限保持
PROHIBITED,不发起质询——按原样返回会话
先前验证的年龄
有时游戏开发者在玩家开始新游戏时已经知道玩家的年龄。这通常是因为玩家使用游戏开发者已知的身份登录游戏。在这种情况下,游戏可以避免显示年龄门控,而是调用 /age-gate/check,传入位置和先前验证的出生日期。
年龄信号收集方法
可用于收集年龄信号的方法因司法管辖区而异。/age-gate/get-requirements API 返回一个 approvedAgeCollectionMethods 数组,指定当前司法管辖区允许哪些方法:
date-of-birth:完整出生日期 (YYYY-MM-DD)age-slider:年龄范围或近似年龄选择platform-account:使用现有平台账户年龄验证
显示年龄门控时,最佳实践是显示"中性年龄门控",即没有预设年龄的门控,用户必须采取行动来设置年龄。此外,如果年龄门控使用滑块作为年龄值,ESRB 建议滑块年龄门控中的最大年龄应为 35。
使用年龄状态
虽然 k-ID 提供了大量与特定功能相关的权限设置,但某些游戏可能需要创建更独特的玩家体验,独立于任何单一功能。例如,如果玩家不是合法成年人,游戏可能根本不显示任何游戏内广告。在这种情况下,游戏可以检查 Session 中的 ageStatus 字段。此字段可以是 DIGITAL_MINOR(低于数字同意年龄)、DIGITAL_YOUTH(低于民事年龄,但大于数字同意年龄)或 LEGAL_ADULT(民事年龄)。