更新日期:2025-05-07QuickGame(安卓)客户端接入文档
由于SDK内部使用了 oaid-2.1.0 以上版本,所以CP需要提前到移动安全联盟注册账号以及申请对应的参数文件
步骤:
a. 到移动安全联盟官网注册账号并审核通过 http://www.msa-alliance.cn/
b. 账号审核通过后,下载OAID的SDK,找到里面的 csv 文件,填写好游戏包名等信息,然后附邮件发送到 msa@caict.ac.cn 获取对应的证书文件(证书文件有效期为1年,请注意及时更换)

c. 将得到的包名.cert.pem 文件,复制到游戏工程 assets 目录下
依次复制以下资源到您的项目中,包含 assets、libs、res、manifest.xml 里面的资源
资源复制进去后,切记修改 manifest 里面部分包名占位符,以及预设授权登录方式的参数,如不使用授权登录,则保留数默参数 QK0

在项目或 module 的 build.gradle 添加以下依赖(版本只能高不能低)
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61' implementation 'androidx.appcompat:appcompat:1.2.0' //taptap implementation 'cn.leancloud:storage-android:8.2.18' implementation 'cn.leancloud:realtime-android:8.2.18' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'androidx.core:core:1.6.0' implementation 'com.google.android.flexbox:flexbox:3.0.0' //api project(path: ':oaid_1_0_25') api 'com.tencent.vasdolly:helper:3.0.4'
QGManager.showPrivace(MainActivity.this, new QGCallBack() {
@Override
public void onSuccess() {
//下一步游戏申请读写内存和读取设备信息权限,申请完成之后初始化
sdk
}
@Override
public void onFailed(String msg) {
// 玩家拒绝协议,游戏执行退出游戏操作
}
});
注意:
1. 游戏首次启动的时候要主动调用一次,如果玩家同意了协议,游戏需在本地做个标记,下一次启动时就不再弹出;如果玩家拒绝,那么下次启动还是需要继续弹出,直到玩家允许为止
2. 使用这个接口所展示的协议弹窗,需要在 manifest 内配置隐私协议地址和用户协议地址,否则协议标志点击无效果

2.1.1 设置注销账号回调
QGManager.setLogoutCallback(new QGCallBack() {
@Override
public void onSuccess() {
Toast.makeText(mActivity, "注销成功", Toast.LENGTH_SHORT).show();
//隐藏浮窗
QGManager.hideFloat();
}
@Override
public void onFailed(String msg) {
Toast.makeText(mActivity, "注销失败", Toast.LENGTH_SHORT).show();
}
});
注意,一共有两个接口需要调用
QGManager .initMsa (Application application );// 此接口需要在Application的onCreate之中调用,以便于获取 OAID;
/init接口,在主Activty的onCreate中执行或申请权限的回调内执行
QGManager.init(MainActivity.this, "产品号(product_code)", new QGCallBack() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(String msg) {
}
});
QGManager.login(MainActivity.this, new QGCallBack() {
@Override
public void onSuccess() {
QGManager.getUID();//获取 UID
QGManager.getUserName();//获取 UserName
QGManager.getLoginToken();//获取 Token
}
@Override
public void onFailed(String msg) {
}
});
注意:为防止账号信息被篡改,游戏客户端获取到登录成功的回调后,需将回调里的uid跟token发送给游戏服务器端进行验证,具体操作详见QuickGameSDK服务器接入文档
2.3.1. 静默登录 (不显示登录界面,默认生成账号)
QGManager. slienceLogin (MainActivity.this, new QGCallBack() {
@Override
public void onSuccess() {
QGManager.getUID();//获取 UID
QGManager.getUserName();//获取 UserName
QGManager.getLoginToken();//获取 Token
}
@Override
public void onFailed(String msg) {
}
});
2.3.2. 获取登录方式
/** * 获取登录方式 仅在第一次选择时生效 建议游戏做 uid 绑定 防止后续获取到的都是 **自动登录 * 自动登录 0 * 账号登录 1 * 验证码登录 2 * qq 4 * 微信 5 * 阿里云一键授权 6 * taptap 7 */ QGManager.getLoginType();
QGRoleInfo roleInfo = new QGRoleInfo();
roleInfo.setBalance("9999");
roleInfo.setPartyName("天地");
roleInfo.setRoleId("10086");
roleInfo.setRoleName("白富美");
roleInfo.setServerName("888");
roleInfo.setVipLevel("999");
roleInfo.setRoleLevel("999");//等级
roleInfo. setRolePower ("999");//战斗力
QGManager.setGameRoleInfo(MainActivity.this, roleInfo);
QGOrderInfo mOrderInfo = new QGOrderInfo();
QGRoleInfo mRoleInfo = new QGRoleInfo();
//角色信息
mRoleInfo.setRoleId("123546421321");
mRoleInfo.setRoleLevel("1");
mRoleInfo.setRoleName("hhaha");
mRoleInfo.setServerName("zzz");
mRoleInfo.setVipLevel("666");
// 订单信息
mOrderInfo.setAmount("0.01");
mOrderInfo.setCount(1); //数量
mOrderInfo.setExtrasParams("2017110403"); //透传参数
mOrderInfo.setPayParam("eedwd");// 商品描述
mOrderInfo.setOrderSubject("钻石"); // 商品名称
mOrderInfo.setProductOrderId("2017110403");//cp 订单号
QGManager.pay(MainActivity.this, mRoleInfo, mOrderInfo, new QGCallBack() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(String msg) {
}
});
2.5.1 统计支付信息(非必接)
//游戏确认到账发货时调用 QGManager.adPayStatistics(QGManager.getUID(), QGManager.getUserName(), "角色 id", "订单号", "商品 id", "商品名称", 总 价, 货币);
QGManager.logout(MainActivity.this);
@Override
protected void onPause() {
super.onPause();
QGManager.hideFloat();
}
@Override
protected void onResume() {
super.onResume();
if (!TextUtils.isEmpty(QGManager.getUID())) {
QGManager.showFloat();
}
}
QGManager.exit(MainActivity .this, new QGCallBack() {
@Override
public void onSuccess() {
finish();
}
@Override
public void onFailed(String msg) {
}
});
QGManager.showFloat(true/false); //true: 浮窗默认倚靠屏幕左边 QGManager.hideFloat();
2.10.1. 开启QQ授权登录
请修改 manifest 配置中的以下 2 处的QQ参数:

