Tap开发者手册怎么做?怎么样?怎么办?
请结合《Tap 开发者手册》开发者文档阅读本文。
统一部分
首先你的游戏工程文件必须是的
因为Tap开发手册中推荐的最低版本是10及以上,也就是api。 检查Unity的apk包中是否有该版本的包。 如果没有,则需要到相关网站下载该工具,然后下载指定的包版本。 详细流程请参见下载SDK工具完成SDK安装并配置环境变量的博客-CSDN博客sdk工具。
由于Tap只支持列出64位apk包,并且在unity中使用mono后端打包无法指定64位生成,因此我们需要选择打包,取消选中ARMv7,并选中ARM64。
水龙头开发中心部分
创建游戏,游戏服务-启用服务,在应用配置界面-启用登录
配置签名证书。 如果没有,请进入香蕉云编辑器-应用打包上架工具平台()创建个人签名,并在香蕉云编辑器-查看应用的sha1值中检查签名MD5值| 如何查看apk的sha1(去掉符号),下载Names软件到手机上查看游戏包名(一般是com.开发者名.游戏名)。 进入登录界面,然后在登录界面将您的账户添加到测试者列表中。
最后,在“合规性认证”中选择“无版本号”并激活服务。
导游包
前言:如果按照开发者手册中的第二种方法,即手动导入包,还是需要配置很多东西。 即使没有错误,也会导致无法正常导入或引用的问题,所以无论如何我们都要学会怎么做。 第一种引导包的方式,这种引导包的方式对以后的其他包也有帮助。
配置git:首先你要下载git并安装它,Git()。
然后关闭unity和后台程序,按照开发者手册的说明修改文件
上图只是包,我们还需要实名认证包,所以按照上面的操作顺序修改完整的.json如下,添加4个包名后
"com.leancloud.realtime": "https://github.com/leancloud/csharp-sdk-upm.git#realtime-0.10.14",
"com.leancloud.storage": "https://github.com/leancloud/csharp-sdk-upm.git#storage-0.10.14",
"com.taptap.tds.bootstrap": "https://github.com/TapTap/TapBootstrap-Unity.git#3.12.1",
"com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.12.1",
"com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.12.1",
最后,经过实际测试,如果按照上面的方法导入防沉迷包,会出现无法引用的问题,所以我们科学上网,从官网下载了该包,直接拖入项目资源文件夹以手动导入包。
然后先科学上网,然后打开unity进入项目,因为unity需要从网站下载相关的Tap包。 如果还不行,就关闭Unity和后台,尝试科学上网。 如果还不行,就反复切换注册表中的包和项目中的包并手动刷新即可,直到出现如下画面
关于开发者手册中untiy中配置的问题
经过实际测试,手机上是否安装了打包的apk,不会影响打包的apk的运行。 如果勾选了,并且按照开发者手册中的步骤修改了xml文件,那么打包好的apk文件安装到手机上后将无法打开软件,提示app is not a ,所以我们选择跳过此步骤并且不选中此选项。
至此,准备工作已经准备就绪。 在正式开始实现功能之前,请先梳理一下各个功能的实现顺序:初始化——初始化实名认证——开始点击账户登录——启动实名认证并启动防沉迷系统——点击登录并实名认证模块对接——实现静默登录——实现一系列防沉迷功能。
项目参考
using System;
using TapTap.Bootstrap;
using TapTap.Common;
using TapTap.Login;
using UnityEngine;
using Plugins.AntiAddictionUIKit;
using System.Collections;
初始化
private void InitTapSdk()
{
var config = new TapConfig.Builder()
.ClientID("xxxxxxx")
.ClientToken("xxxxxxxxxxxxxxxxx")
.ServerURL("https://xxxxxxxxxxxxxx.cloud.tds1.tapapis.cn")
.RegionType(RegionType.CN)
.ConfigBuilder();
TapBootstrap.Init(config);
}
(接入防沉迷系统前言:Tap官方声明称,从2022年8月起,请确保列出的应用需要接入防沉迷系统,所以本文必须同时实现默认和防沉迷部分,因此本文会登录到与防沉迷系统合并实现的模块。)
初始化防沉迷模块
//游戏的ClientID
string gameIdentifier = "xxxxxxxxxxx";
// 是否启用时长限制功能
bool useTimeLimit = true;
// 是否启用消费限制功能
bool usePaymentLimit = false;
// 是否显示切换账号按钮
bool showSwitchAccount = false;
public IEnumerator InitAnti() //用协程来写该函数的原因在对接登录和实名认证模块解释
{
AntiAddictionUIKit.Init(gameIdentifier, useTimeLimit, usePaymentLimit, showSwitchAccount,
(antiAddictionCallbackData) =>
{
int code = antiAddictionCallbackData.code;
MsgExtraParams extras = antiAddictionCallbackData.extras;
// 根据 code 不同提示玩家不同信息,详见下面的说明
if (code == 500)//该回调可忽略,详见开发者手册的回调部分
{
// 开始计时
AntiAddictionUIKit.EnterGame();
Debug.Log("玩家登录后判断当前玩家可以进行游戏");
}
},
(exception) =>
{
// 处理异常
}
);
yield return new WaitForSeconds(1);//后文解释
OnLoginClicked();//开始TapTap登录
yield return new WaitForSeconds(1);//后文解释
StartAnti();//开始实名认证
}
完成两部分初始化函数后,首先我们在Awake()函数中执行两部分初始化。 经过实际测试,两部分的初始化顺序并没有冲突。
public void Awake()
{
InitTapSdk();
StartCoroutine(InitAnti());
}
实现登录功能
该功能将弹出登录界面。 经过实际测试,首次登录需要联网。 如果后续实现静默登录,则无需联网即可登录互联网。
bool useTapLogin = false;//在Login后传入true
string userIdentifier = "玩家的唯一标识";//在Login后传入该玩家的唯一标识
public async void OnLoginClicked()//官方Demo通过用Button来执行登录功能,故函数名为此,各位根据实际需求来修改
{
try
{
var tdsUser = await TDSUser.LoginWithTapTap(null);
userIdentifier = tdsUser.ObjectId;
label = $"login Success:{tdsUser}";
Debug.Log($"login Success:{tdsUser}");
useTapLogin = true;
}
catch (Exception e)
{
if (f is TapException error)
{
label = $"Login Error:{error.code} message:{error.message}";
}
else
{
label = $"Login Error:{e}";
}
throw;
}
}
}
实现实名认证和防沉迷系统
public void StartAnti()
{
AntiAddictionUIKit.Startup(useTapLogin, userIdentifier);//从登录功能执行后获取到的两变量
int ageRange = AntiAddictionUIKit.CurrentUserAgeLimit();//此临时变量是玩家年龄段,详见开发者手册,如果显示-1则需要刷新重新显示
AntiAddictionUIKit.EnterGame();
//GameManager.m_game.m_loadingScreen.LoadScene();此处即可跳转场景了,各位根据需求选择是否实现
}
调试快速登录与实名认证对接
这部分不应该出现。 之所以出现,是因为打包后,需要从函数包中调用函数名,形成一个完整的函数,以及函数脱壳的加密方式。 详细内容请看我个人对Unity打包后反编译探索的研究。 结果。 这个过程需要时间执行,所以我用mono打包时可以正常执行,但是打包后执行有时间差。 结果登录后得到的两个变量还没来得及传入实名认证模块,实名认证就已经执行完毕。 最后报错,卡住了。 实名认证页面无法进入游戏(首次登录正常,后续登录报错)。 作者想出的临时解决方案是用协程编写初始化实名认证和防沉迷部分,并在登录和实名认证部分插入1s等待时间,让登录有足够的时间传递变量。 代码已经写在上面的()函数中了。
public IEnumerator InitAnti()
{
yield return new WaitForSeconds(1);//此处解释
OnLoginClicked();//开始TapTap登录
yield return new WaitForSeconds(1);//此处解释
StartAnti();//开始实名认证
}
实现静默登录功能
静默登录是指首次登录后,后续登录将从游戏缓存中获取上次登录信息,即无需手动登录,从而实现编码重复登录的功能。 该功能接口.()是开发者手册中预留的。 具体参见文档:检查登录状态和用户信息。要实现静默登录,我们可以直接修改我们的一些初始登录功能。 修改后的登录函数如下
public async void OnLoginClicked()
{
try//此try catch加入静默登录功能
{
var accesstoken = await TapLogin.GetAccessToken();
Debug.Log("已登录");
// 直接进入游戏
var profile = await TapLogin.GetProfile();
userIdentifier = profile.openid;
useTapLogin = true;
}
catch (Exception e)
{
Debug.Log(e);
Debug.Log("当前未登录");
// 开始登录
try
{
var tdsUser = await TDSUser.LoginWithTapTap(null);
userIdentifier = tdsUser.ObjectId;
label = $"login Success:{tdsUser}";
Debug.Log($"login Success:{tdsUser}");
useTapLogin = true;
}
catch (Exception f)
{
if (f is TapException error)
{
label = $"Login Error:{error.code} message:{error.message}";
}
else
{
label = $"Login Error:{f}";
}
throw;
}
}
}
实现防沉迷系统相关功能
据 Tap 开发团队介绍。 我们只需要记录游戏的开始和停止时长即可。 模块会自动依次上报游戏时长,并自动弹出小超时界面。
我们主要执行实名认证功能中开始记录游戏时长的接口。 上面已经添加了,这里不再修改。 读者需要在退出游戏的功能中添加停止计时的接口。
public void StopAnti()
{
AntiAddictionUIKit.LeaveGame();//停止计时
}
至此,所有工作就完成了。 进入游戏后将脚本挂载到登录场景上,扔进don’t中。 建议挂载,方便调用,并保留至游戏进程退出。 最后祝愿所有独立游戏开发商和独立游戏开发团队自己的游戏能够顺利上线,也希望所有用心开发的国产游戏都能获得游戏版号。
以下内容与本文无关。 纯粹是作者为大家描述的学习过程以及踩过的坑。
7天! 整整7天! 我努力工作了7天,熬夜了5天,但我很生气。 我每天9点起床,看电脑,吃午饭,看电脑,吃晚饭,看电脑,熬夜到3:00或4点,因为我太生气了我无法入睡。 已经发布游戏的前辈都不愿意分享。 开发者手册更是可笑。 它把每个人都当作老板,只是改变了xml文件。 我当时看的时候连xml是什么都不知道。 还是有一些满足感的。 Tap开发团队非常详细、耐心地回答了我在工单中的问题,甚至主动提出帮助我调试apk。 我要感谢 Tap 开发团队。
1.我不知道如何执行教程的第一步。 我以前没学过。 折磨了我两天,整整两天。 我按照修改.json的方法下载了包,但是结果要么是搜索包出错,要么是进入项目出错防沉迷网站,科学上网就不行了。 然后我尝试手动导入包。 导入了好久,我把无效的引用全部改正了。 结果我还是需要配置一些东西。 很多文件,然后让我勾选自定义主列表选项,然后打包apk安装后打不开游戏。 它说该应用程序未安装。 我很困惑。 取消勾选后,打包的唯一apk包就是我的游戏。 尸体不见了。 我真的是吐血了。 最后在Unity中溯源的时候报错了。 逐点查找,最后发现必须下载安装Git软件才能通过修改.json导入包,哈? 那为什么你的开发手册没有这么说呢? 谁知道? 错误示例没有解释,也没有解释。 两天! 刚刚完成了引导包的第一步。
2、访问Tap账号进行登录测试时,无论是在Unity中调试,还是安装手机后调试,要么是崩溃画面,要么是弹出登录界面UI不显示二维码。 一开始我以为是网络问题,因为我的项目没有连接网络设置,纠结了一段时间后发现不是这个问题。 我又按照开发者手册上的步骤重复了好几次,才发现需要配置签名和添加测试人员,哈? 那你为什么留到最后呢? 为什么一开始不把这个做好,实现登录功能呢? 然后是开发者手册中的MD5值。 手册提供了获取APK签名MD5值的软件。 结果,任何软件都无法搜索到它。 这个软件一打开就要求你输入包名来搜索软件,是吗? 包名是什么? 软件名称? apk 包的名称是什么? 经过多次尝试,犯了很多错误,我仍然找不到这个软件。 真的很烦人。 我什么都不知道。 不知道包名是否正确,也不知道你是否给了软件权限。 我不知道你的软件是否已经过期,或者你的软件是否连接到互联网。 最后我的判断是,这个软件是水货,不好! 这期间我找到了名为Names的软件来查找包名。 然后我就在网站上搜索了这个软件并尝试了一下。 最后找到了这个良心网站,获取了MD5和SHA1值,并自行创建了签名。 最后,在配置了签名并添加了测试人员之后,我终于可以拉出二维码了。 我用了一天半的时间完成了这个工作。
3、开发者手册中提供的接口和功能仅是部分代码。 新手不知道如何使用,如何调用接口,如何使用回调函数,如何try catch,如何出错。 幸运的是,它还为大家提供了官方的Demo,我花了很长时间才写出一个像样的脚本。 但! 但! 实名认证防沉迷系统为什么没有demo? 他们分开了吗? 接下来就是学习代码、研究代码的艰辛过程。 我什至研究了它的代码和结构反汇编,折磨! 我都不知道当时实名认证接口是怎么搭建成功的。 大家都很困惑。 我当时整个精神状态都是混乱的!
4.最后就是神奇的响应时间。 为什么要用协程来写初始化实名认证块? 最重要的是我的能力有限。 我能想到的方法有很多,但是这个都能实现,完美解决问题。 就是这样,只要人和代码其中之一就可以运行! 回到这个故事,我真的被说服了。 谁能想到登录账号后获取玩家唯一识别码需要这么长时间(虽然只有零点几秒),但我却花了整整两天的时间才做到。
首先,当出现卡屏且未启用实名认证时,我的第一反应是“完了,功能还没实现”。 然后我检查了代码并断点调试。 最后我的判断是功能可以实现,代码逻辑问题不大,因为第一次登录完全没有问题,只有后续登录后界面才会卡住。
然后我的第二反应就是try catch里的错误报告,不过这个更有趣。 第一次连接实名认证部分时,unity调试时全部报错。 我不断地更改代码并使用断点进行调试。 CSDN知乎b 我搜遍了站群,没有找到有用的方法。 最后我束手无策,询问了客服。 客服让我开工单。 然后我就不知道怎么用工单来提问了。 我针对两个问题开了两个工单,都被开发团队拒绝了。 培训结束后,不同的问题在同一个工单中得到解决。 开发团队给我的答复是Unity平台不支持调试和防沉迷,要求我安装在手机上进行调试。 那你为什么不早点告诉我呢? 他们都来自同一家公司。 Unity中可以使用账号登录进行调试,实名认证可以防沉迷。 你告诉我它不能在Unity中调试。 谁想到安装完手机并调试后,问题就完美解决了。 本来没有问题,但是却困扰了我很长时间。 这是我第一次进入实名认证版块的故事。
然后我的第三个反应是,不可能是代码混淆时的问题,因为开发者手册上明确提到,混淆后的代码已经处理完毕,如果再次混淆代码,会出现不可预知的错误。 我当时对这个想法很有潜力,然后我去学习如何切割代码,并学习如何跳过切割特定的程序集并保留源代码。 题外话,我学会了通过创建新链接来识别要跳过的程序集。 ,我什至不知道如何创建xml文件。 然后就该学习了,从头到脚学习,一个又一个问题学习,全部学完了,裁剪还保留着,但是问题还是一样,后面登录的时候页面还是卡住。 我不知道该程序集是否被保留,也不知道它是否被复制。 由于混乱而导致的错误。 然后我彻底冷静下来,开始集思广益,想到了一堆可能导致这个错误的可能性。 我把它们都写下来并一一尝试。
然后我想到了一个想法。 难道是玩家登录后的唯一ID没有发送到实名认证系统? 这不可能,这太可笑了,哈哈哈,时间不够。 然后我就改用协程,尝试了一下,没有任何希望。 我当场就差点气晕过去。 当时我在协程的每一行代码下都插入了一行yield(3s),等待了3秒。 安装手机后,无论是重复登录、静默登录,还是删除缓存重新登录,都没有问题。 问题成功解决了,人们愤怒了。 麻木的。 实名认证和防沉迷系统折磨了我7天。 谁知道这7天我是怎么熬过来的。
天地劫幽城再临归真4-5攻略:第四章归真4-5八回合图文通关教学[多图],天地劫幽城再临归真4-5怎么样八回合内通
2024-03-02