未成年人家长认证
LI PASS 提供一套标准化的合规解决方案,集成 LI PASS 后业务可直接配置合规服务,无需再接入本文中提到的接口。对于接入 LI PASS 的业务,可联系 Player Network 助手了解更多详情。
对于未使用标准 LI PASS 合规方案的业务,本文旨在介绍 Player Network 为合规服务提供的接口,以及如何使用这些接口。
前提条件
- 集成 SDK.
- 接入 Player Network 登录鉴权服务.
- 根据 未成年人地区配置 填写 未成年人服务后台配置,并提交给合规团队。
对于计划支持多语言的游戏,也会需要为各个语言提供独立的服务条款和隐私政策,并将其 URL 填写在提交的 未成年人服务后台配置 文件内。
要为各语言设置独立 URL,应该在协议条款 URL 的末尾添加 ?lang_type=
以及对应语言的 语言编码。
URL 示例:
英文服务条款:https://www.example.com/TermsofService.html?lang_type=en
简体中文隐私协议:https://www.example.com/PrivacyPolicy.html?lang_type=zh-Hans
为游戏应用配置年龄认证服务
处理回调
为年龄认证服务添加以下回调。
- Unity
- Unreal Engine
设置玩家配置信息
由于合规要求因地区而异,包括成年年龄和数据保护法等因素,开发者首先需要设置玩家的用户配置文件,用于确定每个玩家所需的具体合规流程。因此,开发者应提示玩家提交其地区信息。
业务可以调用 ComplianceInitWithParams
并将游戏 ID、OpenID、token、渠道 ID 作为入参参数,以设置玩家的用户配置文件。业务可根据之前提交的合规地区配置和用户配置文件中的玩家地区信息,检索玩家所在地区的成年年龄。结合玩家的实际年龄,业务可以确定玩家是否需要进行家长认证或者实名认证。
- Unity
- Unreal Engine
bool succ = INTLAPI.ComplianceInitWithParams(gameID, openID, token, channelID);
bool succ = UINTLSDKAPI::ComplianceInitWithParams(gameID, openID, token, channelID);
设置地区和玩家成年状态
玩家的成年状态根据其国家或地区的不同,使用不同的方法设置。
对于国家码为 840(美国)、826(英国)、170(哥伦比亚)和 356(印度)的国家或地区,开发者应提示玩家输入生日,然后调用 ComplianceMultiSetStatusWithBirthday
保存地区和年月日信息。玩家的成年状态将由其生日和所在地区的法定成年年龄决定。
- Unity
- Unreal Engine
string openID = "123456789";
string token = "qwewerasd123456789qwewer";
string region = "413",
string birthday = "1970-01-01",
int certificate_type = 1;
int channelID = 131
INTLAPI.ComplianceMultiSetStatusWithBirthday(openID,token,region,birthday,certificate_type,"{}", channelID);
FString openID = "123456789";
FString token = "qwewerasd123456789qwewer";
FString region = "413",
FString birthday = "1970-01-01",
int certificate_type = 1;
int channelID = 131
UINTLSDKAPI::ComplianceMultiSetStatusWithBirthday(openID,token,region,birthday,certificate_type,"{}", channelID);
对于国家码为 410(韩国)的移动端,需要依照玩家年龄段进行认证,先调用 ComplianceMultiSetStatusWithAge
为该玩家保存地区,并按照14岁以下,14-18岁,18岁以上的年龄段,分别传递对应13,16,20岁的具体年龄。玩家的成年状态将由其具体年龄和所在地区的法定成年年龄决定。
- Unity
- Unreal Engine
string openID = "123456789";
string token = "qwewerasd123456789qwewer";
string region = "410",
int age = 18,
int certificate_type = 1;
int channelID = 131
ComplianceApiCall.Instance.ComplianceMultiSetStatusWithAge(openID,token,region,age,certificate_type,"{}", channelID);
FString openID = "123456789";
FString token = "qwewerasd123456789qwewer";
FString region = "410",
int age = 18,
int certificate_type = 1;
int channelID = 131
UINTLSDKAPI::ComplianceMultiSetStatusWithAge(openID,token,region,age,certificate_type,"{}", channelID);
对于国家码为 410(韩国)的 PC 端,依据韩国合规要求,需要进行实名认证,先调用 ComplianceMultiSetStatusWithAdultCheckStatus
直接根据玩家保存地区,成年状态需传递默认值未知状态。通过 实名认证 获取玩家实际年龄,玩家的成年状态将由其实际年龄和所在地区的法定成年年龄决定。
- Unity
- Unreal Engine
string openID = "123456789";
string token = "qwewerasd123456789qwewer";
string region = "410",
int adult_check_status = 0,
int compare_age = 18,
int certificate_type = 1;
int channelID = 131
INTLAPI.ComplianceMultiSetStatusWithAdultCheckStatus(openID,token,region,adult_check_status,compare_age,certificate_type,"{}", channelID);
FString token = "qwewerasd123456789qwewer";
FString region = "410",
int adult_check_status = 0,
int compare_age = 18,
int certificate_type = 1;
int channelID = 131
UINTLSDKAPI::ComplianceMultiSetStatusWithAdultCheckStatus(openID,token,region,adult_check_status,compare_age,certificate_type,"{}", channelID);
对于其他国家或地区,业务可以选择提示玩家自我确认他们是否成年,然后调用 ComplianceMultiSetStatusWithAdultCheckStatus
直接根据玩家选择设置他们的成年状态。
- Unity
- Unreal Engine
string openID = "123456789";
string token = "qwewerasd123456789qwewer";
string region = "410",
int adult_check_status = 1,
int compare_age = 18,
int certificate_type = 1;
int channelID = 131
INTLAPI.ComplianceMultiSetStatusWithAdultCheckStatus(openID,token,region,adult_check_status,compare_age,certificate_type,"{}", channelID);
FString token = "qwewerasd123456789qwewer";
FString region = "410",
int adult_check_status = 1,
int compare_age = 18,
int certificate_type = 1;
int channelID = 131
UINTLSDKAPI::ComplianceMultiSetStatusWithAdultCheckStatus(openID,token,region,adult_check_status,compare_age,certificate_type,"{}", channelID);
查询玩家配置信息
玩家所需的合规流程因地区而异。业务应调用 ComplianceQueryUserInfo
返回 ComplianceResult
数据结构,用于确认玩家适用的合规流程。
例如,每个国家都有自己的法定成年年龄,游戏也有评级对应的适龄年龄下限。业务可以调用 ComplianceQueryUserInfo
返回登录玩家的 ComplianceResult
。此信息可用于检索玩家所在国家地区是否有对于游戏的年龄限制。如果国家地区没有任何年龄限制,玩家可以直接进入游戏。否则,根据国家地区的成年年龄继续验证玩家是否已成年。如果玩家小于游戏分级年龄,立即退出游戏。如果玩家已成年,则直接进入游戏。如果玩家未成年但大于游戏分级年龄,需完成对应国家地区的 家长认证 后方可进入游戏。
家长认证
对于未成年玩家,Player Network 为家长提供3种不同的方式来确认其身份并授予家长同意。认证方式可以通过 Unity SDK 或 Unreal Engine SDK 中 AuthResult
接口的 certificate_type
来判定使用哪种认证方式。
自我认证
对于选择自我认证的未成年玩家,业务应弹窗确定家长已同意未成年人参与游戏。
如果家长同意,调用 ComplianceSetParentCertificateStatus
将家长认证状态设为已收到。家长同意后,玩家的状态将被更新,游戏可调用 ComplianceQueryUserInfo
接口查询最新的玩家状态,判断是否可以进入游戏。
如果家长拒绝同意,则退出游戏。
邮箱认证
对于选择用邮箱认证获取家长认证的未成年玩家,业务应提示玩家输入家长的名称和邮箱地址,然后调用 ComplianceSendEmail
接口发送家长认证邮件,让家长验证身份并同意玩家进入游戏。
如果家长同意,LI PASS 将更新玩家的状态,游戏可调用 ComplianceQueryUserInfo
接口查询最新的玩家状态,并确定是否启动新的合规流程。
如果家长拒绝同意,LI PASS 会调用 EnterGameFailed
在 INTLAuthResult
中设置 retCode == INTLErrorCode.CANCEL
来通知游戏认证失败,玩家登录时会收到被拒通知以及需等待时间。建议业务通过判断游戏平台来进行后续操作:
- 移动端、PC 端(独立 launcher):重新开启登录界面。
- PC 端(Steam/Epic)、主机端:退出游戏。
有关 INTLErrorCode.CANCEL
等错误码的更多信息,请参考 INTLErrorCode.cs
文件。
信用卡认证
对于选择信用卡认证的未成年玩家,业务需调用 ComplianceVerifyCreditCard
打开信用卡认证网页并继续认证。
如果认证成功,则将家长认证状态设置为已收到,然后直接进入游戏。
如果认证失败,则退出游戏。
同步 LI PASS 合规状态
建议业务采用标准的 LI PASS 合规流程。如果业务坚持开发自己的合规流程,但没有采用下文提到的步骤,可能会出现问题。具体来说,当玩家在没有完成 LI PASS 合规流程的情况下尝试将自己的账号绑定到 LI PASS 时,他们的 LI PASS 合规状态可能会覆盖游戏的合规状态,因此导致 LI PASS 合规状态与游戏合规状态发生冲突,需要业务手动解决。
值得注意的是,LI PASS 合规参数和游戏的合规参数可能会有很大差异。INTLAuthResult
或 FINTLAuthResult
包含所有鉴权参数,包括与合规状态相关的参数。如需了解更多信息,请联系 Player Network 业务接口人。
若业务完全自定义合规流程而不使用任何 SDK 接口,但仍允许玩家绑定 LI PASS,则必须在自定义合规流程中整合以下步骤。以下步骤以家长认证为例,其他合规流程可添加类似的逻辑。
玩家登录后,检查其账号是否绑定 LI PASS,以及是否完成了 LI PASS 未成年人家长认证流程。也就是 has_bind_li
为 true,同时玩家被识别为成人,或玩家被识别为未成年但完成了家长认证流程,即 parent_certificate_status
为 1。这些属性可以在 AuthResult
的 extra_json
中的 need_notify_rsp
和 get_status_rsp
中找到。
如果 has_bind_li
为 false,玩家可直接进入游戏自定义的合规流程。但是,如果 has_bind_li
为 true,表明该账号已绑定 LI PASS,则必须检查 LI PASS 成年状态。对于状态为 "未成年" "的玩家,必须检查其家长认证状态。
- 如果
parent_certificate_status
为-1,则家长拒绝认证,玩家无法绑定 LI PASS,并将继续使用当前的第三方或游客账号进行游戏。 - 如果
parent_certificate_status
为1,则家长认证成功并且玩家账号成功绑定 LI PASS。 - 如果
parent_certificate_status
为 0 或 10,则表示玩家尚未启动家长认证程序或启动后尚未完成该程序。因此,游戏需要启动或继续家长认证程序。首先,调用GetLIUidAndTokenForAdultCert
为当前登录渠道设置 LI PASS UID 和令牌,接着调用ComplianceInitWithParams
以保存玩家的游戏 ID、OpenID、token、渠道 ID。ComplianceInitWithParams
接口中的channelID
参数需要根据不同情况设置为三方渠道 ID 或者 131(LI PASS 渠道 ID)。家长认证之前,游戏需根据玩家的所在地区调用ComplianceMultiSetStatusWithBirthday
、ComplianceMultiSetStatusWithAdultCheckStatus
或ComplianceMultiSetStatusWithBirthday
来保存玩家的地区,生日或未成年状态。保存好以上信息后,游戏即可在收到回调后进行对应地区的 家长认证。
为网页配置年龄认证服务
步骤1:引⼊ SDK
项目联调阶段可以引⼊ SDK 联调版本包,该包仅用于集成测试。项目上线须引⼊ SDK 正式版本包。
目前已支持 npm
包方式和 CDN
方式。
- npm
- CDN
$ npm install @intlsdk/compliance-api
// SDK 联调版本包
<script src="https://test-common-web.intlgame.com/sdk-cdn/compliance-api/index.umd.js"></script>
// SDK 正式版本包
<script src="https://common-web.intlgame.com/sdk-cdn/compliance-api/index.umd.js"></script>
步骤2:使用 SDK
在集成测试时,将 env
设置为测试环境 https://test.intlgame.com
;在启动游戏时,将 env
设置为相应的正式环境。
const complianceApi = new IntlgameComplianceApi({
env: "test",
});
参数 | 类型 | 说明 | 备注 |
---|---|---|---|
env | string | SDK 环境 更多信息,请参见 获取部署集群信息。 | 必填 |
步骤3:实现年龄认证功能
设置玩家登录态
由于成年年龄因地区而异,业务需要首先提示玩家输入其地区信息,然后调用 setUserProfile
接口设置这些信息。
保存玩家状态
如需验证玩家的成年状态,业务应提示玩家输入生日,然后调用 commitBirthday
接口保存该信息。保存的信息将用于计算玩家的实际年龄,并与玩家所在地区的成年年龄进行比较,以确定玩家是否被视为成年人。
查询玩家状态
每个国家都有自己的法定成年年龄,每个游戏都有与其评级相对应的最低年龄限制。调用 queryUserStatus
并使用返回的信息验证玩家所在国家/地区是否有玩游戏的年龄限制。如果国家/地区没有任何年龄限制,玩家就可以直接进入游戏。否则,游戏需要根据玩家所在国家/地区的法定成年年龄来验证玩家是成年人还是未成年人。如果玩家达到或超过法定成年年龄,则可以进入游戏。如果玩家小于法定年龄,游戏则需要验证家长是否同意,以确定玩家是否可以进入游戏。