1

作者: 青砖绿树 | 来源:发表于2017-08-27 18:19 被阅读0次

安卓联运SDK接入文档

[TOC]

1. 概述

本文档主要描述android应用与SDK对接的技术过程。
平台为android应用提供用户注册、登录等服务。

2. 接入流程

  1. 获取接入参数:appId appKey
  2. 应用接入
  3. 联调测试
  4. 打包上架

参数说明:

| 项 | 描述 |--
|----- |
|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

login.png

resvalues目录下的 maimaiSetting 配置Weixin_app_id 如果为空则不采用微信登录

login.png

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() {

            }
        });

服务端登录验签接口:

描述 备注
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 支付

描述:用于玩家进行应用内的付费支付
完整时序:

pay.png

客户端接口:

  • 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否则可能会出现问题,或者联系技术

相关文章

  • 1▪1▪1▪1▪1

    今天是国际劳动节,出门看人头,上路遇堵车,处处挤破头,急哭也停不下车。 不如歇了吧 ...

  • 1+1+1…+1=1

    对“一”的理解: 赠人玫瑰,不仅仅是手留余香。 利益他人,实际上也疗愈了自己。 利他、利己,如此往复循环, 最终利...

  • (-1)×(-1)= 1

    数学家经过很长一段时间才认识到(-1)×(-1)= 1是不能被证明的(即使大数学家欧拉曾给出不能令人信服的...

  • 1-2-1-1-1

    【下马请罪】 子龙下马,向张飞跪地请罪道:“张将军,一时失手……”话未停,便被张飞一矛刺了个透心凉。子龙堵着胸口汩...

  • 1 1:1 1(原创小说)

    闪回:那天她…… 当时,我确实听到了那个声音,可如今却怎么也记不清了。 掉下来了。 我觉得,那一刻...

  • 《1+1=1-1》

    十一月十一日晚,致X小姐。 十月初九, 一个人购物的孤独, 你谈起, 月光下轧过的马路, 金钱带不来满足, 忙忙碌...

  • 1+1=-1

    结婚育子这几年,在磕磕碰碰中一路走来,才恍然大悟,自己真正的成长,始于育儿。 婚前是父母的公主,虽说家境贫困,却得...

  • 1+1<1

    也许有人看到我的标题就会来质疑我,说我怎么连最简单的数学都不会。1+1=2>1啊,这么简单的算数题,我怎会不知?但...

  • 1+1=-1

    看到他人发表文章,我也有点手痒痒了~这是接着上回文章的下半部分,有点长,没人看到就好了︿︿ 这个第二件小事的主题就...

  • 1⃣️0⃣️1⃣️1⃣️

    昨晚下了雨,早上雾蒙蒙。如画的烟雨曲江我们无暇欣赏,今天小伙伴都去了商场收资源,所以比较集中,真正起到了轰炸效果,...

网友评论

      本文标题:1

      本文链接:https://www.haomeiwen.com/subject/fpkidxtx.html