准备前工作
对于之前接入过2144SDK的平台先删除旧版SDK所有jar文件 、so文件以及依赖项目。具体如下:
sdk.png
- 1 删除 2144*.jar、BI.jar 等2144平台的jar包。
- 2 删除 GuangYuSDK_lib 这个依赖项目,或者是GuangYuSDK_lib.jar (没有的话可以忽略)。
- 3 删除 如下图所示的jar和so等资源:
注:以上操作只针对之前接过旧版2144SDK 的客户,第一次接入可以忽略这部分清理工作。
使用2144游戏SDK导入jar如图所示:(从demo复制过来就行)
sdk.png关于2144SDK版本v4.0.8之后重要更新说明(包括未来序列V1.0)
重要更新
重要更新
重要更新
适配Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2。
对于接入过2144sdk版本4.0.8之前游戏。在libs目录下有个MCPTool-1.1jar
替换成最新的walle-cli-all.jar
友情参考链接:https://github.com/Meituan-Dianping/walle
AndroidManifest.xml 权限配置
<!-- 悬浮按钮的权限-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
<!-- 网络通讯 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 查看网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 读取手机状态和身份 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_LOGS" />
Appliacation节点内配置:
<!-- 光雨sdk -->
<activity
android:name="com.guangyu.gamesdk.SDKActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustPan" />
<!-- YOUR_APP_KEY 替换为您在 2144手游平台注册的后台申请的应用Appkey -->
<meta-data
android:name="GUANGYUSDK_APPKEY"
android:value="YOUR_APP_KEY" >
</meta-data>
<!-- Channel ID 替换为您应用的推广渠道名称,没有特殊说明渠ID 设置为G2144-->
<meta-data
android:name="GUANGYUSDK_CHANNEL"
android:value="CHANNEL_ID" />
<!-- alipay sdk start -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<!-- alipay sdk end -->
<!-- WXPAY_APPID 微信官方申请的appid -->
<meta-data
android:name="WXPAY_APPID"
android:value="wx6d0aa1e5004f9344"/>
<!-- wxpay sdk start -->
<activity
android:name="com.guangyu.gamesdk.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" />
<activity
android:name="com.guangyu.gamesdk.wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop" />
<receiver android:name="com.guangyu.gamesdk.wxapi.AppRegister" >
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
<!-- wxpay sdk end -->
<!-- 分享 开始 -->
<activity
android:name=".WBShareActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustResize" >
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- 注意要把tecent后面的数字换成自己申请qq互联的应用id ,不接入QQ分享则不需要配置该参数-->
<data android:scheme="tencent101395922" />
</intent-filter>
</activity>
<!-- 分享 结束 -->
微博分享需要在包名目录下新建WBShareActivity.java,内容如下所示:
public class WBShareActivity extends com.guangyu.gamesdk.WBShareActivity {
}
接入前的准备工作基本结束,同时也可以参考demo里的 AndroidManifest.xml配置(以demo为准)
开始接入:
请务必先初始化之后,再调用SDK中的方法,确保先后顺序正确
1. SDK的初始化
注:SDK现有横版跟竖版两种样式。默认是横屏sdk。如果用户有需求可以传参改变SDK的横竖屏幕的显示。 在程序启动的时候初始化SDK
SDK.init(Context context,String appKey,String appSecret,String slug, boolean release,boolean isPortrait);
参数说明:
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
appKey | String | 2144分配给开发者的appKey |
appSecret | String | 2144分配给开发者的appSecret |
slug | String | 2144分配给游戏的slug(找2144相关的运营要该参数,不用联系技术) |
release | boolean | 是否正式发布 |
isPortrait | boolean | 横竖屏幕的标识,横屏幕是false,竖屏幕是true。(可选参数,不传参也可以,会默认为是横屏SDK) |
用法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//如果正式发布,release的参数false得改成true,如果不传则默认为true
//横竖屏sdk切换,isPortrait 的参数false表示横屏幕,true表示竖屏幕。如果不传参//数则默认为 false 横屏幕(isPortrait 可选参数)。
GYSdk.init(this, YOUR_APP_KEY, YOUR_APP_SECRET, YOUR_APP_SLUG ,false, false);
}
2. SDK的登录 ,请看下面支付登录回调初始化,或查看demo直观
doSdkLogin(Activity context,Boolean isLandScape,Boolean isBgTransparent)
参数说明:
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
isLandScape | Boolean | 是否横屏 |
isBgTransparent | Boolean | 是否透明 |
用法:
GYSdk.doSdkLogin(this, true, true);
请在游戏的 主Activity中对应方法中添加 以下代码(重要,重要,重要,重要事说三遍)
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
GuangYuAgent.onPause(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
GuangYuAgent.onResume(this);
}
3. SDK的支付(含微信支付,微信相关配置请看下面的说明)
pay(final Activity context,final float money,final String productid,final String uid,String userToken,String,serverId,String roleId,String extString)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
isLandScape | float | 支付的金额,以元为单位 |
productid | String | 产品id |
uid | String | 用户的uid |
userToken | String | 用户的userToken |
serverId | String | 区服id (整型如:1 , 11,111 如实填写) |
roleId | String | 角色id (整型如:1 , 11,111 如实填写) |
extString | String | 透传字段,长度不超过255个字符 |
用法:
GYSdk.pay(this, 1, "水晶", "uid","userToken","区服id","角色id" "透传字段");
支付回调需要注意的是:
/**
* 支付正常回调
* @param code 0 支付成功, 1 支付失败,-1 支付取消,-2 支付进行中
* */
public void onFinished(int code);
注:1.extString 透传参数(透传参数是游戏方自己传的,一般是游戏方订单号或者角色信息,我们在加币的时候把这个回调给游戏方,这样他们就知道加币到哪个角色上)
注:2. serverId, roleId 必传参数。
4.SDK微信支付配置说明
注: 微信支付 需要游戏方 在微信平台开放注册应用,并在微信商户平台 申请微信支付权限,之后请将商户号 给我们配置到支付后台。微信支付有打开和关闭的开关,接入时根据需要联系2144进行后台配置。
(微信支付cp方如果出现支付不了的情况,没有调起原生微信支付。 请核实两处信息 (1):cp方apk签名是否正确(这一条很重要,签名不成功则不能调起微信支付) (2):传入信息是否正确,请把log输出打印出来找后台核实。)
<meta-data
android:name="WXPAY_APPID"
android:value="请填写游戏在微信开放平台申请的appid"/>
<activity
<!-- 注意:.wxapi.WXPayEntryActivity 为包名+类型 -->
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" />
<receiver android:name="com.guangyu.gamesdk.wxapi.AppRegister" >
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP"/>
</intent-filter>
</receiver>
同时在项目的包名下 新建文件夹:
sdk.png
并新建java文件:
public class WXPayEntryActivity extends com.guangyu.gamesdk.wxapi.WXPayEntryActivity{
}
注:微信相关的功能在测试的时候 ,请务必使用正式签名之后的apk 测试,否则微信支付不能成功。
5. 个人中心
注:有横版和竖版两种个人中心,可根据需要联系2144进行配置
goCenter(Context context)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
用法:
GYSdk.goCenter(this);
6. 支付和登录的回调
public GYSdkReceiver(Context context,LoginCallBack loginCallBack, GuangYuPayCallBack guangYuPayCallBack)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
loginCallBack | LoginCallBack | 登录回调 |
guangYuPayCallBack | GuangYuPayCallBack | 支付回调 |
支付页面关闭通知:实现GuangYuPayCallBack#end方法
页面打开时调用,主要处理登录和支付回调的,用法:
gySdkReceiver = new GYSdkReceiver(this, this, this);
当页面被关闭时,需要进行清理工作:
gySdkReceiver.clear(this);
注:如何使用?请看demo gySdkReceiver的初始化
7. 悬浮球、弹幕(如游戏中出现了悬浮球,当应用退出的时候,悬浮球任然停留在桌面上,该怎么处理?操作如下)
注:浮球没有调用方法,只需要调用下面的方法即可。
应用退到后台:在Activity的onStop()方法里面调用
GYSdk.hideFloatBall();
应用再次打开:在Activity的onStart()方法里面调用
GYSdk.showFloatBall(this);
注:
1.悬浮球有打开和关闭的开关,sdk会根据需要自动打开和关闭悬浮球,游戏方不需要添加打开悬浮球的按钮,只需要布置好代码就可以了。悬浮球和弹幕一样。
2.接入浮球,一定得调用这两个方法(重要,重要,重要,重要事说三遍!!! 默认请调用该方法)。
3.不接入悬浮球,不考虑这两个方法。
8. 切换帐号
切换帐号功能(根据需求跟自己业务逻辑自行添加)
changeAccount (Context context)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
用法:
GYSdk.changeAccount(this);
9.社交模块
goSociety (Context context)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
用法:
GYSdk.goSociety(getApplicationContext());
10. 获取抽奖码(根据需求接入)
getlotterydraw(Context context, String uid, String token, final DrawCallBack listener)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
uid | String | uid |
token | String | token |
listener | DrawCallBack | 获取抽奖码的监听 |
用法:
GYSdk.getlotterydraw(this, uId, userToken, new DrawCallBack() {
@Override
public void onSuccess(DrawInfo drawInfo) {
String code = drawInfo.getDrawCode();
String checkUrl = drawInfo.getCheckUrl();
LogUtils.e("code=" + code + "checkUrl=" + checkUrl);
}
@Override
public void onFail() {
}
});
11. 创建角色(创角角色的接口在玩家创角完成后调用,必接)
注:如果有创建角色失败的问题,请打印对应接口的输出log。如若发现 例如:{"name":"Internal Server Error","message":"服务器内部错误。","code":0,"status":500}相应的返回值问题,造成相应的角色创建失败或者空值问题。请cp方联系后台进行信息的配置。配置成功即可创建角色成功。
createRole(Context context, String uid, int server_id, String server_name, String role_id, String role_name, int level, String fight, final PushLevelListener listener)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
uid | String | uid |
server_id | String | 区服数字ID |
server_name | String | 区服名 (整型如:1 , 11,111) |
role_id | String | 角色ID (整型如:1 , 11,111) |
role_name | String | 角色名 |
listener | PushLevelListener | 获取推送结果的监听 |
用法:
GYSdk.createRole(this, uId, “1”, "server_name", 1, "role_name", new PushLevelListener() {
@Override
public void success() {
}
@Override
public void fail(String msg) {
}
});
12. 等级推送 (等级推送的接口在玩家每次提升等级时调用,必接)
pushLevel(Context context, String uid, int server_id, String server_name, String role_id, String role_name, int level, String fight, final PushLevelListener listener)
参数名 | 类型 | 描述 |
---|---|---|
context | Context | 上下文对象 |
uid | String | uid |
server_id | String | 区服数字ID |
server_name | String | 区服名 (整型如:1 , 11,111) |
role_id | String | 角色ID (整型如:1 , 11,111) |
role_name | String | 角色名 |
Level | int | 角色名 |
Fight | String | 角色战力,后续扩展使用 |
listener | PushLevelListener | 获取推送结果的监听 |
用法:
GYSdk.pushLevel(this, uId, 1, "server_name", 1, "role_name", 11, "fight", new PushLevelListener() {
@Override
public void success() {
}
@Override
public void fail(String msg) {
}
});
13.添加未满18岁添加“防沉迷提醒”,并将用户身份通知cp (sdkV4.0.6以上已废弃,直接在loginsuccess获取)
想要接入防沉迷机制可在loginsuccess(UserInfo userinfo)获取
is_adult 是否成年 1: 成年,0:未成年
real_verified :1 表示已经实名认证过 0表示需要实名认证
/**
* 防沉迷的回调,接入方可根据"is_adult"来判断,实现业务逻辑
* {"status":"success","email":"","mobile":"","real_name":"","id_card":"","real_verified":1,"is_adult":0}
* is_adult 是否成年 1: 成年,0:未成年
* real_verified :1 表示已经实名认证过 0表示需要实名认证
*/
@Override
public void loginBindInfo(String info) {
//手动解析is_adult字段进行判断是否需要开启防沉迷
Log.d("info=======",info);
}
注意:
(1) loginBindInfo()在登陆成功的时候就会响应回调,接入方可根据解析"is_adult"来判断是否需要开启防沉迷。
(2) 接入方有可能开启防沉迷弹框以后,需要进行实名认证,则需要手动调用:
GYSdk.Realnameauthentication(getApplicationContext());
(3)该Realnameauthentication()方法回调如下:
@Override
public void RealnameSuccess(String arg0) {
Log.d("info=======",arg0);
}
(4) 如果接入方开启防沉迷,而不需要实名认证,则可忽略(2)第二步,回调就不会触发。
14.手游助手app打开游戏直接获取登录
调用方法:
GYSdk.startFromAppData(this);
注意事项:
1.startFromAppData() 在init()方法之后调用。
2.确定在init()方法之后,放在程序入口调用。
3.在游戏程序入口添加:
android:exported="true"
android:launchMode="singleTop"
如图所示:
yhx.png15.清理工作
当应用退出时,要进行内存的清理工作:
GYSdk.clear();
结束语
重要事说三遍:
1.(接入过程中如出现报错闪退,崩溃等问题,请第一时间查看下方常见问题汇总)
请参考2144SDKDemo
请参考2144SDKDemo
请参考2144SDKDemo
2.SDK所有调用的方法里面的String类型实参,末尾不要带有特殊字符(如:换行符,或空格等)。
3.SDK 方法默认有onSuccess()成功和onFail()失败的回调方法,onfail()默认不做任何处理,接入方为了方便测试数据,或捕获异常,可以自行处理(如 Toast ,或Log等)。
3.对于接入过SDK来说,在需要升级SDK版本的时候,注意不需要把之前的jar .so库全都删除再替换,(没必要)可以参照demo里面进行替换或做对应的修改即可。
--------------------------常见问题汇总-------------------------
对接sdk当中会出现一些不知名的问题。请联系我们处理问题的同时,提供您当前所操作的相关信息,并说明是Android 还是IOS操作系统
- (1) 对应操作接口的log输出和数据。(a.有网络请求的操作,这个必须提供,否则工作人员不清楚问题所在。 b.找不出log输出的cp方,请找cp方测试进行抓包,找出数据。)。
- (2) 问题描述及遇见问题的操作流程。
- (3) 对接sdk版本号。
- (4) 如有原生支付,请提供问题包对应的签名值。
问题一:针对Unity接入错误问题处理
出现问题场景:对接方在接入sdk后,调用(sdk登录的方法)报错。报错信息如下:
或:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable.mutate()'
对问题出现的解释:NullPointerException 空指针异常。
解决方案:
将2144SDK20180518V4.0.3_release.jar(核心jar)用解压缩软件以zip格式打开,将其中的assets文件夹拷贝到Unity的Plugins/Android文件夹下即可。(是assets文件夹,不是文件)
也就是把jar包里面assets目录下的资源文件放到Assets\Plugins\Android\assets目录下。
问题二:针对支付出现的问题(频率较高)
问题出现:如下图
sdK.png
对问题出现的解释:
出现这样的情况不要慌,这是正确的,一般都是因为商品id,或相关地址配置错误,核对不上而出现。
解决方案:
1.打印log,提供商品id传入的参数。
2.找运营和厂商核对商品id。
3.请检查相关配置。
问题三:针对高版本安卓手机出现权限弹框问题。如下图
sdK.png解释如下:(对这样的问题不做太多的解析)
sdk.png
2.这种动态权限是在6.x以上是需要主动申请,申请后的弹框上面的提示语是不能被修改的,在个别手机上,这种提示语可能出现重复,但实际上是不同的权限申请。导致让用户误认为重复了。这里说明下,在大多数安卓操作系统下,是不会出现这样的情况,提示语很很详细。
问题四:针对 华为8.0 接入SDK后出现的为题:如下图:
sdk.png解决方案:
在SDKActivity节点下添加 android:windowIsTranslucent="false"
<activity
android:name="com.guangyu.gamesdk.SDKActivity"
android:windowIsTranslucent="false"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustPan"
>
</activity>
问题5 .微信登录提示:“包名或签名不对”
如下图:
sdK.png
解决方案:
1.和运营对接微信开放平台申请的包名是否一致。(跟运营妹子确定)
2.在AndroidManifest.xml下是否配置了微信平台的appid 。配置如下
<meta-data
android:name="WXPAY_APPID"
android:value="wxd07a85bab8e1c908" />
3.注意应用的签名是否与微信开放平台是否一致。(跟运营妹子确定)。
6.关于sdk是否接入微信登录
问题:本游戏不接入sdk,但sdk有微信登录按钮怎么办?
回答:关于微信登录,是sdk里面动态配置,调用者无需另外处理。(运营可以动态关闭)
7. 关于studio 删除jar 报错问题(studio才有这种现象
)
对于使用studio熟练的童鞋,可以忽略这步
如下图:
QQ图片20190318181136.png问题描述:2144核心jar 在对接过程中,可能要将jar包覆盖。
解决方案:
QQ截图20190318183237.png
yhx.gif
8.关于微信支付android9.0webview报错
报错信息如下图:
sdk.jpg
解决方案:
原因是:
从Android 9.0(API级别28)开始,默认情况下禁用明文支持。因此http的url均无法在webview中加载。
解决办法:
在AndroidManifest.xml文件中的application标签添加android:usesCleartextTraffic="true"。
网友评论