防沉迷SDK-Unity(C#)

SDK合规指南

防沉迷SDK合规指南

1 文档修订记录

文档版本 文档更新日期 文档更新内容
3.3.34 2021.12.30 1.「客户端回调」新增"接收实名认证信息回调"
3.3.30 2021.11.18 1.从聚合SDK独立拆分;2.「接收实名认证信息」接口新增"scene"参数;3.「防沉迷弹窗」接口新增"scene"参数

2 接入准备

推荐C#4 以上版本,如果游戏是4及以下版本,可能会无法支持新特性

推荐Unity2018及以上版本

2.1 添加文件

  • 将文件FYBase.unitypackageFYAntiAddiction.unitypackage先后导入到您的Unity工程的Assets文件夹下
  • 导入方式:打开UNITY工程,菜单栏Assets=>Import Package=>Custom Package... ,之后选择文件导入工程

2.2 配置DLL文件平台属性

UNITY项目中,选择对应Dll文件,在Inspector面板=>Select platforms for plugin 勾选对应平台

如果已经配置,请忽略此步骤

  • Assets\Plugins\FYBase\FYBase.dll勾选"Any Platform",并勾选"iOS"和“Android”以排除这2平台
  • Assets\Plugins\FYBase\Android\FYBase.dll选择平台为"Android",注意"Any Platform"不要打钩
  • Assets\Plugins\FYBase\iOS\FYBase.dll选择平台为"iOS",注意"Any Platform"不要打钩
  • Assets\Plugins\FYAntiAddiction\FYAntiAddiction.dll选择平台为"Any Platform"

2.3 添加SDK配置

1.打开"星云平台->对接中心->SDK对接->SDK 列表->基础接入参数",找到 App ID、App Key、Company ID

UNITY配置界面

2.在UNITY打开星云配置界面

UNITY配置界面

3.将 App ID、App Key、Company ID 填入对应输入框,选择游戏屏幕朝向,点击确定,完成配置

UNITY配置界面

2.4 开启调试模式

1.将配置界面中的Debug勾选并点击确定,即可开启「调试模式」;取消勾选并点击确定,即关闭「调试模式」。

2.开启「调试模式」会显示客户端的悬浮球,点击进入调试工具可以查看接口/回调的调用信息,具体调试方法可查看文档

悬浮球

2.5 引入命名空间

游戏代码中引入以下命名空间,开始接入。

using FYAntiAddiction;

3 界面跳转标准规范

为了您能快速接入,并避免大多数对接问题,请按照标准规范来对接。

3.1 首屏-防沉迷

首屏-防沉迷

3.2 游戏中-防沉迷

游戏中-防沉迷

4 客户端接口与回调

接口接入的要诀?

  • 必接接口一定要接入,选接接口根据需要接入
  • 必传参数一定要传,能传的参数尽量都传

接口的回调何时注册?

  • 第一种方式:在初始化回调成功后注册其余的回调
  • 第二种方式:在每次调用对应接口前都预先注册对应的回调
  • 综合使用:先使用第一种方式,之后如需改变再重新注册

4.1客户端回调

1.防沉迷弹窗回调 FYANAntiAddictionCallback

  • 当调用「防沉迷弹窗接口」时,或在防沉迷弹窗点击确定时,将执行此回调

  • 当 isPass 为 true 时,可以正常进入游戏或继续进行游戏;当 isPass 为 false 时,需禁止进入游戏或者退回到登录首页

  • 使用方式:

FYAntiAddictionBridge.Instance.FYANAntiAddictionCallback = (isPass) =>
{

    if (isPass)
    {
        //不符合防沉迷条件
        //可以正常进入游戏
        //可以继续进行游戏
    }
    else
    {
       //符合防沉迷条件,需要限制
       //禁止进入游戏
       //退回到登录首页
    }
};

2.是否到防沉迷时间回调 FYANTimeOutCallback

  • 当防沉迷时间到时自动执行此回调,或者调用「防沉迷时间查询接口」时执行此回调
  • 收到此回调的「到达防沉迷时间」通知时,游戏应择机调用「防沉迷弹窗接口」,以及时弹出防沉迷
  • 使用方式:
FYAntiAddictionBridge.Instance.FYANTimeOutCallback = new FYANTimeOutCallback(
(timeOutInfo) => {
    //TODO: 到达防沉迷时间
    //timeOutInfo.totalTime;  // 总时间
    //timeOutInfo.remainTime;// 剩下时间

    //游戏必须在此择机弹出防沉迷
}, (timeNotUpInfo) => {
    //TODO: 未到达防沉迷时间
    //timeNotUpInfo.totalTime;  // 总时间
    //timeNotUpInfo.remainTime;// 剩下时间
});

3.限制支付回调 FYANLimitPayCallback

  • 当调用「限制支付接口」时将执行此回调
  • 当收到此回调的「可以继续支付」通知时,游戏可以继续拉起支付
  • 当收到此回调的「支付受限」通知时,游戏需终止支付
  • 使用方式:
FYAntiAddictionBridge.Instance.FYANLimitPayCallback = new FYANLimitPayCallback((limitPayInfo) => {
    //TODO: 可以继续支付回调
    //此用户没有被限制支付,游戏可以继续支付
    //limitPayInfo.playerId;// 角色ID
    //limitPayInfo.serverId;// 区服ID
    //limitPayInfo.openId; // 唯一用户ID
    //limitPayInfo.amount;  // 金额(分)
    //limitPayInfo.extra;  // 额外参数
}, (limitPayInfo) => {
    //TODO: 支付受限回调
    //此用户被限制支付,游戏需结束支付
    //limitPayInfo.playerId;// 角色ID
    //limitPayInfo.serverId;// 区服ID
    //limitPayInfo.openId; // 唯一用户ID
    //limitPayInfo.amount;  // 金额(分)
    //limitPayInfo.extra;  // 额外参数
});

4.接收实名认证信息回调 FYANRealNameCallback

  • 当调用 realName 并且系统确定设置实名认证信息完成后回调
FYAntiAddictionBridge.Instance.FYANRealNameCallback = new FYANRealNameCallback((info) =>
{
    // 表示设置实名认证信息已完成
    // 可以继续执行后续的防沉迷逻辑(防沉迷弹窗、充值限制等)
}, (info) =>
{
    // 设置实名认证信息失败
    // 失败信息
    string msg = info.message;
});

4.2 初始化接口 DoInit (必接)

1.方法

  • void DoInit()

2.说明

  • 游戏需要在刚启动游戏的时候调用

3.调用

FYAntiAddictionBridge.Instance.DoInit();

4.参数

5.回调

  • 暂无

4.3 接收实名认证信息接口 RealName (必接)

1.方法

  • void RealName(string unionId, string openId, string identityBirthday, string identityAge, string scene)

2.说明

  • 此接口用来接收实名认证信息,为后续防沉迷做准备,如果此接口没有完成调用,则后续的防沉迷行为不会生效
  • 若有接入聚合渠道SDK,必须在聚合渠道SDK的FYCombineLoginCallback回调和FYCombineRealNameCallback回调中调用,以及时将生日和年龄等实名信息传进来

3.调用

FYAntiAddictionBridge.Instance.RealName(unionId, openId, identityBirthday, identityAge, scene);

4.参数

参数名 说明 是否必传
unionId 渠道维度唯一用户ID
openId 游戏维度唯一用户ID
identityBirthday 出生日期,格式:xxxx-xx-xx
identityAge 年龄
scene 调用场景,"1":在登录回调中调用,"2":在实名认证回调中调用,"0":其他地方调用

5.回调

  • 接收实名认证信息回调 FYANRealNameCallback

4.4 防沉迷弹窗接口 AntiAddiction (必接)

1.方法

  • void AntiAddiction(string scene)

2.说明

  • 调用此接口,若用户已达到防沉迷条件,则会弹出防沉迷窗口
  • 必须在正式进入游戏时调用此接口,然后根据回调判断是否继续进入游戏
  • 必须FYANTimeOutCallback回调中择机调用此接口,以在游戏中及时弹出防沉迷弹窗

3.调用

FYAntiAddictionBridge.Instance.AntiAddiction(scene);

4.参数

参数名 说明 是否必传
scene 调用场景,"1":在进入游戏时调用,"2":防沉迷时间到达时调用,"0":其他地方调用

5.回调

  • 防沉迷弹窗回调 FYANAntiAddictionCallback

4.5 限制支付接口 LimitPay (必接)

1.方法

  • LimitPay(string playerId, string serverId, string openId, string amount, string extra="")

2.说明

  • 调用此接口,若用户已达到支付限制,则会弹出支付限制窗口
  • 必须在支付之前时调用,然后根据回调判断是否继续支付
  • 此接口传入的所有参数会原封不动的从回调FYANLimitPayCallback中传出

3.调用

FYAntiAddictionBridge.Instance.LimitPay(playerId, serverId, openId, amount, extra);

4.参数

参数名 说明 是否必传
playerId 角色ID
serverId 区服ID
openId 游戏维度唯一用户ID
amount 金额(分)
extra 额外参数

5.回调

  • 限制支付回调 FYANLimitPayCallback

4.6 防沉迷时间查询接口 IsTimeOut (选接)

1.方法

  • void IsTimeOut()

2.说明

  • 调用此接口可以获取是否到防沉迷时间,以及防沉迷剩余时间

3.调用

FYAntiAddictionBridge.Instance.IsTimeOut();

4.参数

5.回调

  • 是否到防沉迷时间回调 FYANTimeOutCallback

5 原生端对接

5.1 iOS

5.1.1 导出XCODE工程

  • 将UNITY项目导出为XCODE工程,然后就可以在Xcode开发工具上调试了

5.2 Andorid

5.2.1 导出Android工程

  • 方式一:使用UNITY打包Android APK调试
  • 方式二:将UNITY项目导出为Android Studio工程,然后就可以在Android Studio开发工具上调试了

6 F&Q

6.1 iOS打包报错:MapFileParser.sh:Permission denied

  • 打开终端,输入命令:chmod +x /Users/....../MapFileParser.sh (iOS工程目录下MapFileParser.sh的路径)

6.2 iOS打包报错:linker command failed with exit code 1

  • Xcode配置:PROJECT -> Build Settings -> Enable Bitcode -> NO,其余具体配置可参照聚合SDK-iOS文档的添加SDK配置部分