防沉迷SDK-iOS(OC)

SDK合规指南

防沉迷SDK合规指南

1 文档修订记录

文档版本 文档更新日期 文档更新内容
3.3.56 2023.05.10 1.新增SDK合规指南;2.可选个人信息的配置。
3.3.34 2021.12.30 1.「客户端回调」新增"接收实名认证信息回调"
3.3.30 2021.11.18 1.文档从聚合SDK独立拆分出来;2.「接收实名认证信息」接口新增"scene"参数;3.「防沉迷弹窗」接口新增"scene"参数

2 接入准备

2.1 添加文件

将下载好的 FYBase、FYAntiAddiction 目录,拷贝到游戏工程目录中并引入

2.2 添加SDK配置

到星云平台的"对接中心->SDK对接->SDK列表->基础接入参数->SDK配置参数"下载如下的配置文件,拷贝到游戏工程目录中并引入:

配置参数

  • iOS SDK配置文件:FYCoreConfig.plist

说明: 「引入」是指在 Xcode 界面右键点击工程列表,选择Add File to 'xxx',然后在弹出框选择你要添加的文件或文件夹,将其添加到 Xcode 工程内。 以上的文件和文件夹都需要引入到工程,并且保持在工程中只有一份,否则会引起报错

可选个人信息的配置。如不希望本SDK采集某信息,请将对应字段的值改为0。如允许本SDK采集某信息,请将对应字段的值改为1

(1)在FYCoreConfig.plist中添加如下配置

<key>FY_GAME_PRIVACY</key>
<string>{"basic_device_data":"0","os_version":"0"}</string>

(2)字段名称说明

OS 个人信息类型及字段 用途和目的 是否可选 关闭方式
iOS 设备基础信息(设备型号、硬件信息、屏幕分辨率) 帮用户排查异常时使用,作为异常分析的依据 修改配置参数 FY_GAME_PRIVACY 的 basic_device_data 字段值为"0"
iOS 操作系统版本 帮用户排查异常时使用,作为异常分析的依据 修改配置参数 FY_GAME_PRIVACY 的 os_version 字段值为"0"
iOS IDFA(版本3.3.56已去除) 帮用户排查异常时使用,作为异常分析的依据

2.3 添加Xcode配置

1.TARGETS -> Build Settings -> Other Linker Flags -> 添加 -ObjC

2.TARGETS -> Build Settings -> Apple LLVM - Language - Objective C -> Weak References in Manual Retain Release -> YES

3.TARGETS -> Build Settings -> Enable Objective-C Exceptions -> YES

4.TARGETS -> Build Settings -> Enable Bitcode -> NO

2.4 开启调试模式

1.将 FYCoreConfig.plist 中的 FY_GAME_DEBUG 的值改为 1,即可开启「调试模式」;FY_GAME_DEBUG 改为 0,即关闭「调试模式」。

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

悬浮球

2.5 引入头文件

在对接代码头部引入头文件:

# import <FYAntiAddiction/FYAntiAddiction.h>

3 界面跳转标准规范

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

3.1 首屏-防沉迷

首屏-防沉迷

3.2 游戏中-防沉迷

游戏中-防沉迷

4 客户端接口

接口接入的要诀?

  • 必接接口一定要接入,选接接口根据需要接入

  • 必传参数一定要传,能传的参数尽量都传

  • 所有的生命周期接口一定要接入

4.1 客户端回调

1.说明

  • SDK接口在执行以后,会调用相应的回调方法,可以在回调方法中,处理相应的游戏逻辑

2.使用

  • 注册以下通知,注册通知可以放在 AppDelegate.m(Unity 为UnityAppController.mm) 的 application:didFinishLaunchingWithOptions: 方法中
//注册通知:防沉迷回调
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fyanAntiAddictionCallback:) name:FYANAntiAddictionCallback object:nil];

//注册通知:支付限制回调
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fyanLimitPayCallback:) name:FYANLimitPayCallback object:nil];

//注册通知:是否到防沉迷时间回调
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fyanTimeOutCallback:) name:FYANTimeOutCallback object:nil];

//注册通知:接收实名认证信息回调
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fyanRealNameCallback:) name:FYANRealNameCallback object:nil];
  • 实现注册的回调方法,回调方法可以添加在AppDelegate.m(Unity 为UnityAppController.mm) 的末尾处。
