前言:
这是一个unity小程序猿使用typesdk给公司项目接入各渠道游戏联运sdk的使用笔记,说是笔记是因为从接触这个聚合工具到接入项目中并且将项目上线到渠道(目前已上线oppo,huawei,aliuc)也就一礼拜左右,很多东西也没有弄懂,现在因为项目已经上线了清闲点了,就想将这期间碰到的一些问题(坑)以及接入的一些心得体会记录下来,于是有了本文。。毕竟也是处于学习阶段,所以文章有啥问题麻烦大家直接提出来,共同学习~~
TypeSDK简单介绍:
typesdk用于公司【游戏项目】需要接入多渠道sdk时的可以统一接入各渠道并一键打包安装的工具,免费,开源,同时打包不是反编译!!注意:是“开源”!当然,核心部分还是不开源的:打包的代码目前好像没有看到~
优点:
1 不通过反编译打包:这个很关键,目前很多主流渠道都禁止游戏接入第三方聚合sdk,而目前市面上的很多sdk都是通过反编译重新打包生成的,这样有挺大几率审核失败,而typesdk是先要你导出项目,然后通过它自己的方式再打包,基本上避免了会被检测到项目接入了第三方聚合sdk而审核失败的问题。
2 开源:出现大部分的问题都可以自己修改代码,等到了解整个框架源码后,你就可以将他变成自己公司的渠道接入工具了。
集成步骤与体会:
1 安装服务端:
按照官网提供的技术文档-安装服务器http://www.typesdk.com/documents/install-4,具体就略过了,本人是客户端程序,本篇也大部分也是客户端的视角。
2 安装打包工具:
打包工具安装在新系统上,具体步骤如http://www.typesdk.com/documents/install-5,也不详说,注意点就是需要在新系统上(老系统没有一个机子装成功了~)
打包工具的打包逻辑:
1 首先以上传的母包(unity导出的android包)为基础,
2 在打包工具下的文件路径C:TypeSdkTypeSdkPackge ypesdkshareSDKChannel_SDK 内找到所要打包的渠道的文件路径,合并里面的资源以及xml文件
3 接着合并C:TypeSdkTypeSdkPackge ypesdkshareSDKType_SDK 路径下对应版本的typesdk 的资源以及xml文件
4 最后合并C:TypeSdkTypeSdkPackge ypesdkshareSDKChannel_SDKGAGame 路径下的文件,这个文件为什么要合并暂时不太清楚,根据版本名字我猜测是
,为了合并这个,里面大概是一些tencent,支付宝,wx,银联等sdk资源,目前发现不合并这个也不会影响打包。(华为的包需要去掉这个,不然审核会不通过,具体看下面错误2)
3 设置打包管理平台:
打包工具安装好,可以生成一个web版的出包管理平台,方便我们上传母包,添加游戏,配置渠道参数,选渠道打包。
管理平台发现到的问题(坑)提示:
坑1: 签名keystore只能在添加游戏时设置好,
实测,在游戏已添加成功后再修改keystore时没用,打包的时候会报找不到最先那个xxxxx.keystore文件的错。故最好在建立游戏的时候确定好签名keystore,不然等渠道参数配置好了又要修改keystore时,渠道参数又要重新填一遍。。
坑2:
在游戏添加后,就可以在游戏的后面的接入渠道按钮里面新增渠道参数
注意,新增渠道或者修改过渠道参数后都需要点击
同步到服务器,这里要说的坑是各个渠道的参数配置,
渠道参数配置单里的说明都不一定正确,有一些key的说明还是错的,所以当你不清楚填的是否正确时,最好去打包工具那里查看该平台的sdk源码,就是一些java文件,一切以java文件中的参数意思来配置。当你确定java配置没问题后,那可能就需要去linux服务器系统上看一下服务器的代码,是否有用到该参数,参数意思不对的话也需要改。具体有哪里就不说了,太多了,都是出现问题就一个个去看源码,然后改过来。基本上各个渠道都有问题。。。
坑3:
渠道参数配置时,记得开启右上角的
,不然有些参数看不到。同时,参数后面的
这些选项一定要看清楚勾好,新建的时候默认是不勾的。。有些参数要是没勾到就可能在打包的时候打不进去,然后唤起sdk时报参数错误,或者找不到该参数问题。
渠道参数修改完之后,需要点击
写入文件,同时执行最前面的同步到sdk服务器步骤。
总结一下,sdk出错后,你需要:
1 参数要仔细检查是否填错
2 参数后面的勾要看需求勾好(宁多勾毋不勾)
3 确定1和2都没问题时,首先需要检查对应渠道的java代码(基本上都是java里写的参数名和管理平台这的参数名不对,需要改java代码),其次没问题时再检测AndroidManifest.xml文件,有些渠道是需要在xml文件中配置appid,appkey啥的,typesdk是将这些参数通过动态获取的方式填入,你可以是指直接填进去,可能会有意想不到的结果。
接入客户端:
http://www.typesdk.com/documents/typesdk-use-5
按照文档,将u3dtype提供的untiydemo导入到工程中,导入后找到这个脚本
所有sdk唤起都在这个U3DTypeSDK脚本里,U3DTypeEventListener是用来监听sdk回调事件的,使用起来还是挺方便的。这里一般没什么问题,要注意的一个点是这两个脚本自带的MonoBehaviour单例是否符合你们项目的单例使用规则,不符合的话注意修改时记得给单例挂的物体名字赋原始值。还有一点就是对sdk的所有调用尽量放在MonoBehaviour主线程中,在子线程或者非MonoBehaviour线程中容易出现闪退问题,adt报错如下:
07-17 14:18:38.847: E/dalvikvm(4604): JNI ERROR (app bug): accessed stale local reference 0x1d200001 (index 0 in a table of size 0)
07-17 14:18:38.847: E/dalvikvm(4604): VM aborting
07-17 14:18:38.847: A/libc(4604): Fatal signal 6 (SIGABRT) at 0x000011fc (code=-6), thread 4853 (GC_start_routin)
typeSdk接入后的常见问题:
1 新手机(如安卓8.0以上)的手机启动时黑屏,老点的手机(如6.0以下)就正常玩
原因:
typesdk中的安卓xml文件默认targetversion=25,而目前手机上的targetversion<23的,安装的时候需要的权限默认都是允许的,但是>=23的,所需要的危险权限是默认拒绝的,存储权限就是危险权限一类。所以当游戏需要这个权限的时候,由于权限是没有的,而且没有进行权限申请,从而导致了游戏黑屏。
解决办法:
1 这其实是unity5.x的一个bug,我们项目是5.2.4f1,目前高版本的unity已经修复这个问题了。所以可以换版本的项目就可以升级到新版本,如unity2017,就可以解决该问题。
2 升级不了版本的项目可以将xml文件中的targetversion设置为23以下,我们是改成21了,也算是解决这个问题了。
2 上线审核时,如华为渠道,审核失败原因是项目中有接入支付宝,银联,微信支付。
原因:
打包工具打包时,会将打包工具安装包中的C:TypeSdkTypeSdkPackge ypesdkshareSDKChannel_SDKGAGame 文件下的东西都打进去,而在GAGame文件夹里的libs资源路径下,上面的各种支付都有,同时xml文件中也配置了上述支付的activity。
解决办法:
将GAGame改个名字就不会打入改文件下资源,同时将导出的母包中的xml文件中有关上述支付的activity声明去掉。不会影响正常打包。
3 母包zip上传失败
原因:一般是因为压缩文件路径错了
解决办法:
导出包后的文件夹里有两个文件,一个是游戏设置的包名文件,一个是unity-android-resources
只需要将包名文件改成Game,再按要求删掉Game里面的一些文件,然后再将Game文件压缩成Game.zip,一般就没问题了。
4 渠道游戏打包失败
报错1:找不到unity-android-resources
这个问题应该是上面压缩母包的时候没有将unity-android-resources压缩进去造成的,但是我试过将该文件放到任意位置压缩,都上传不成功,因此我选择不压缩该文件,同时将Game文件里的project.properties文件中去掉对unity-android-resources的资源引用,改成
报错2:找不到androidxxxxxxx ,如第一次打包YYB渠道时会提示没有找到android8
这种问题是因为你的打包软件所在的系统没有安装android8,YYB渠道默认是需要android8才能打包,因此在打包软件对应的sdk上安装android8即可
报错3://TODO 待补充~~
5 服务器收不到支付回调
原因:typesdk linux服务器上接收到第三方回调后转发的回调地址不正确,或者linux服务器上的接收逻辑没有跑通
解决办法:
1 先去linux服务器上的
logic脚本中查出linux服务器是否有收到第三方(华为,oppo等)的支付回调,没有收到的话就检查在出包管理平台里的渠道配置那检查支付回调地址是否填错。一般都是填错或者后面的选项没有勾导致的。
2 logic能收到回调,游戏服务器收不到回调,这个时候就要检查对应渠道的逻辑脚本是否有问题,例如uc渠道的就是
,通过查看该脚本中的
方法(断点调试或者log调试),可以找到原因。
心得:
1 很多时候是验证失败,我们目前是直接去掉typesdk的验证,重新写了一套最基本的验证。
2 还有种可能是回调错了,有个渠道的支付回调参数notifyurl 赋值的却是游戏服务器生成的订单信息里的verifyurl(订单查询回调地址),因此当你游戏服务端生成订单的时候,如果不填订单查询回调,或者填了,于是回调发到你订单查询回调地址去了。因为目前我们是没有接入查询订单的接口,于是将查询回调填成支付回调了。(提醒:typesdk中的所有参数能填的尽量填,不要空着,空着不填容易出问题,并没有文档上写的传空就行那么好。。。)