注意:meta-data 的 value 格式为 android:value="QK+QQ的appid"
2.10.2. 开启微信授权登录
如果游戏需要使用微信登录,需要将参数配置到manifest文件中的指定位置,并新建一个WXEntryActivity类,继承QGWXEntryActivity类,放到包名.wxapi路径下(例如com.xxx.xxx.wxapi.WXEntryActivity),然后在manifest中注册该Activity;此处可参照demo处理;如果不使用,则保持默认的0


注意:meta-data 的 value 格式为 android:value="QK+微信的 appid 或 appkey"
2.10.3. 获取微信/QQ 的OpenID
public void getExtUserInfo() {
String openId = QGManager.getExtInfo().getOauthId(); // 获取微信/qq 的 openId
int openType = QGManager.getExtInfo().getOauthType(); // openType: 4 是微信
// 5 是 qq
}
2.10.4. 阿里云手机号一键授权登录
修改 manifest 中的阿里云的参数

注意:
1. meta-data 的 value 格式为 android:value="QK+游戏的阿里云参数"(ps:阿里云此处的 key 长度非常长,最少128 位以上),并且要保证游戏的包名以及签名要跟阿里云后台申请产品时,所填入的信息一致。 测试时请保证插入了 sim 卡并且打开了移动网络
2. 此处设置之后,还需要将阿里云后台的appid配置到,SDK后台-拓展配置-手机号一键登录处

2.10.5. TapTap授权登录
修改manifest里,TapTap登录的参数

注意:meta-data 的 value 格式为 android:value="QK+游戏的 appid 或 appkey"
获取玩家实名年龄接口:
QGManager.getAge(); // 返回 int 值,如果未实名则返回 0 ;
获取是否实名认证:
QGManager.getRealName() ;
如果游戏需要上头条或者快手买量,需要在manifest里配置下头条/快手的参数(将QK后续的字段替换为对应买量SDK的参数)
注意:meta-data 的 value 格式为 android:value="QK+头条/快手的appid 或 QK+自定义channelName",channelName的值游戏自行定义
如想使用盒子的分包标识,请在打包时进行以下操作:
1. 通过聚合工具出包
在QuickSDK后台,添加自定义参数 gamebox_Package ,参数值配置为游戏盒子的包名,一定要填写正确的盒子包名,然后保存参数重新打包
2. 直接接入QuickGameSDK
请在游戏工程内配置如下meta-data

value的值为QK+游戏盒子的包名,例如QKcom.test.gamebox
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538