Android游戏SDK对接
当前版本:389
更新时间:2024-05-16
更新内容:新增添加权限设置,代码如下: <!--targetSdkVersion>=30时必选,安卓11及以上获取系统应用信息需要此权限--> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
SDK下载

1接入说明

1.1、文档面向对象:

接入厂商的产品,技术人员,平台技术人员。

1.2、注意事项:

● 接口参数大小写敏感。

● request和response的编码格式为UTF-8。

1.3、名词定义

名称 说明
CP 游戏合作商
APP 接入平台的游戏
APP_ID 接入时由平台分配的游戏ID。
APP_KEY 接入时由当乐分配的游戏/应用密钥。
运营方 XX 运营商口袋则一般命名为KD KD_ _sdkib

1.4、版本更新说明

2018-07-18 v8.1:更新方式,替换jar包,替换assets下的文件

1、增加提交角色信息接口(详见demo):GameSDK.defaultSDK().submitRoleInfo(new RoleInfo("角色id", "角色名", "区服id", "区服名", 1, 1));

2、闪屏由SDK显示,接入时去掉闪屏,以免重复显示造成测试不通过

3、增加“android.permission.RECORD_AUDIO”权限检查,未配置的需要增加此权限,否则会导致初始化失败

4、支付参数去掉回调地址

2集成SDK

集成3733_SDK,配置清单文件AndroidMamifest.xml

2.1、步骤1,获取必要的参数

从平台处,获取以下参数,用于对接

参数 说明
app_id 游戏ID
app_key 游戏加密密钥
client_id SDK ID 标识此次对接demo的sdk
client_key SDKkey 此次对接demo的渠道key

2.2、步骤2,导入SDK

文档以Eclipse开发环境为例

方式一:
导入jar包:

右键项目工程,在弹出的菜单中最下面的Properties选项(或直接按Alt+Enter键),打开如图所示界面:

按照红圈依次选择Java Build Path------>Libraries--------->Add External JARs,在弹出的文件选择器中选择demo/libs目录下的所以jar文件,然后点击确定即可

方式二:

在文件管理器中打开demo/libs目录,选中所有jar包及armeabi文件夹,然后在工程目录的libs下粘贴即可导入jar包及so

导入so:

在文件管理器中打开demo/libs目录,选中所有armeabi文件夹,复制,然后在工程目录的libs下粘贴即可

导入assets文件:

在文件管理器中打开demo/assets目录,选中所有文件/文件夹,复制,然后在工程目录的assets下粘贴即可

2.3、步骤3,配置AndroidManifest.xml

注:若有误差,以Demo为准

配置权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc.hce" />

<uses-permission android:name="android.permission.SEND_SMS" />
<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.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!--targetSdkVersion>=30时必选,安卓11及以上获取系统应用信息需要此权限-->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
            

配置Activity:

<!--3733 SDK -->
<activity
    android:name="com.c3733.sdk.SDKActivity"
    android:configChanges="screenSize|orientation|keyboard"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" >
</activity>      
<!-- 现在支付 -->
<activity
    android:name="com.ipaynow.plugin.activity.PayMethodActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="false"
    android:screenOrientation="behind"
    android:theme="@android:style/Theme.Dialog" >
</activity>
<activity
   android:name="com.ipaynow.plugin.inner_plugin.prepay_plugin.activity.PrePayActivity"
   android:screenOrientation="behind"
   android:windowSoftInputMode="adjustResize" >
</activity>
<activity
  android:name="com.ipaynow.plugin.inner_plugin.prepay_plugin.activity.NotifyActivity"
  android:configChanges="orientation|screenSize"
  android:exported="false"
  android:screenOrientation="behind" >
</activity>
<activity
android:name="com.ipaynow.plugin.inner_plugin.wechatwp.activity.WeChatNotifyActivity"
  android:configChanges="keyboardHidden|navigation|orientation|screenSize"
  android:exported="false"
  android:launchMode="singleTop"
  android:screenOrientation="behind"
  android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity
   android:name="com.ipaynow.plugin.presenter.PayMethodActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:exported="false"
   android:screenOrientation="behind"
   android:theme="@android:style/Theme.Dialog" >
