帮助文档

SDK下载

1接入说明

1.1、文档面向对象:

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

1.2、注意事项:

● 接口参数大小写敏感。

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

1.3、名词定义

名称 说明
CP 游戏合作商
APP 接入平台的游戏
APP_ID 接入时由平台分配的游戏ID。
运营方 运营商sdk_lib

2025-4-14 v1.1.0:更新方式,见demo中readme.md 文件

1、添加支付校验。

2、更新巨量版本。

2025-1-17 v1.0.21:更新方式,在1.0.21的基础上 替换GMTBOX.aar zhiqu_sdk_v1.0.21

1、更新加速版本。

2025-1-6 v1.0.20:更新方式,重新对接

1、更新ui。

2、更新网络请求。

3、更新加速版本。

2024-10-10 v1.0.15:更新方式,重新对接

1、更新加速。

2024-8-28 v1.0.14:更新方式,重新对接

1、更新抖音快手sdk。

2024-7-11 v1.0.12:更新方式,重新对接

1、添加群聊。

2023-12-26 v1.0.9:更新方式,重新对接

1、游戏盒子菜单是否显示由接口控制。

2023-12-20 v1.0.8:更新方式,重新对接

1、修复云游戏环境账号记录问题。

2、下载对话框接口控制显示及悬浮窗右上角显示礼包。

2023-11-1 v1.0.7:更新方式,重新对接

1、修复云游戏环境账号记录问题。

2、加速接口控制显示及最大速度。

2023-10-11 v1.0.6:更新方式,重新对接

1、添加一键登录功能;

2、加速UI优化及加速初始化优化。

3、修改未开服游戏限制到小号页面;余额为0也展示余额支付通道。

2023-09-08 v1.0.5:更新方式,重新对接

1、初始化sdk后默认关闭加速游戏功能;

2、优化支付界面。

2023-09-04 v1.0.4:更新方式,重新对接

1、增加加速隐藏功能,优化支付界面;

2023-06-19 v1.0.3:更新方式,重新对接

1、增加折前券,升级加速;

2023-06-19 v1.0.2:更新方式,可在v1.0.0基础上替换为aiqu_sdk_v1.0.1

1、增加抵扣券功能;

2023-06-19 v1.0.1:更新方式,按照对接文档和demo,对接

1、sdk第一次上线;

2集成SDK

集成0.01折SDK,配置清单文件AndroidMamifest.xml

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

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

参数 说明
WANCMS_GAMEID 游戏ID
WANCMS_APPID 应用ID
WANCMS_AGENT 此次对接demo的渠道名(默认cps001)
Hum_Id 抖音推广Id

2.2、步骤2,导入SDK

文档以AndroidStudio开发环境为例

导入jar包:

将库文件导入libs文件夹下(库文件版本号可能和图片不一致,具体以demo中的库版本号为准),打开如图所示界面:

在app gradle下配置

packagingOptions {
doNotStrip "*/armeabi-v7a/*.so"
doNotStrip "*/x86/*.so"
doNotStrip "*/arm64-v8a/*.so"
doNotStrip "*/x86_64/*.so"
doNotStrip "armeabi.so"

doNotStrip '*/armeabi-v7a/libsygamehelper.cy.so'
doNotStrip '*/arm64-v8a/libsygamehelper.cy.so'
}

注:切勿忘记配置,否则会导致游戏闪退

如下图

2.3、步骤3,配置AndroidManifest.xml

注:如果游戏工程android版本大于等于28则manifest 文件Application段内加上这句代码android:usesCleartextTraffic="true" 如果低于28则不要加,否则游戏工程会报错编译不成,如果application icon name冲突,请加上tools:replace="android:icon,android:name"若有误差,以Demo为准

配置参数:

具体见Demo

<meta-data
    android:name="WANCMS_GAMEID"
    android:value="1" />
    <meta-data
    android:name="WANCMS_APPID"
    android:value="1" />
<meta-data
    android:name="WANCMS_AGENT"
    android:value="cps001" />
<meta-data
    android:name="WANCMS_DEBUG"
    android:value="1" />
<meta-data
    android:name="Hum_Id"
    android:value="316328" /> 

2.4、步骤4,SDK业务接口

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

2.4.1、预初始化(在弹出隐私政策前调用)
首先进行WancmsSDKManager预初始化:在游戏工程Application中调用WancmsSDKManager.preInit(this);          
            
