跳到主要内容

XDSDK 接入 TDS 实名认证防沉迷最佳实践

· 阅读需 7 分钟

准备工作

开发者只需要知道游戏在 TapDC 后台的 Client ID 参数用于防沉迷 SDK 的初始化。没错,准备工作就这一点。

游戏实名认证

请参考最佳实践

调用 SDK 提供的功能性接口

  • TapTap 快速认证

TapTap 快速认证服务顾名思义,是指让玩家直接授权其 TapTap 账号的实名信息完成实名认证,省去填写姓名、身份证号的繁琐步骤。

具体的代码示范如下:

// 参数:userIdentifier 玩家唯一标识,请填写用户的 XDID(即 XDGUser 中的 userId)
string userIdentifier = "玩家的唯一标识";
// 参数:isTapUser 对于是否是 Tap 用户,游戏可根据当前玩家选择的登录方式进行设置,即选择 Tap 登录方式的设置为 true, 其他类型设置为 false。
// 对于国服游戏一般只有 Tap 登录渠道的 isTapUser 参数设置 true 即可,具体情况请依旧游戏侧自己的需求来定,不是一成不变的。这个参数会影响实名认证弹窗的样式,具体样式区别接下来做详细展示说明。
bool isTapUser = true;
AntiAddictionUIKit.Startup(userIdentifier, isTapUser);
  • 正确调用 startup 接口移动端打包后可以看到如下的弹窗,以游戏铃兰之剑作为示例展示。(参数:isTapUser 设置为 true 的状态):

由上图可见,实名认证弹窗只提供一个「使用」按钮,玩家点击「使用」按钮后会触发 TapTap 快速认证的授权页面。

  • startup 接口参数:isTapUser 设置为 false 的状态:

由上图可见,实名认证弹窗会提供「使用」和「不实用」按钮,玩家点击「使用」按钮后会触发 TapTap 快速认证的授权页面;当玩家点击「不使用」按钮时,会触发需要玩家手动输入身份证信息的界面。如下图所示。

玩家输入姓名、身份证号后如果认证失败,会提示「认证未通过,请提交真实信息」,如果乱填写身份证号,则会提示「身份证号码非法」。这些也不需要开发者关心,认证失败时,「游戏实名认证」窗口是不会关闭的,除非玩家点击右上角的关闭按钮主动关闭。这些都是 SDK 内部封装好的,开发者重点需要关心的是文档中给出的回调类型,这个很重要。比如实名认证过程中,玩家点击了右上角的关闭按钮,则会触发 code 为 9002 的回调,该回调告知开发者玩家的动作,表示玩家并没有完成实名认证,开发者对此应该做相应的逻辑处理。

无版号游戏没有开通实名认证防沉迷服务是无法使用 TDS 的实名认证防沉迷功能的。没有开通服务的游戏接入实名认证防沉迷,当调用实名认证接口时会给出相对应的提示:「未查询到实名认证配置」

因此,至于 startup 接口参数 isTapUser 该如何赋值,具体参考游戏需求,如果游戏只有 TapTap 登录渠道,没有其他的登录渠道,则 isTapUser 可以设置为 true;如果游戏具有多个登录渠道,建议游戏根据登录类型来决定设置 isTapUser 的值。

防沉迷策略

仅允许未成年人在周五、周六、周日和法定节假日的 20:00 至 21:00 进行游戏。非允许游戏时间段内,SDK 封装的相应逻辑会被触发,弹出提示框提醒未成年无法继续游戏。此时的未成年玩家最多有两种选择:「退出游戏」或者「切换账号」。

如果初始化 SDK 时设置的一个参数 showSwitchAccount 为 false(表示不显示「切换账号」按钮),那此时的未成年玩家只能选择「退出游戏」了。

// 是否显示切换账号按钮
bool showSwitchAccount = false;

检查消费上限

根据年龄段的不同,未成年玩家的消费金额有不同的上限。 如果要启用消费限制功能,开发者只需要在未成年玩家消费前检查是否受限。如果游戏没有消费则可以忽略这部分说明。

游戏在收到玩家的付费请求后,调用以下接口检验当前玩家的付费行为是否被限制,游戏侧请 务必 在未成年玩家每次充值之前调用如下接口进行判断。

long amount = 100;    // 100 表示 100 分,即 1 元
AntiAddictionUIKit.CheckPayLimit(amount,
(result) => {
// status 为 1 时可以支付
int status = result.status;
if (status == 1) {
// 可以进行支付
} else {
// 说明玩家当前的这一笔消费不可以再继续了,如果继续就超过了限制,游戏侧则要拦截这笔消费。
}
},
(exception) => {
// 处理异常
}
);

消费金额的单位为分。

警告

当玩家支付成功后并且支付渠道给到支付回调后,XD Server 会 Server to Server 上报玩家当前支付金额给 TDS 防沉迷,游戏侧不需要再额外的去上报玩家消费金额。游戏侧需要做的就是客户端自行校验玩家消费是否达到上限即可。

至此,你基本上已经很好的完成了 TDS 实名认证防沉迷 SDK 的接入了,请给你自己一点掌声。

讲真,个人觉得 TDS 实名认证防沉迷 SDK 并不需要心动一方游戏服务端的过多参与,不知道屏幕前的你在完全了解后是否也有相同的感受。SDK 剩余的其他接口开发者请酌情按需调用即可。

获取玩家年龄段

实名认证后,可以统一调用如下接口获取当前玩家的年龄段:

int ageRange = AntiAddictionUIKit.AgeRange;
// ageRange 是一个整数,表示玩家所处年龄段的下限(最低年龄)。 特别地,-1 表示「未实名」。

具体年龄段返回数值及其对应年龄段如下表所示:

类型数值含义
-1未实名
00 到 7 岁
88 到 15 岁
1616 到 17 岁
18成年玩家

上报游戏时长

如果启用时长限制功能,需要上报游戏时长。已登录的玩家,开始游戏时调用此接口,之后 SDK 会自动轮询上报游戏时长。

AntiAddictionUIKit.EnterGame();

相应地,已登录的玩家,停止游戏时调用此接口,之后 SDK 停止轮询上报时长。

AntiAddictionUIKit.LeaveGame();

获取剩余时长

获取玩家当前剩余时长:

int remainingTimeInSeconds = AntiAddictionUIKit.RemainingTime;  // 单位:秒

int remainingTimeInMinutes = AntiAddictionUIKit.RemainingTimeInMinutes; // 单位:分钟

Checklist

游戏侧接入 TDS 实名认证防沉迷功能,开发者需要测试实名认证防沉迷流程是否正常,检查并知晓以下事项:

  • 游戏侧正确导入 TDS 实名认证防沉迷所需的包体。

  • SDK 的正确初始化,gameId 参数为 Tap Client ID,游戏侧根据需求决定是否显示「切换账号」按钮,若显示「切换账号」按钮请务必处理好这块的逻辑。

  • 充分了解实名认证防沉迷的各个回调方法所对应的含义,游戏侧对此做出相应的逻辑处理。

  • 充分了解实名认证 AntiAddictionUIKit.Startup(userIdentifier, isTapUser) 接口的两个参数含义。

  • SDK 的初始化 AntiAddictionUIKit.Init 和实名认证接口 AntiAddictionUIKit.Startup 保留毫秒级的间隔,以确保 SDK 完成初始化。

  • 游戏在收到未成年玩家付费请求后请 务必 先检查当前这笔消费是否已达上限,达到上限则拦截当前这笔消费。

  • 游戏前端请 务必 不要额外上报玩家消费的,XDSDK 服务端会自行上报。