三分钟集成 Tap 防沉迷 SDK(Unity 版)

一、SDK 介绍

基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap 推出防沉迷 SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上 8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!


弹窗提示

开发环境要求:

  • Unity 2019.4 或更高版本
  • iOS 10 或更高版本
  • Android 5.0(API level 21)或更高版本

🔗 Unity 集成 Demo 参考链接
🔗 Unity TapSDK 功能体验 APK 下载链接

二、集成前准备

1. 创建应用

进入开发者后台,按照提示开始创建应用;

2. 开通服务

在使用 TDS 实名认证和防沉迷服务之前,需要在上面创建的应用里找到 游戏服务 > 生态服务 > 合规认证 开通服务。
开通服务有两种方式:

  • 已有版号: 开通方式可以参考官方文档
  • 暂无版号: 可在开发者后台直接点击“立即开通”即可(选择该方式,不影响防沉迷功能测试)


    images

如果使用 TapTap 快速授权,也需要开通 TapTap 登录功能,并且需要配置包名和签名,并且在打包时设置的包名和签名要和后台配置的保持一致!

三、开始集成

1. 导入依赖库

导入依赖库有两种方式,分别为Unity Package Manager(UMP)导入或手动导入(二者选其一即可):

  • UMP 方式导入(这种更方便,比较推荐):
    在项目的 Packages/manifest.json 文件中添加以下依赖:
"dependencies":{
    "com.tapsdk.antiaddiction":"https://github.com/taptap/TapAntiAddiction-Unity.git#3.16.1",
    "com.leancloud.storage": "https://github.com/leancloud/csharp-sdk-upm.git#storage-1.0.2",
    "com.taptap.tds.common":"https://github.com/TapTap/TapCommon-Unity.git#3.16.1",
}
  • 手动导入(因为要下载离线包,相对耽误时间):

    1、先从官方 SDK 下载页找到 TapSDK UnityLeanCloud C# SDK 下载地址,分别下载 TapSDK-UnityPackage.zipLeanCloud-SDK-Storage-Unity.zip

    2、解压 TapSDK-UnityPackage.zip 分别双击 TapTap_Common.unitypackageTapTap_AntiAddiction_3.16.1.unitypackage 然后导入包。

    3、将 LeanCloud-SDK-Storage-Unity.zip 解压后 Plugins 文件夹,拖拽到 Unity 项目就好了;

2. 初始化 SDK

using TapTap.AntiAddiction;
using TapTap.AntiAddiction.Model;

AntiAddictionConfig config = new AntiAddictionConfig()
{
    gameId = "your_client_id",      // TapTap 开发者中心对应 Client ID
    useTapLogin = true,             // 是否启动 TapTap 快速认证
    showSwitchAccount = false,      // 是否显示切换账号按钮
};         

Action<int, string> callback = (code, errorMsg) => {
    //code == 500;   //登录成功
    //code = 1000;   //用户登出
    //code = 1001;   //切换账号
    //code = 1030;   //用户当前无法进行游戏
    //code = 1050;   //时长限制
    //code = 9002;   //实名过程中点击了关闭实名窗
    UnityEngine.Debug.LogFormat($"code: {code} error Message: {errorMsg}");
};

AntiAddictionUIKit.Init(config, callback);

3. 开始实名

string userIdentifier = "玩家的唯一标识";
AntiAddictionUIKit.Startup(userIdentifier);

⚠️判断是否实名是通过传入的‘玩家唯一标识’进行判断的,如果同一个玩家,每次调用实名接口传入的唯一标识不同,会导致重复认证,所以一般建议玩家唯一标识可以传入该玩家的唯一ID,例如:使用 Tap 登录返回的 objectId、openid、unionid;重点是只要该唯一标识是和玩家唯一绑定就行。

4. 其他功能接口

登出

玩家在游戏内退出账号时调用,重置防沉迷状态。

AntiAddictionUIKit.Exit();

获取玩家年龄段

int ageRange = AntiAddictionUIKit.AgeRange;

获取剩余时长(单位:秒)

int remainingTimeInSeconds = AntiAddictionUIKit.RemainingTime;

获取剩余时长(单位:分钟)

int remainingTimeInMinutes = AntiAddictionUIKit.RemainingTimeInMinutes;

检查消费上限

检查消费上限功能需要游戏在用户每次消费成功后上报消费金额(方法在下面);