2.4.2、弹出隐私权限,0.01折sdk的《用户协议》和 《隐私政策》,《儿童个人信息保护规则及监护人须知》和《第三方服务共享清单》,申请Manifest.permission.WRITE_EXTERNAL_STORAGE和Manifest.permission.READ_PHONE_STATE两个权限
研发需要复制0.01折sdk的《用户协议》和《隐私政策》到游戏的用户协议和隐私政策中,sdk的《用户协议》和《隐私政策》和申请权限都是让研发自行处理。
用户如果拒绝权限,务必保证再次启动游戏不再申请权限,打扰用户
这样做可以避免应用市场检测违规。请研发配合。0.01折sdk的其他业务接口必须在隐私弹窗后才能调用。
如果研发没有隐私弹窗可以调用sdk的,具体参考demo,调用DialogUtil.popAgreementView。
2.4.3、登录(必须接入,在弹出隐私弹窗后调用)
WancmsSDKManager.getInstance(MainActivity.this).showLogin(new OnLoginListener() {
        @Override
        public void loginSuccess(LogincallBack logincallback) {
        showFloatView(); //sdk显示悬浮窗
          Toast.makeText(
            getApplication(),
            "登录成功\nsign:" + logincallback.sign + " logintime:"
            + logincallback.logintime + " username:"
            + logincallback.username, Toast.LENGTH_LONG)
            .show();
        }

        @Override
        public void loginError(LoginErrorMsg errorMsg) {
          Toast.makeText(getApplication(), errorMsg.msg,
              Toast.LENGTH_LONG).show();
        }
      });            
            
2.4.4、sdk显示悬浮窗(必须接入,在登录成功后调用)

参数是切换账号监听接口,在sdk悬浮窗内切换账号按钮被用户点击时回调

private void showFloatView() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
        WancmsSDKManager.getInstance(MainActivity.this).showFloatView(new OnLogoutListener() {
          @Override
          public void logoutSuccess(LogoutcallBack logoutncallback) {
            Toast.makeText(getApplication(), "用户" + logoutncallback.username + "退出登录", Toast.LENGTH_LONG).show();
            doLogin();
          }

          @Override
          public void logoutError(LogoutErrorMsg errorMsg) {

          }
        });
      }
    }, 1000);
  }      
            
2.4.6、支付(如开计费必须接入,在弹出隐私弹窗后调用)
// 构建sign md5(appkey+gameid+orderid+roleid+username)
// sign值若传 "" 或者不传,则不进行支付二次校验
String sign = "";
WancmsSDKManager.getInstance(MainActivity.this).showPay("caobawang158", money, "1", "杀人书",
          "金币", "re45465", "",sign, new OnPaymentListener() {
            @Override
            public void paymentSuccess(
                PaymentCallbackInfo callbackInfo) {
              Toast.makeText(
              getApplication(),
              "充值金额数" + callbackInfo.money + " 消息提示:"
              + callbackInfo.msg,
              Toast.LENGTH_LONG).show();
            }

            @Override
            public void paymentError(PaymentErrorMsg errorMsg) {
              Toast.makeText(
              getApplication(),
              "充值失败:code:" + errorMsg.code
              + "  ErrorMsg:" + errorMsg.msg
              + "  预充值的金额:" + errorMsg.money,
              Toast.LENGTH_LONG).show();
            }
          });           
            
2.4.7、提交角色信息(必须接入,在弹出隐私弹窗后调用)

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

    try {
        JSONObject json = new JSONObject();
        json.put("time", "20170417");
        wancmssdkmanager.setRoleDate(this, "caobawang11", "草霸王", "100",
            "1", "wancms", json);
      } catch (JSONException e) {
        e.printStackTrace();
      }        
            
2.4.8、sdk回收资源(在游戏内切换账号,退出游戏场景调用)

调用场景是游戏自身的切换账号,退出游戏。和sdk内部场景无关

WancmsSDKManager.getInstance(this).recycle();       
            

3Api说明

3.1、初始化

接口定义:

public void preInit(Context context)

参数说明:

参数名 类型 参数说明
context Context Context对象,确保为游戏Application

3.2、获取SDK实例

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

3.3、登录

接口定义:

public void showLogin(OnLoginListener listener)

参数说明:

参数名 类型 参数说明
listener OnLoginListener 登录接口的回调

3.4、登录回调说明

loginSuccess()

回调参数说明:

参数名 类型 参数说明
logincallback LogincallBack 登录成功后,登录验签的相关字段

loginError()

参数名 类型 参数说明
errorMsg LoginErrorMsg 错误说明

3.5、支付

接口定义:

public void showPay(String roleid, String money, String serverid, String productname, String productdesc, String cpOrderId, String attach,String sign, OnPaymentListener listener)

参数说明:

参数名 类型 参数说明
roleid String 角色ID
money String 充值金额
serverid String 区服id
productname String 产品名称
productdesc String 产品描述
cpOrderId String 研发订单号
attach String 拓展参数
sign String 支付校验
listener OnPaymentListener 支付接口回调

3.6、支付回调

paymentSuccess()

回调参数说明:

参数名 类型 参数说明
callbackInfo PaymentCallbackInfo 支付成功回调参数

paymentError()

回调参数说明:

参数名 类型 参数说明
errorMsg PaymentErrorMsg 支付失败说明

说明:

onExit():玩家点击“确认退出”的回调,调用sdk回收资源接口

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

3.7、提交角色信息

接口定义:

public void setRoleDate(final String roleId, final String roleName, final String roleLevel, final String serverId, final String serverName, final JSONObject ext)

参数说明:

