1接入说明
1.1、文档面向对象:
接入厂商的产品,技术人员,平台技术人员。
1.2、注意事项:
● 接口参数大小写敏感。
● request和response的编码格式为UTF-8。
1.3、名词定义
名称 | 说明 |
---|---|
CP | 游戏合作商 |
APP | 接入平台的游戏 |
APP_ID | 接入时由平台分配的游戏ID。 |
运营方 | 运营商sdk_lib |
1.4、版本更新说明
2025-1-17 v9.2.39:更新方式,在v9.2.38的基础上替换 GMTBOX.aar aiqu_sdk_v9.2.39.aar
1、更新加速
2025-1-10 v9.2.38:更新方式,重新对接
1、更新加速
2、更新巨量sdk版本
2024-10-22 v9.2.37:更新方式,重新对接
1、修复已知bug。
2024-10-10 v9.2.36:更新方式,重新对接
1、更新支付零元购的精度问题。
2024-9-12 v9.2.35:更新方式,重新对接
1、更新加速sdk
2、更新巨量sdk
2024-8-26 v9.2.34:更新方式,可在9.2.33基础上替换为aiqu_sdk_9.2.34.aar及替换speed aar
1、修改加速,更新支持H5加速
2、修改2次登录逻辑
2024-6-25 v9.2.33:更新方式,可在9.2.32基础上直接替换为aiqu_sdk_9.2.33.aar
1、优化登录功能,纪录手机号自动登录
2、修改支付,增加优惠计算
2024-5-20 v9.2.32:更新方式,可在9.2.31基础上直接替换为aiqu_sdk_9.2.32.aar及替换speed aar
1、优化悬浮窗,自动贴边
2024-5-6 v9.2.31:更新方式,可在9.2.30基础上直接替换为aiqu_sdk_9.2.31.aar
1、支持小号回收退出
2、支持小号拉黑退出
2024-3-27 v9.2.30:更新方式,可在9.2.29基础上直接替换为aiqu_sdk_9.2.30.aar
1、支持V2分包渠道号
2、母包不保存登录账户密码
2024-3-14 v9.2.29:更新方式,可在9.2.28基础上直接替换为aiqu_sdk_9.2.29.aar, showfloat添加Activity参数
1、sdk悬浮窗显示方法showfloat添加Activity参数,解决个别游戏上下文失效导致的闪退问题
2023-12-28 v9.2.28:更新方式,可在9.2.27基础上直接替换为aiqu_sdk_9.2.28.aar和aiqu_speed_v2.1.aar
1、sdk加速悬浮窗支持隐藏
2023-11-29 v9.2.27:更新方式,可在9.2.26基础上直接替换为aiqu_sdk_9.2.27.aar
1、sdk支付福利币支持0.1折
2、sdk代码编译版本号提升到30
2023-09-28 v9.2.26:更新方式,可在9.2.25基础上直接替换为aiqu_sdk_9.2.26.aar
1、修复sdk角色上报接口异常导致的闪退问题
2023-07-07 v9.2.25:更新方式,可在9.2.24基础上直接替换为aiqu_sdk_9.2.25.aar
1、修复sdk混淆后和游戏库的冲突问题
2023-05-24 v9.2.24:更新方式,可在9.2.23基础上直接替换为aiqu_sdk_9.2.24.aar
1、修复巨量库缺失LogImpl导致的闪退问题
2023-04-27 v9.2.23:更新方式,参考demo重新对接(存在巨量库缺失LogImpl导致的闪退问题,不要接入,已作废)
1、升级巨量sdk
2、修复悬浮窗跳动问题
2023-03-20 v9.2.21:更新方式,可在9.2.20基础上直接替换为aiqu_sdk_9.2.21.aar
1、修复跳转月卡和省钱卡闪退的bug
2023-03-17 v9.2.20:更新方式,重新对接
1、去除设备和存储权限
2023-03-16 v9.2.19:更新方式,重新对接
1、升级巨量sdk
2、修复用户登录和平台币提示的bug
2022-12-26 v9.2.18:更新方式,可在9.2.16基础上直接替换为aiqu_sdk_9.2.18.aar
1、修复一些bug
2022-11-22 v9.2.16:更新方式,重新对接
1、升级游戏加速
2022-11-04 v9.2.15:更新方式,重新对接
1、修改闪退bug,修改隐私弹窗退出方法
2022-10-31 v9.2.14:更新方式,可在9.2.13或9.2.12基础上直接替换为aiqu_sdk_9.2.14.jar
1、修改隐私协议样式
2022-10-26 v9.2.12:更新方式,可在9.2.11基础上直接替换为aiqu_sdk_9.2.12.jar
1、修复云游闪退
2、修复部分游戏bug
2022-10-09 v9.2.11:更新方式,可在9.2.10基础上直接替换为aiqu_sdk_9.2.11.jar
1、修改保存密码
2、修复游戏bug
2022-09-23 v9.2.10:更新方式,重新对接
1、修改巨量的统计
2、修复游戏bug
2022-08-19 v9.2.9:更新方式,重新对接
1、去除隐私政策,让研发实现,注:一定要要隐藏sdk隐私政策;
2、修复游戏更新闪退bug;
2022-07-29 v9.2.8:更新方式,可在9.2.7基础上直接替换aiqu_sdk_9.2.8.jar
1、修改隐私政策,研发可自定义,注:非特殊需求请不要隐藏sdk隐私政策;
2、修复游戏更新闪退bug;
2022-07-10 v9.2.7:更新方式,重新对接
1、增加游戏加速功能;
2022-07-1 v9.2.6:更新方式,可在9.2.5基础上直接替换为aiqu_sdk_9.2.5.jar
1、修复云游bug;
2022-06-14 v9.2.5:更新方式,按照对接文档,重新对接
1、增加云游戏登录,充值功能;
2022-06-13 v9.2.4:更新方式,按照对接文档,重新对接
1、界面大改版(详见demo);
2、支付接口新增加一个字段cpOrderId(研发订单号)原来的attach字段不用在传研发订单号了
3、恢复老的分包方式
4、修复游戏对接闪退bug
2集成SDK
集成爱趣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文件夹下,打开如图所示界面:
在app gradle下配置
manifestPlaceholders = [APPLOG_SCHEME: "rangersapplog.byAx6uYt".toLowerCase()]
implementation 'com.bytedance.applog:RangersAppLog-Lite-cn:6.16.9'
implementation 'com.bytedance.ads:AppConvert:1.3.2.0'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61'
implementation 'com.tencent.tbs:tbssdk:44286'
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、初始化sdk(在游戏工程主activity的onCreate中最开始调用)
进行加速SDK初始化:在游戏工程主activity的onCreate中最开始调用WancmsSDKManager.initSdkOnCreateFirst(MainActivity.this);
2.4.3、弹出隐私权限,爱趣sdk的《用户协议》和 《隐私政策》,《儿童个人信息保护规则及监护人须知》和《第三方服务共享清单》,申请Manifest.permission.WRITE_EXTERNAL_STORAGE和Manifest.permission.READ_PHONE_STATE两个权限
研发需要复制爱趣sdk的《用户协议》和《隐私政策》到游戏的用户协议和隐私政策中,sdk的《用户协议》和《隐私政策》和申请权限都是让研发自行处理。
用户如果拒绝权限,务必保证再次启动游戏不再申请权限,打扰用户
这样做可以避免应用市场检测违规。请研发配合。爱趣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(MainActivity.this, 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、支付(如开计费必须接入,在弹出隐私弹窗后调用)
WancmsSDKManager.getInstance(MainActivity.this).showPay("caobawang158", money, "1", "杀人书", "金币", "re45465", "", 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, OnPaymentListener listener)
参数说明:
参数名 | 类型 | 参数说明 |
---|---|---|
roleid | String | 角色ID |
money | String | 充值金额 |
serverid | String | 区服id |
productname | String | 产品名称 |
productdesc | String | 产品描述 |
cpOrderId | String | 研发订单号 |
attach | 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 | 爱趣用户帐号 | 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混淆
爱趣_SDK 包是以 aar 包文件提供给用户的,其中 jar 包已经半混淆状态, 您在混淆自己 APK 包的时候请不要将 爱趣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.*
# gm speed
-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
# gm speed end
以避免爱趣SDK 的相关的 jar 包被混淆。