安卓聯(lián)運(yùn)SDK接入文檔
[TOC]
1. 概述
本文檔主要描述android應(yīng)用與SDK對(duì)接的技術(shù)過(guò)程。
平臺(tái)為android應(yīng)用提供用戶注冊(cè)、登錄等服務(wù)。
2. 接入流程
- 獲取接入?yún)?shù):
appId
appKey
- 應(yīng)用接入
- 聯(lián)調(diào)測(cè)試
- 打包上架
參數(shù)說(shuō)明:
| 項(xiàng) | 描述 |--
|----- |
|appId | 平臺(tái)為應(yīng)用分配的應(yīng)用ID,字符串型
|appKey | 平臺(tái)為應(yīng)用分配的驗(yàn)簽密鑰,字符串型
請(qǐng)妥善保管好參數(shù)已卷,切勿外泄梧田。
3. android版本兼容
支持2.3(含)以上的系統(tǒng)版本
4. 接入步驟
4.1 導(dǎo)入
libs
復(fù)制到到工程 libs/ 目錄下。
res
復(fù)制到到工程 res/ 目錄下。
assets
復(fù)制到到工程 assets/ 目錄下裁眯。
4.2 配置AndroidManifest
在application節(jié)點(diǎn)下添加
<font color=#ff0000>注意: 一定記得要把程序入口intent-filter設(shè)置為這個(gè)MMSplashActivity"
</font>
<!-- 閃屏 *注意* 一定記得要把程序入口設(shè)置為這個(gè) -->
<activity
android:name="com.maimaicy.sdk.ui.MMSplashActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<!-- *注意* 一定記得要把程序入口設(shè)置為這個(gè) </font> -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!--微信配置 沒(méi)接的可以不用復(fù)制-->
<activity android:name=".wxapi.WXEntryActivity" android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!--阿里支付SDK 沒(méi)接的可以不用復(fù)制-->
<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-->
添加所需要系統(tǒng)權(quán)限
<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 初始化接口
描述: 在應(yīng)用啟動(dòng)后調(diào)用SDK前鹉梨,需要調(diào)用此接口對(duì)SDK進(jìn)行初始化。
客戶端接口:
-
項(xiàng) 描述 appId 平臺(tái)為應(yīng)用分配的應(yīng)用ID穿稳,字符串型 appKey 平臺(tái)為應(yīng)用分配的驗(yàn)簽密鑰存皂,字符串型 項(xiàng) 描述 appId 平臺(tái)為應(yīng)用分配的應(yīng)用ID,字符串型 appKey 平臺(tái)為應(yīng)用分配的驗(yàn)簽密鑰逢艘,字符串型
- API:
在Application
生命周期調(diào)用以下接口:
onCreate
方法調(diào)用初始化接口
//初始化閃屏接口
MaiMaiAPI.getI().initSplashDeviceInfo(MainActivity.class(需要跳轉(zhuǎn)的activity的class),"APPID", "APPKEY");
在activity
生命周期調(diào)用以下接口:
onCreate
方法調(diào)用初始化接口
//初始化接口
MaiMaiAPI.getI().initMaiMaiSDK(this, new InitCallBack() {
//游戲的加載操作都在這個(gè)回調(diào)以后去加載
@Override
public void onInitEnd() {
}
});
onStart
方法調(diào)用初始化接口
MaiMaiAPI.getI().onStart();
onStop
方法調(diào)用初始化接口
MaiMaiAPI.getI().onStop();
onPause
方法調(diào)用初始化接口
MaiMaiAPI.getI().onPause();
onResume
方法調(diào)用初始化接口
MaiMaiAPI.getI().onResume(Activity activity);
onDestroy
方法調(diào)用初始化接口
//如果游戲里面包含多個(gè)Activity 則不要每個(gè)都調(diào)用 在游戲退出的時(shí)候調(diào)用.用于釋放SDK資源
MaiMaiAPI.getI().onDestroy();
onActivityResult
方法調(diào)用初始化接口
MaiMaiAPI.getI().onActivityResult(requestCode, resultCode, data)
onBackPressed
方法調(diào)用初始化接口
MaiMaiAPI.getI().onBackPressed();
onRestart
方法調(diào)用初始化接口
MaiMaiAPI.getI().onRestart();
onRequestPermissionsResult
方法調(diào)用初始化接口
MaiMaiAPI.getI().onRequestPermissionsResult(requestCode, permissions, grantResults);;
5.2 登錄
描述:用于玩家進(jìn)行登錄操作旦袋。
完整時(shí)序:
客戶端接口:
- API:
MaiMaiAPI.getI().login();
- 參數(shù)列表:無(wú)
- 回調(diào):
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() {
}
});
服務(wù)端登錄驗(yàn)簽接口:
- 接口地址:https://api.msdk.51738.com/open/validSign
- 請(qǐng)求方式:HTTPS POST
- 請(qǐng)求參數(shù):
項(xiàng) | 描述 | 備注 |
---|---|---|
uid | 用戶id,由客戶端接口在登錄成功回調(diào)獲取 | long型 |
sign | 登錄簽名它改,由客戶端接口在登錄成功回調(diào)獲取 | 字符串型 |
- 返回結(jié)果:
驗(yàn)證通過(guò)
返回1
疤孕,驗(yàn)證失敗
返回0
<font color=#ff0000>注意:為保證用戶數(shù)據(jù)的真實(shí)性,請(qǐng)按上面的時(shí)序圖到服務(wù)器作用戶驗(yàn)證央拖。</font>
5.3 登出(重要 必看)
描述:用于玩家退出登錄祭阀。以下兩個(gè)方法都會(huì)調(diào)用LoginOutCallBack回調(diào)
客戶端接口:
- API:
該方法會(huì)僅僅是退出了登錄不會(huì)調(diào)用登錄窗口
該方法配合login()使用
在setLoginOutCallBack()的回調(diào)里面把背景設(shè)置為游戲加載頁(yè)面以后調(diào)用login()
MaiMaiAPI.getI().loginOut();
該方法會(huì)重新調(diào)用登錄窗口
MaiMaiAPI.getI().changeLogin();
- 返回:無(wú)
- 回調(diào):
MaiMaiAPI.getI().setLoginOutCallBack(new LoginOutCallBack() {
@Override
public void onLoginOut() {
該回調(diào)比較重要 包括懸浮窗里也有切換帳號(hào)的選項(xiàng) 必須監(jiān)聽(tīng)
把背景設(shè)置為游戲加載頁(yè)面以后調(diào)用login()
}
});
** 注:游戲或SDK在切換賬號(hào)時(shí),需要游戲方在此回調(diào)中進(jìn)行游戲退出的邏輯處理 **
5.4 支付
描述:用于玩家進(jìn)行應(yīng)用內(nèi)的付費(fèi)支付
完整時(shí)序:
客戶端接口:
- API:
MaiMaiAPI.getI().pay(String subject, double money, String extraInfo, String serverId, String billNo);
-
項(xiàng) 描述 subject 商品信息鲜戒,不可為空 money 支付金額(單位:元专控,精確到小數(shù)點(diǎn)后2位),不可為空 extraInfo 擴(kuò)展參數(shù)(由客戶端支付調(diào)用時(shí)傳入遏餐,原樣傳回)伦腐,可為空 serverId 服務(wù)器標(biāo)識(shí)(由客戶端支付調(diào)用時(shí)傳入,原樣傳回)境输,可為空 billNo 游戲訂單號(hào) 參數(shù)說(shuō)明:
項(xiàng) 描述 subject 商品信息蔗牡,不可為空 money 支付金額(單位:元,精確到小數(shù)點(diǎn)后2位)嗅剖,不可為空 extraInfo 擴(kuò)展參數(shù)(由客戶端支付調(diào)用時(shí)傳入辩越,原樣傳回),可為空 serverId 服務(wù)器標(biāo)識(shí)(由客戶端支付調(diào)用時(shí)傳入信粮,原樣傳回)黔攒,可為空 billNo 游戲訂單號(hào) 回調(diào):
MaiMaiAPI.getI().setPayCallBack(new PayCallBack() {
@Override
public void onSuccess() {
}
@Override
public void onFailure() {
}
@Override
public void onCancel() {
}
//針對(duì)微信支付無(wú)法獲取到用戶的支付狀態(tài)會(huì)調(diào)用該方法
@Override
public void unknown() {
//可以在這里向服務(wù)器查詢是否已經(jīng)支付成功
}
});
服務(wù)端回調(diào)接口:
- 回調(diào)地址:由應(yīng)用開(kāi)發(fā)方將充值回調(diào)地址填寫(xiě)至后臺(tái)中
- 回調(diào)方式:HTTP POST (表單POST,非JSON或流方式傳入回調(diào)參數(shù))
- 回調(diào)參數(shù)列表:
項(xiàng) | 描述 | 備注 |
---|---|---|
tradeNo | 訂單號(hào) | 字符串型 |
uid | 玩家標(biāo)識(shí) | long型 |
orderNo | 應(yīng)用方訂單號(hào) | 字符串型 |
amount | 成功支付金額 | 浮點(diǎn)型(單位:元) |
extraInfo | 應(yīng)用方擴(kuò)展參數(shù) | 字符串型(由客戶端支付調(diào)用時(shí)傳入强缘,原樣傳回) |
serverId | 服務(wù)器標(biāo)識(shí) | 字符串型(由客戶端支付調(diào)用時(shí)傳入督惰,原樣傳回) |
sign | 簽名參數(shù) | 字符串型(簽名算法見(jiàn)下段) |
- 回調(diào)結(jié)果:若應(yīng)用開(kāi)發(fā)方處理成功,則返回
ok
旅掂;若失敗赏胚,則返回失敗的具體錯(cuò)誤消息內(nèi)容
- sign參數(shù)算法:
md5(tradeNo + orderNo + uid + amount + appKey)
轉(zhuǎn)小寫(xiě)
- sign參數(shù)示例:
先置條件:
appKey: 68234a4d18494ffda6873e53be5a7ec3
tradeNo:201703151623041003921
orderNo:6d34c508ad7f4471b08108399c5b5a8d
uid:2016221
amount:10.00
組合后的字符串:2017031516230410039216d34c508ad7f4471b08108399c5b5a8d201622110.0068234a4d18494ffda6873e53be5a7ec3
MD5加密轉(zhuǎn)小寫(xiě)后:8bdad814e000a43d5c8f32093f947cb9
即sign的值為8bdad814e000a43d5c8f32093f947cb9
5.5 綁定手機(jī)號(hào)碼
描述:用于玩家的手機(jī)號(hào)碼綁定
客戶端接口:
- API:
MaiMaiAPI.getI().bindPhon();
- 回調(diào):
MaiMaiAPI.getI().setBindPhoneCallBack(new BindPhoneCallBack() {
@Override
public void onBindPhoneSuccess() {
}
@Override
public void onBindPhoneFailure() {
}
});
5.6 客服中心
描述:用于玩家打開(kāi)客服中心,聯(lián)系客服商虐。
客戶端接口:
- API
MaiMaiAPI.getI().serviceHome();
- 回調(diào):無(wú)
6. 部分游戲的兼容處理
6.1 黑屏處理
描述:針對(duì)部分游戲 在切換后臺(tái)的時(shí)候 在切換回來(lái) 屏幕會(huì)黑屏
客戶端接口:
- API
在調(diào)用完initMaiMaiSDK() 以后執(zhí)行以下方法
MaiMaiAPI.getI().disposeBlank();
- 回調(diào):無(wú)
6.2 懸浮窗處理
描述:針對(duì)部分游戲 在游戲頁(yè)面內(nèi)不應(yīng)該出現(xiàn)懸浮窗 可以調(diào)用隱藏顯示API
客戶端接口:
- API
顯示
public void showFloatView()
隱藏
public void hideFloatView()
6.3 application創(chuàng)建方法
描述:針對(duì)部分游戲前端,不會(huì)創(chuàng)建application
1.創(chuàng)建一個(gè)類繼承application
2.在AndroidManifest里的application節(jié)點(diǎn)配置name屬性 引用剛剛配置的application
6.4 閃屏完還沒(méi)進(jìn)入游戲界面就閃退
1.如果閃屏完會(huì)崩潰, 請(qǐng)檢查一下是不是AndroidManifest里沒(méi)有給游戲配置activity,如果沒(méi)有可以復(fù)制下面代碼
?
<activity
android:name="游戲的activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="landscape">
</activity>
2.檢查初始化接口
在Application
生命周期調(diào)用以下接口:
onCreate
方法調(diào)用初始化接口
//檢查初始化閃屏接口的時(shí)候第一個(gè)參數(shù)是不是游戲的activity的class
MaiMaiAPI.getI().initSplashDeviceInfo(MainActivity.class(需要跳轉(zhuǎn)的activity的class),"APPID", "APPKEY");
7. 注意事項(xiàng)
- 如果libs的依賴庫(kù)有沖突請(qǐng)優(yōu)先使用本SDK里的Libs否則可能會(huì)出現(xiàn)問(wèn)題,或者聯(lián)系技術(shù)