</activity>

<!-- 微信插件版支付 -->
<activity
   android:name="com.ipaynow.plugin.inner_plugin.wechatpg.activity.WXPayActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:launchMode="singleTop"
   android:screenOrientation="behind"
   android:theme="@android:style/Theme.Dialog" />

<!-- 支付宝 -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity
     android:name="com.alipay.sdk.auth.AuthActivity"
     android:configChanges="orientation|keyboardHidden|navigation|screenSize"
     android:exported="false"
     android:screenOrientation="behind" >
</activity>

<!-- 微付通支付activity -->
<activity
      android:name="com.switfpass.pay.activity.QQWapPayWebView"
      android:screenOrientation="behind"
      android:theme="@android:style/Theme.Translucent.NoTitleBar" />                          
            

配置参数:

参数也可使用代码配置,具体见Demo

<meta-data
    android:name="HS_APPID"
    android:value="1" />
<meta-data
    android:name="HS_CLIENTID"
    android:value="1" />
<meta-data
    android:name="HS_CLIENTKEY"
    android:value="36ba570b88802fd382d65c627e15f697" />
<meta-data
    android:name="HS_AGENT"
    android:value="default" />           
            

2.4、步骤4,SDK业务接口

SDK接口均在UI线程中调用,具体参见Demo

