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

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