安卓联运SDK接入文档
[TOC]
1. 概述
本文档主要描述android应用与SDK对接的技术过程。
平台为android应用提供用户注册、登录等服务。
2. 接入流程
- 获取接入参数:
appId
appKey
- 应用接入
- 联调测试
- 打包上架
参数说明:
| 项 | 描述 |--
|----- |
|appId | 平台为应用分配的应用ID,字符串型
|appKey | 平台为应用分配的验签密钥,字符串型
请妥善保管好参数,切勿外泄。
3. android版本兼容
支持2.3(含)以上的系统版本
4. 接入步骤
4.1 导入
libs
复制到到工程 libs/ 目录下。
res
复制到到工程 res/ 目录下。
assets
复制到到工程 assets/ 目录下。
4.2 配置AndroidManifest
在application节点下添加
<font color=#ff0000>注意: 一定记得要把程序入口intent-filter设置为这个MMSplashActivity"
</font>
<!-- 闪屏 *注意* 一定记得要把程序入口设置为这个 -->
<activity
android:name="com.maimaicy.sdk.ui.MMSplashActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<!-- *注意* 一定记得要把程序入口设置为这个 </font> -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!--微信配置 没接的可以不用复制-->
<activity android:name=".wxapi.WXEntryActivity" android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!--阿里支付SDK 没接的可以不用复制-->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<!--阿里SDK-->
添加所需要系统权限
<supports-screens android:anyDensity="true"
android:largeScreens="true" android:normalScreens="true"
android:resizeable="true" android:smallScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
<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.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.webkit.permission.PLUGIN"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
4.3 配置微信登录
把wxapi
文件夹放在包根目录 比如包名 com.xmen.gameroomwx
则放在com.xmen.gameroomwx.wxapi
在res
的values
目录下的 maimaiSetting
配置Weixin_app_id
如果为空则不采用微信登录
5.接口
5.1 初始化接口
描述: 在应用启动后调用SDK前,需要调用此接口对SDK进行初始化。
客户端接口:
-
项 描述 appId 平台为应用分配的应用ID,字符串型 appKey 平台为应用分配的验签密钥,字符串型 项 描述 appId 平台为应用分配的应用ID,字符串型 appKey 平台为应用分配的验签密钥,字符串型
- API:
在Application
生命周期调用以下接口:
onCreate
方法调用初始化接口
//初始化闪屏接口
MaiMaiAPI.getI().initSplashDeviceInfo(MainActivity.class(需要跳转的activity的class),"APPID", "APPKEY");
在activity
生命周期调用以下接口:
onCreate
方法调用初始化接口
//初始化接口
MaiMaiAPI.getI().initMaiMaiSDK(this, new InitCallBack() {
//游戏的加载操作都在这个回调以后去加载
@Override
public void onInitEnd() {
}
});
onStart
方法调用初始化接口
MaiMaiAPI.getI().onStart();
onStop
方法调用初始化接口
MaiMaiAPI.getI().onStop();
onPause
方法调用初始化接口
MaiMaiAPI.getI().onPause();
onResume
方法调用初始化接口
MaiMaiAPI.getI().onResume(Activity activity);
onDestroy
方法调用初始化接口
//如果游戏里面包含多个Activity 则不要每个都调用 在游戏退出的时候调用.用于释放SDK资源
MaiMaiAPI.getI().onDestroy();
onActivityResult
方法调用初始化接口
MaiMaiAPI.getI().onActivityResult(requestCode, resultCode, data)
onBackPressed
方法调用初始化接口
MaiMaiAPI.getI().onBackPressed();
onRestart
方法调用初始化接口
MaiMaiAPI.getI().onRestart();
onRequestPermissionsResult
方法调用初始化接口
MaiMaiAPI.getI().onRequestPermissionsResult(requestCode, permissions, grantResults);;
5.2 登录
描述:用于玩家进行登录操作。
完整时序:
login.png客户端接口:
- API:
MaiMaiAPI.getI().login();
- 参数列表:无
- 回调:
MaiMaiAPI.getI().setLoginCallBack(new LoginCallBack() {
@Override
public void onSuccess(User user) {
String uid = user.getUid();
String sign = user.getSign();
boolean isBindPhone = user.isBindPhone();
}
@Override
public void onFailure(String msg) {
}
@Override
public void onCancel() {
}
});
服务端登录验签接口:
- 接口地址:https://api.msdk.51738.com/open/validSign
- 请求方式:HTTPS POST
- 请求参数:
项 | 描述 | 备注 |
---|---|---|
uid | 用户id,由客户端接口在登录成功回调获取 | long型 |
sign | 登录签名,由客户端接口在登录成功回调获取 | 字符串型 |
- 返回结果:
验证通过
返回1
,验证失败
返回0
<font color=#ff0000>注意:为保证用户数据的真实性,请按上面的时序图到服务器作用户验证。</font>
5.3 登出(重要 必看)
描述:用于玩家退出登录。以下两个方法都会调用LoginOutCallBack回调
客户端接口:
- API:
该方法会仅仅是退出了登录不会调用登录窗口
该方法配合login()使用
在setLoginOutCallBack()的回调里面把背景设置为游戏加载页面以后调用login()
MaiMaiAPI.getI().loginOut();
该方法会重新调用登录窗口
MaiMaiAPI.getI().changeLogin();
- 返回:无
- 回调:
MaiMaiAPI.getI().setLoginOutCallBack(new LoginOutCallBack() {
@Override
public void onLoginOut() {
该回调比较重要 包括悬浮窗里也有切换帐号的选项 必须监听
把背景设置为游戏加载页面以后调用login()
}
});
** 注:游戏或SDK在切换账号时,需要游戏方在此回调中进行游戏退出的逻辑处理 **
5.4 支付
描述:用于玩家进行应用内的付费支付
完整时序:
客户端接口:
- API:
MaiMaiAPI.getI().pay(String subject, double money, String extraInfo, String serverId, String billNo);
-
项 描述 subject 商品信息,不可为空 money 支付金额(单位:元,精确到小数点后2位),不可为空 extraInfo 扩展参数(由客户端支付调用时传入,原样传回),可为空 serverId 服务器标识(由客户端支付调用时传入,原样传回),可为空 billNo 游戏订单号 参数说明:
项 描述 subject 商品信息,不可为空 money 支付金额(单位:元,精确到小数点后2位),不可为空 extraInfo 扩展参数(由客户端支付调用时传入,原样传回),可为空 serverId 服务器标识(由客户端支付调用时传入,原样传回),可为空 billNo 游戏订单号 -
回调:
MaiMaiAPI.getI().setPayCallBack(new PayCallBack() {
@Override
public void onSuccess() {
}
@Override
public void onFailure() {
}
@Override
public void onCancel() {
}
//针对微信支付无法获取到用户的支付状态会调用该方法
@Override
public void unknown() {
//可以在这里向服务器查询是否已经支付成功
}
});
服务端回调接口:
- 回调地址:由应用开发方将充值回调地址填写至后台中
- 回调方式:HTTP POST (表单POST,非JSON或流方式传入回调参数)
- 回调参数列表:
项 | 描述 | 备注 |
---|---|---|
tradeNo | 订单号 | 字符串型 |
uid | 玩家标识 | long型 |
orderNo | 应用方订单号 | 字符串型 |
amount | 成功支付金额 | 浮点型(单位:元) |
extraInfo | 应用方扩展参数 | 字符串型(由客户端支付调用时传入,原样传回) |
serverId | 服务器标识 | 字符串型(由客户端支付调用时传入,原样传回) |
sign | 签名参数 | 字符串型(签名算法见下段) |
- 回调结果:若应用开发方处理成功,则返回
ok
;若失败,则返回失败的具体错误消息内容
- sign参数算法:
md5(tradeNo + orderNo + uid + amount + appKey)
转小写
- sign参数示例:
先置条件:
appKey: 68234a4d18494ffda6873e53be5a7ec3
tradeNo:201703151623041003921
orderNo:6d34c508ad7f4471b08108399c5b5a8d
uid:2016221
amount:10.00
组合后的字符串:2017031516230410039216d34c508ad7f4471b08108399c5b5a8d201622110.0068234a4d18494ffda6873e53be5a7ec3
MD5加密转小写后:8bdad814e000a43d5c8f32093f947cb9
即sign的值为8bdad814e000a43d5c8f32093f947cb9
5.5 绑定手机号码
描述:用于玩家的手机号码绑定
客户端接口:
- API:
MaiMaiAPI.getI().bindPhon();
- 回调:
MaiMaiAPI.getI().setBindPhoneCallBack(new BindPhoneCallBack() {
@Override
public void onBindPhoneSuccess() {
}
@Override
public void onBindPhoneFailure() {
}
});
5.6 客服中心
描述:用于玩家打开客服中心,联系客服。
客户端接口:
- API
MaiMaiAPI.getI().serviceHome();
- 回调:无
6. 部分游戏的兼容处理
6.1 黑屏处理
描述:针对部分游戏 在切换后台的时候 在切换回来 屏幕会黑屏
客户端接口:
- API
在调用完initMaiMaiSDK() 以后执行以下方法
MaiMaiAPI.getI().disposeBlank();
- 回调:无
6.2 悬浮窗处理
描述:针对部分游戏 在游戏页面内不应该出现悬浮窗 可以调用隐藏显示API
客户端接口:
- API
显示
public void showFloatView()
隐藏
public void hideFloatView()
6.3 application创建方法
描述:针对部分游戏前端,不会创建application
1.创建一个类继承application
2.在AndroidManifest里的application节点配置name属性 引用刚刚配置的application
6.4 闪屏完还没进入游戏界面就闪退
1.如果闪屏完会崩溃, 请检查一下是不是AndroidManifest里没有给游戏配置activity,如果没有可以复制下面代码
<activity
android:name="游戏的activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="landscape">
</activity>
2.检查初始化接口
在Application
生命周期调用以下接口:
onCreate
方法调用初始化接口
//检查初始化闪屏接口的时候第一个参数是不是游戏的activity的class
MaiMaiAPI.getI().initSplashDeviceInfo(MainActivity.class(需要跳转的activity的class),"APPID", "APPKEY");
7. 注意事项
- 如果libs的依赖库有冲突请优先使用本SDK里的Libs否则可能会出现问题,或者联系技术
网友评论