// 防沉迷回调
// 当调用 antiAddiction 接口时会将执行此回调
- (void)fyanAntiAddictionCallback:(NSNotification*)notify {
    FYANResponse *resp = notify.object;
    if (resp.status == FYANResponseSuccess) {
        //不符合防沉迷条件
        //可以正常进入游戏
        //可以继续进行游戏
    } else {
        //符合防沉迷条件,需要限制
        //禁止进入游戏
        //退回到登录首页
    }
}

// 支付限制回调
// 当调用 limitPay 接口将执行此回调
- (void)fyanLimitPayCallback:(NSNotification*)notify {
    FYANResponse *resp = notify.object;
    // 角色ID
    NSString *playerId = resp.data[@"player_id"];
    // 区服ID
    NSString *serverId = resp.data[@"server_id"];
    // 唯一用户ID
    NSString *openId = resp.data[@"open_id"];
    // 金额(分)
    NSString *amount = resp.data[@"amount"];
    // 额外参数
    NSString *extra = resp.data[@"extra"];

    if (resp.status == FYANResponseSuccess) {
        // 此用户没有被限制支付
        // 游戏继续支付流程
    } else {
        // 此用户被限制支付
        // 游戏需结束支付流程
    }
}

// 是否到防沉迷时间回调
// 当防沉迷时间到,或者调用 isTimeOut 接口将执行此回调
- (void)fyanTimeOutCallback:(NSNotification*)notify {
    FYANResponse *resp = notify.object;
    // 总时间
    NSString *totalTime = resp.data[@"total_time"];
    // 剩下时间
    NSString *remainTime = resp.data[@"remain_time"];

    if (resp.status == FYANResponseSuccess) {
        // 到达防沉迷时间
        // 游戏必须在此择机弹出防沉迷
    } else {
        // 未到达防沉迷时间
    }
}

// 接收实名认证信息回调
// 当调用 realName 并且系统确定设置实名认证信息完成后回调
- (void)fyanRealNameCallback:(NSNotification *)notify {
    FYANResponse *resp = notify.object;
    if (resp.status == FYANResponseSuccess) {
        // 表示设置实名认证信息已完成
        // 可以继续执行后续的防沉迷逻辑(防沉迷弹窗、充值限制等)

    } else {
        // 设置实名认证信息失败
        // 失败信息
        NSString *msg = resp.message;
        NSLog(@"%@", msg);
    }
}

4.2 初始化 doInit (必接)

1.说明

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

2.调用

[[FYAntiAddiction sharedInstance] doInit];

3.参数

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

1.说明

  • 此接口用来接收实名认证信息,为后续防沉迷做准备,如果此接口没有完成调用,则后续的防沉迷行为不会生效
  • 若有接入聚合渠道SDK,必须在聚合渠道SDK的fycombineLoginCallBack回调和fycombineRealNameCallBack回调中调用,并将相关的实名信息传进来

2.调用

FYANRealNameInfo *info = [[FYANRealNameInfo alloc] init];
info.openId = @"xxx";
info.unionId = @"xxx";
info.identityBirthday = @"2000-01-01";
info.identityAge = @"1";
info.scene = @"1";
[[FYAntiAddiction sharedInstance] realName:info];

3.参数

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

4.回调

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

4.4 防沉迷弹窗 antiAddiction (必接)

1.说明

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

2.调用

FYANAntiAddictionInfo *antiInfo = [[FYANAntiAddictionInfo alloc] init];
antiInfo.scene = @"1";
[[FYAntiAddiction sharedInstance] antiAddiction:antiInfo];

3.参数

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

4.回调

  • 防沉迷回调 fyanAntiAddictionCallback

4.5 是否到防沉迷时间 isTimeOut (非必接)

1.说明

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

2.调用

[[FYAntiAddiction sharedInstance] isTimeOut];

3.参数

4.回调

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

4.6 限制充值 limitPay (必接)

1.说明

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

2.调用

FYANLimitPayInfo *info = [[FYANLimitPayInfo alloc] init];
info.openId = @"xxx";
info.amount = @"6000";
info.playerId = @"xxx";
info.serverId = @"1";
info.extra = @"xxx";
[[FYAntiAddiction sharedInstance] limitPay:info];

3.参数

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

4.回调

  • 支付限制回调 fyanLimitPayCallback