long amount = 100; // 金额的单位为 分
AntiAddictionUIKit.CheckPayLimit(amount,
    (result) => {
        // status 为 1 时可以支付
        int status = result.status;
        if (status == 1) {
            // 可以进行支付
        }
    },
    (exception) => {
        // 处理异常
    }
);

上报消费金额

客户端直接调用上报金额的可靠性比较低,建议用户使用服务端上报,REST API 接口可以参考官方 API 使用说明,一般无服务端的单机游戏会使用客户端进行调用。

long amount = 100; // 金额单位为 分
AntiAddictionUIKit.SubmitPayResult(amount,
    () => {
        // 成功
    }, (exception) => {
        // 处理异常
    }
);

上报游戏时长

AntiAddictionUIKit.EnterGame();

停止上报时长

AntiAddictionUIKit.LeaveGame();

四、打包 Android APK

  1. 通过 File -> Build Settings;弹出 Build Settings 页面;

  2. 选择 Android,点击 Switch Platform,然后如下图:


    image
  3. 点击 Player Settings,然后点击 Publishing Settings 设置签名文件


    images
  4. 点击 Other Settings 设置 Package Name


    images
  5. 最后直接点击 Build 开始构建,构建成功后就可以打包成功!到此就结束了!

    images

⚠️注意此处设置的包名以及签名文件要和开发者后台配置的包名签名要保持一致!

五、导出 XCode 项目

⚠️如果是手动下载 unitypackage 进行 SDK 导入,需要将 Assets/TapTap/Common/Plugins/iOS/TapTap.Common.dll 设置为只支持 iOS。

  1. iOS 配置

1.1、 在 Assets/Plugins/iOS/Resource 目录下创建 TDS-Info.plist 文件,复制以下代码并且替换其中的 ClientId。如果游戏使用了 TapTap 内嵌动态或数据分析服务,需要配置相关权限并替换授权文案:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>taptap</key>
    <dict>
        <key>client_id</key>
        <string>换成你的 ClientId 值</string>
    </dict>

    <!--使用内嵌动态服务,需要相册、相机、麦克风权限-->
    <key>NSPhotoLibraryUsageDescription</key>
    <string>说明为何应用需要此项权限</string>
    <key>NSCameraUsageDescription</key>
    <string>说明为何应用需要此项权限</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>说明为何应用需要此项权限</string>
    <!--使用数据分析服务需要 IDFA 权限。如应用程序不想弹框,可以设置 TapDB.AdvertiserIDCollectionEnabled(false)-->
    <key>NSUserTrackingUsageDescription</key>
    <string>说明为何应用需要此项权限</string>
</dict>
</plist>

1.2、 使用 Xcode 13.0 beta 5 编译,检查 Unity 输出的 Xcode 工程:

  • 请确保设置 Xcode - General - Frameworks, Libraries, and Embedded Content 中的 AntiAddictionService.framework 和 AntiAddictionUI.framework 为 Do Not Embed。
  • 如果编译报错找不到头文件或者模块,请确保 Xcode-Build Settings - Framework Search Paths 中的路径以保证 Xcode 正常编译。
  • 确保 Xcode 工程的 Build Settings 的 Swift Compile Language/Swfit Language Version 为 Swift5。
  • 添加依赖库 libz.tbd libc++.tdb
  • 开始代码接入
  • 将 AntiAddiction-Unity/Assets/Plugins/iOS/Resource/AntiAdictionResources.bundle 拷贝到游戏项目下 (如果 unity 项目没有正确导入 AntiAddictionResources.bundle)
    *防沉迷 SDK 需要联网和发送请求数据的权限,请开发者注意在项目中声明相应权限。
  1. 通过 File -> Build Settings;弹出 Build Settings 页面;

  2. 选择 iOS,点击 Switch Platform,然后如下图:


    images
  3. 点击 Player Settings,开始设置 Bundle Identifier、Version、Company Name、Product Name 信息;


    images
images
  1. 最后直接点击 Build 然后开始选择导出项目文件夹路径进行开始导出;

  2. 接着就是使用 XCode 打开导出项目中的 Unity-iPhone.xcodeproj 文件;

  3. 开始设置证书和 Bundle Identifier,结果如下:


    images
  4. 最后开始运行就可以了,至此所有集成介绍全部完成!

六、常见问题

官方常见问题汇总

问题排查思路:

  1. 对照文档检查依赖以及集成方式是否按照正确集成;
  2. 检查初始化配置信息是否和开发者平台一致;
  3. 检查调用的实名接口的唯一标识是否唯一;
  4. 检查调用的方法是否正确;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容