2.4.1、初始化(必须接入
  GameSDK.defaultSDK().init(MainActivity.this, new OnInitListener() {
  
    @Override
    public void initSuccess() {
      // 初始化完成,可在此调用登录
    }
              
    @Override
    public void initFailure(String msg) {
      // 初始化失败
      Log.e("Demo", "初始化失败:" + msg);
    }
  });              
            
2.4.2、登录(必须接入
  GameSDK.defaultSDK().login(MainActivity.this, new OnLoginListener() {

    @Override
    public void loginSuccess(LoginCallback callback) {
      String mem_id = callback.mem_id;
      String token = callback.user_token;
      // 登录成功
    }

    @Override
    public void loginError(String msg) {
      // 登录失败
      Log.e("Demo", "登录失败:" + msg);
    }

    @Override
    public void loginCancel() {
    // 取消登录,从登录界面返回
    }
  });              
            
2.4.3、退出登录监听

该接口为玩家从SDK内退出登录的通知事件

  GameSDK.defaultSDK()
  .registerOnLogoutNotifyListener(new OnLogoutNotifyListener() {
  
        @Override
        public void onLogout() {
          // 用户在SDK内退出登录,此处游戏做退出登录相关操作
        }
  });              
            
2.4.4、支付(如开计费必须接入
  PayParams params = new PayParams("1", 0.01, "1", "商品名称-金币", 商品描述-10金币", "扩展参数");
  GameSDK.defaultSDK().pay(this, params, new OnPaymentListener() {
  
      @Override
      public void paySuccess(PaymentInfo info) {
        // 支付成功
        double amount = info.amount;
        String msg = info.msg;
      }
  
      @Override
      public void payError(String msg) {
        // 支付失败
        Log.e("Demo", "支付失败:" + msg);
      }
  
      @Override
      public void payCancel() {
        // 取消支付
      }
  });              
            
2.4.5、退出登录

游戏切换账号时调用

  GameSDK.defaultSDK().logout();
            
2.4.6、退出(必须接入

在游戏界面按返回键时调用

  @Override
  public void onBackPressed() {
    GameSDK.defaultSDK().exit(this, new OnExitListener() {
    
      @Override
      public void onExit() {
                 //退出游戏,一些退出的相关操作可以放在这里执行			}
      
      @Override
      public void onBackGame() {
        //返回游戏			}
    });
  }              
            
2.4.7、提交角色信息(必须接入

手动接入:

提交玩家在游戏内的角色信息,提交时机:在玩家创建角色或角色等级发生变化或更改角色名时调用

  /*
  * 提交游戏角色信息,在创建角色和角色等级发生变化或更改角色名时调用
  * 
  * 参数说明:1:角色id,2:角色名,3:区服id,4:区服名,5:角色等级,6:角色创建时间,时间戳,单位秒,以服务端时间为准
  */
    GameSDK.defaultSDK().submitRoleInfo(new RoleInfo("角色id", "角色名", "区服id", "区服名", 1, 1));              
            

注:从此版本开始,不再提供浮球相关接口,由SDK内部控制

对接QuickSDK按下图

3SDK功能

3.1、获取SDK实例

GameSDK实例可通过GameSDK.defaultSDK()获取,SDK的一些功能需要再等在初始化完成之后才能使用,初始化完成之后不可再次初始化。

3.2、初始化

接口定义:

public void init(Activity context, OnInitListener listener)

参数说明:

参数名 类型 参数说明
context Activity Activity对象,确保为游戏主Activity
listener OnInitListener 初始化接口的回调

3.3、登录

接口定义:

public void login(Activity act, OnLoginListener listener)

参数说明:

参数名 类型 参数说明
act Activity Activity对象,确保为游戏主Activity
listener OnInitListener 登录接口的回调

3.4、登录回调说明

loginSuccess()

回调参数说明:

参数名 类型 参数说明
mem_id string 登录成功后,用户的mem_id(唯一)

loginError()

参数名 类型 参数说明
msg string 错误说明

3.5、支付

接口定义:

public void pay(Activity act, PayParams params, OnPaymentListener listener)

参数说明:

参数名 类型 参数说明
act Activity Activity对象,确保为游戏主Activity
params PayParams 支付参数
listener OnPaymentListener 支付接口回调

支付参数:

参数名 类型 参数说明
roleid String 角色id
money double 金额,不低于0.01
serverid String 服务器id
productname String 商品名称
productdesc String 商品描述
attach String 扩展参数
pay params String 额外的支付参数json字符串

3.6、支付回调

paySuccess()

回调参数说明:

参数名 类型 参数说明
amount double 支付金额
msg double 支付描述

payError()

回调参数说明:

参数名 类型 参数说明
msg String 支付失败说明

3.7、退出框

接口定义:

public void exit(Activity act, OnExitListener listener)

参数说明:

参数名 类型 参数说明
act Activity Activity对象,确保为游戏主Activity
listener OnExitListener 退出框回调

回调说明:

onExit():玩家点击“确认退出”的回调,在这里根据需求做相关操作

onBackGame():玩家点击“返回游戏”的回调

3.8、提交角色信息

接口定义:

public void submitRoleInfo(RoleInfo params)

参数说明:

参数名 类型 参数说明
params RoleInfo 角色信息

角色信息:

参数名 类型 参数说明
roleId String 角色id
roleName String 角色名
serverId String 区服id
serverName String 区服名
roleLevel long 角色等级
createTime long 角色创建时间,以服务端时间为准

4温馨提示

1.由于 SDK 的同步系统暂时并不能绝对保证一个订单只同步一次(订单本身是唯一的),因此建议合作商在发放游戏虚拟货币的时候做一次订单的判断,避免同一订单多次发放

2.总结运营阶段的经验,SDK 发现支付合作商有时候一个订单会同步两次状态, 第一次为失败,第二次成功(实际为成功)。因此建议合作商接收 SDK 同步的订单时处理一下此类情况,例如:系统考虑支持同一个订单,第一次同步失败状态,第二次同步成功状态,系统照常发放游戏币

5运行环境

● 目前该 sdk 只支持 Android 2.2 或以上版本的手机系统

● 手机必须处于网络环境中,2.5G/3G/WIFI 等等

6混淆

3733_SDK 包是以 jar 包文件提供给用户的,其中 jar 包已经半混淆状态, 您在混淆自己 APK 包的时候请不要将 3733SDK 的 jar 包一起混淆,因为里面有自定义UI控件,若被混淆后会因为无法找到相关类而抛异常。您可以在用ant 构 建混淆包的 build.xml里面对应位置或者在 proguard.cfg里加入:-libraryjars libs/3733_sdk.jar 以避免3733SDK 的相关的 jar 包被混淆。