Age Gate & Verifiable Parental Consent
本指南将引导您通过几个步骤实现Age Gate & VPC小部件,让您快速满足监管要求,同时为儿童及其父母提供流畅的用户体验。
端到端小部件是一个综合解决方案,在单个界面中处理完整的合规流程,涵盖年龄门控、VPC、数据通知、权限和偏好设置,全部在一个无缝体验中完成。这个小部件可以由父母在孩子的设备上或自己的设备上使用,为同意流程提供最大的灵活性。
什么是年龄门控?
年龄门控是一种机制,用于在允许访问年龄限制内容、功能或服务之前收集和验证用户的年龄。年龄门控是许多司法管辖区的要求,以确保遵守管理未成年人数字内容访问的法律。
年龄门控有几个重要目的:
- 监管合规:满足不同司法管辖区年龄验证的法律要求
- 内容保护:防止未成年人访问不当内容
- 数据隐私:根据COPPA、GDPR-K等法规适当处理儿童数据
- 家长控制:让家长能够就其子女的数字访问做出明智决定
通过提供用户的司法管辖区,端到端小部件会自动确定收集其年龄的最佳方法(如果尚未提供),并根据该司法管辖区的具体法规智能确定是否需要VPC。这确保了合规性,而无需您实现复杂的司法管辖区逻辑。
什么是可验证家长同意(VPC)?
可验证家长同意(VPC)是一项监管要求,确保家长或可信成年人能够为儿童访问数字内容、服务或功能提供知情同意。当儿 童尝试访问年龄限制内容时,系统会创建一个挑战,需要家长批准才能授予访问权限。
VPC流程通常包括:
- 年龄收集:通过适当方法确定儿童的年龄
- 挑战创建:当需要家长批准时创建同意挑战
- 家长通知:通过各种渠道(电子邮件、二维码等)通知家长
- 同意处理:家长审查并批准/拒绝请求
- 会话管理:根据同意结果创建或更新儿童的权限
先决条件
在开始之前,您需要:
- k-ID产品:在k-ID Compliance Studio中创建和配置您的产品
- API密钥:从产品的开发者设置页面生成您的API密钥
- Webhook端点(可选但推荐):设置安全的HTTPS端点以接收挑战和会话事件。更多详情请参见Webhooks。
步骤1:启动年龄门控和VPC流程
调用/widget/generate-e2e-url API来创建处理完整VPC流程的端到端小部件URL。这将返回一个唯一URL,用户将使用它来完成年龄收集和家长同意流程。
使用您的API密钥和我们的交互式Swagger文档快速生成您的年龄门控和VPC小部件URL。
重要:对于您的实现,这应该是服务器到服务器的调用,以保护您的API密钥不被暴露在客户端代码中。
请求示例
POST /api/v1/widget/generate-e2e-url
Content-Type: application/json
Authorization: Bearer your-api-key
{
"jurisdiction": "US-CA"
}
配置标志
可选的flags参数允许您自定义要跳过流程的哪些部分:
skipDataNotices:跳过数据通知和同意收集skipVerification:跳过年龄验证方法(如果年龄已经验证则有用)skipPermissions:跳过权限管理skipPreferences:跳过偏好设置
响应示例
{
"id": "7854909b-9124-4bed-9282-24b44c4a3c97",
"url": "https://family.k-id.com/widget?token=eyJhbGciOiJFUzM4NCIs..."
}
步骤2:显示年龄门控和VPC小部件
使用返回的URL在您的网站或应用中创建iframe。用户将通过此界面完成年龄收集和家长同意流程,可用方法会根据司法管辖区要求自动适应。

HTML实现
<div id="vpc-container">
<iframe
id="vpc-widget"
src="WIDGET_URL"
width="100%"
height="600"
frameborder="0"
allow="camera;payment;publickey-credentials-get;publickey-credentials-create">
</iframe>
</div>
iframe将向用户展示多种验证方法,例如:
- AgeKey:在初始验证过程后生成的可重用匿名年龄证明
- 面部年龄估计:使用设备摄像头进行隐私保护年龄估计
- ID文档验证:政府颁发的ID验证
可用的具体方法取决于司法 管辖区和您的产品配置。更多详情,请参阅验证方法
小部件将向用户展示:
- 年龄收集:适合司法管辖区的年龄收集方法
- 数据通知:根据产品配置需要接受的数据通知
- 权限:根据产品配置需要管理的权限
- 家长同意挑战:如果用户被确定为未成年人,将创建家长批准的挑战
具体流程取决于司法管辖区和您产品的配置。
步骤3:处理挑战和会话事件
当为家长同意创建挑战时,您需要处理结果。您可以通过三种方式接收挑战和会话结果:
选项A:实时JavaScript事件(客户端)
const handleMessage = (event) => {
const message = event.data;
if (message.eventType === "Widget.AgeGate.Challenge") {
if (message.data.status === "PASS") {
// 家长批准同意 - 授予访问权限
console.log("同意已批准:", message.data.sessionId);
grantAccess(message.data.sessionId);
} else if (message.data.status === "FAIL") {
// 家长拒绝同意 - 限制访问
console.log("同意被拒绝");
restrictAccess();
}
}
};
window.addEventListener("message", handleMessage);
选项B:Webhook通知(服务器端)
配置您的webhook端点以接收Challenge.StateChange和Session.ChangePermissions事件:
Challenge.StateChange事件:
{
"eventType": "Challenge.StateChange",
"data": {
"id": "683409f1-2930-4132-89ad-827462eed9af",
"productId": 42,
"status": "PASS",
"sessionId": "0ad1641f-c154-4cc2-8bb2-74dbd0de7723",
"approverEmail": "parent@example.com",
"kuid": "123456"
}
}
Session.ChangePermissions事件:
{
"eventType": "Session.ChangePermissions",
"data": {
"id": "78c299b2-5c33-4bde-84fe-8fc950fc7a96",
"productId": 42
}
}
选项C:轮询(替代方法)
使用挑战ID查询挑战状态:
GET /api/v1/challenge/get-status?id=683409f1-2930-4132-89ad-827462eed9af
Response:
{
"id": "683409f1-2930-4132-89ad-827462eed9af",
"status": "PASS",
"sessionId": "0ad1641f-c154-4cc2-8bb2-74dbd0de7723"
}
Webhook配置
对于年龄门控和VPC小部件,确保您的webhook端点配置为接收:
Challenge.StateChange:当家长同意被批准或拒绝时通知Session.ChangePermissions:当家长修改会话权限时通知
这些事件对于维护适当的访问控制并确保遵守家长同意要求至关重要。
下一步
现在您已经实现了年龄门控和VPC小部件,探索这些资源来增强您的集成:
- API参考文档:所有小部件和挑战API的详细文档
- Webhooks设置:为生产系统实现强大的webhook处理
- 最佳实践:实现最佳实践以确保安全性和可靠的用户体验
- 上线前检查清单:在上线前审查要求
使用k-ID的年龄门控和VPC小部件,您可以快速实现家长同意法规的合规性,同时为家庭提供流畅、注重隐私的体验。