美文网首页我爱编程
2144Android SDK对接说明文档

2144Android SDK对接说明文档

作者: Android砖家 | 来源:发表于2018-05-26 23:17 被阅读0次

    准备前工作

    对于之前接入过2144SDK的平台先删除旧版SDK所有jar文件 、so文件以及依赖项目。具体如下:

    • 1 删除 2144*.jar、BI.jar 等2144平台的jar包。
    • 2 删除 GuangYuSDK_lib 这个依赖项目,或者是GuangYuSDK_lib.jar (没有的话可以忽略)。
    • 3 删除 如下图所示的jar和so等资源:
    sdk.png

    注:以上操作只针对之前接过旧版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.png

    15.清理工作

    当应用退出时,要进行内存的清理工作:

     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登录的方法)报错。报错信息如下:

    sdk.png
    或:
    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"。

    sdk.png
    特别鸣谢2144技术团队。如有技术问题,直接留言反馈,欢迎怼我!!!
    sdk.png

    相关文章

      网友评论

        本文标题:2144Android SDK对接说明文档

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