参数名 类型 参数说明
roleId String 角色id
roleName String 角色名
roleLevel long 角色等级
serverId String 区服id
serverName String 区服名
ext JSONObject 拓展参数(例如JSONObject json = new JSONObject(); son.put("time", "20170417");)

3.8、回收资源

接口定义:

public void recycle()

注:游戏退出 切换账号必须调用

4登录验签

参数签名规则:

参数名 类型 参数说明 签名顺序
username String 0.01折用户帐号 1
appkey String 应用 appkey 2
logintime String 登陆时间,时间戳格式 3

签名字符串示例: sign=MD5(“username=t315688&appkey=91bac46a9b70bd2db563cc483d443ba3&logintime =1395634100”)

生成md5摘要后和登录接口返回的sign进行比对

5运行环境

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

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

6混淆

0.01折_SDK 包是以 aar 包文件提供给用户的,其中 jar 包已经半混淆状态, 您在混淆自己 APK 包的时候请不要将 0.01折SDK 的 jar 包一起混淆,因为里面有自定义UI控件,若被混淆后会因为无法找到相关类而抛异常。您可以在用ant 构 建混淆包的 build.xml里面对应位置或者在 proguard.cfg里加入:
#aiqu
-libraryjars libs/alipaySdk-20190725.jar
-libraryjars libs/cloud_game_sdk_v1.0.0.jar
-libraryjars libs/core-3.3.0.jar
-libraryjars libs/gson-2.7.jar
-libraryjars libs/umeng-asms-armeabi-v1.6.3.jar
-libraryjars libs/umeng-common-9.5.0.jar
-keep class com.longshao.aiquyouxi.** {*;}
-keep class com.wancms.sdk.**{*;}
-keep class com.umeng.** {*;}
-keep class org.repackage.** {*;}
-keep class com.bytedance.** {*;} -keepattributes *Annotation*
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.mobilesecuritysdk.*
-keepattributes Signature
-keep class com.ut.*
-keep public class com.zhe1.demo.R$*{
public static final int *;
}
-keepclassmembers class * {
public (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View
-keep class org.**{*;}

# gmspeed start---
-keep class com.baidu.protect.** {
*;
}
-keep class com.ssy185.** {
*;
}
-keep class com.ssy185.sdk.api.**{*;}
-keep class com.ssy185.sdk.common.base.inerface.**{*;}
-keep class com.bytedance.shadowhook.**{*;}
-keep class com.google.gson.**{*;}
-keep class com.ssy185.a.**{*;}
-keep class com.ssy185.a0.**{*;}
-keep class com.ssy185.app.**{*;}
-keep class com.ssy185.b.**{*;}
-keep class com.ssy185.b0.**{*;}
-keep class com.ssy185.c.**{*;}
-keep class com.ssy185.c0.**{*;}
-keep class com.ssy185.d.**{*;}
-keep class com.ssy185.d0.**{*;}
-keep class com.ssy185.e.**{*;}
-keep class com.ssy185.e0.**{*;}
-keep class com.ssy185.f.**{*;}
-keep class com.ssy185.f0.**{*;}
-keep class com.ssy185.feature.h.**{*;}
-keep class com.ssy185.g.**{*;}
-keep class com.ssy185.g0.**{*;}
-keep class com.ssy185.h.**{*;}
-keep class com.ssy185.i.**{*;}
-keep class com.ssy185.j.**{*;}
-keep class com.ssy185.k.**{*;}
-keep class com.ssy185.l.**{*;}
-keep class com.ssy185.m.**{*;}
-keep class com.ssy185.n.**{*;}
-keep class com.ssy185.o.**{*;}
-keep class com.ssy185.p.**{*;}
-keep class com.ssy185.q.**{*;}
-keep class com.ssy185.r.**{*;}
-keep class com.ssy185.s.**{*;}
-keep class com.ssy185.sdk.common.base.lifecycle.**{*;}
-keep class com.ssy185.sdk.feature.adapter.**{*;}
-keep class com.ssy185.sdk.feature.floatview.**{*;}
-keep class com.ssy185.sdk.feature.view.**{*;}
-keep class com.ssy185.sdk.gadget.**{*;}
-keep class com.ssy185.sdk.gamehelper.**{*;}
-keep class com.ssy185.sdk.java_hook.**{*;}
-keep class com.ssy185.sdk.server.**{*;}
-keep class com.ssy185.t.**{*;}
-keep class com.ssy185.u.**{*;}
-keep class com.ssy185.v.**{*;}
-keep class com.ssy185.w.**{*;}
-keep class com.ssy185.x.**{*;}
-keep class com.ssy185.y.**{*;}
-keep class com.ssy185.z.**{*;}
-keep class com.tencent.smtt.export.external.interfaces.**{*;}
-keep class com.tencent.smtt.sdk.**{*;}
-keep class kotlin.**{*;}
-keep class top.canyie.pine.**{*;}
-keep class androidx.** {*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public ;}
# gmspeed end---

以避免0.01折SDK 的相关的 jar 包被混淆。