更新日期:2026-02-13Java(Android)接入文档
根据游戏接入后出现的问题,QuickSDK对游戏项目做以下几点要求:
· AndroidManifest.xml中android:targetSdkVersion="26" (关于一些应用市场对Android应用API(targetSdkVersion)最低要求的提示)
部分渠道targetVersion为28时9.0设备http请求失败
application节点下添加
android:usesCleartextTraffic="true"
防止游戏与渠道sdk发生横竖屏切换出现问题
· U3D游戏项目下,AndroidManifest.xml中
Android:value值设置为true
· 为Activity添加横竖屏设置
根据游戏的横竖屏,将activity做横竖屏设置
android:screenOrientation="sensorLandscape" android:screenOrientation="sensorPortrait"
或者
android:screenOrientation="landscape" android:screenOrientation="portrait"
· AndroidManifest.xml中的Activity等组件路径为完整路径
· 游戏项目的类路径不要使用“com.quicksdk”,打渠道包时会删除该路径下的所有内容。
去下载中心下载QuickSDK资源,将files文件夹下的文件libs和res拷贝到项目对应的文件夹中。
Androidmanifest.xml中添加权限(QuickSDK没有要求任何权限,游戏按自己的需要进行添加便可)
2.3.1 新建游戏的Application(必接)
新建游戏的Application,继承自QuickSdkApplication
public class GameApplication extends QuickSdkApplication {
@Override
public void onCreate() {
super.onCreate();
}
}
2.3.2 将Application添加到AndroidManifest.xml中(必接)
在AndroidManifest.xml中的Application节点,修改android:name属性,其值为游戏新建的Application的全路径
2.4.1 新建游戏闪屏Activity(必接)
新建游戏闪屏Activity,继承自QuickSdkSplashActivity
public class SplashActivity extends QuickSdkSplashActivity {
@Override
public int getBackgroundColor() {
return Color.WHITE;
}
@Override
public void onSplashStop() {
//闪屏结束后,跳转到游戏界面
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
this.finish();
}
}
2.4.2 将闪屏Activity添加到AndroidManifest.xml中,并且设置为游戏启动Activity
说明:
android:name属性,其值为游戏自定义的闪屏Activity全路径
android:screenOrientation属性,其值根据游戏需求决定是横屏还是竖屏
游戏Activity的生命周期,调用相应的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
com.quicksdk.Sdk.getInstance().onCreate(this);
}
@Override
protected void onStart() {
super.onStart();
com.quicksdk.Sdk.getInstance().onStart(this);
}
@Override
protected void onRestart() {
super.onRestart();
com.quicksdk.Sdk.getInstance().onRestart(this);
}
@Override
protected void onPause() {
super.onPause();
com.quicksdk.Sdk.getInstance().onPause(this);
}
@Override
protected void onResume() {
super.onResume();
com.quicksdk.Sdk.getInstance().onResume(this);
}
@Override
protected void onStop() {
super.onStop();
com.quicksdk.Sdk.getInstance().onStop(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
com.quicksdk.Sdk.getInstance().onDestroy(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
com.quicksdk.Sdk.getInstance().onNewIntent(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
com.quicksdk.Sdk.getInstance().onActivityResult(this, requestCode, resultCode, data);
}
2.6.1 设置初始化通知(必接)
类名:QuickSDK
方法:public QuickSDK setInitNotifier(InitNotifier notifier)
功能:设置初始化结果回调通知,一般在游戏开始前,初始化成功后,进行游戏登陆等相关的处理。
案例:
QuickSDK.getInstance().setInitNotifier(new InitNotifier() {
@Override
public void onSuccess() {
//初始化成功
}
@Override
public void onFailed(String message, String trace) {
//初始化失败
} });
2.6.2 设置登录通知(必接)
类名:QuickSDK
方法:public QuickSDK setLoginNotifier(LoginNotifier notifier)
功能:设置用户登陆结果回调通知的相关处理。
案例:
QuickSDK.getInstance().setLoginNotifier(new LoginNotifier() {
@Override
public void onSuccess(UserInfo userInfo) {
//登录成功,获取到用户信息userInfo
//通过userInfo中的UID、token做服务器登录认证
}
@Override
public void onCancel() {
//登录取消
}
@Override
public void onFailed(final String message, String trace) {
//登录失败
}
});
登录信息:
UserInfo
字段
类型
说明
UID
String
用户ID,SDK返回的唯一ID
username
String
用户登录名
token
String
用户验证token
接入要求:
1)启动游戏,在登录界面中获取到登录成功的通知,跳转到进入游戏的界面;
2)游戏以自动登录的方式调用登录时,获取到登录失败和登录取消的通知,应再次调用登录的功能;
3)不同渠道可能返回相同的UID,游戏应使用渠道ID+UID作为用户的唯一标识。渠道ID通过“public int getChannelType()”获取。
2.6.3 设置注销通知(必接)
类名:QuickSDK
方法:public QuickSDK setLogoutNotifier(LogoutNotifier notifier)
功能:设置用户注销结果回调通知等相关的处理。
案例:
QuickSDK.getInstance().setLogoutNotifier(new LogoutNotifier() {
@Override
public void onSuccess() {
//注销成功
}
@Override
public void onFailed(String message, String trace) {
//注销失败,不做处理
}
});
接入要求: 获取到注销成功的通知,游戏应回到登录界面并重新调用登录方法。
2.6.4 设置切换账号通知(必接)
类名:QuickSDK
方法:public QuickSDK setSwitchAccountNotifier(SwitchAccountNotifier notifier)
功能: 一些渠道(如:百度 等)在悬浮框有切换账号的功能,此回调即切换成功后的回调。游戏应清除当前的游戏角色信息。在切换账号成功后回到选择服务器界面,用回调结果里面的新的UID 和Token 进入游戏。注意:在此回调内无需调用登录接口
案例:
QuickSDK.getInstance().setSwitchAccountNotifier(new SwitchAccountNotifier() {
@Override
public void onSuccess(UserInfo userInfo) { //切换账号成功的回调,返回新账号的userInfo
}
@Override
public void onCancel() {
//切换账号取消
}
@Override
public void onFailed(String message, String trace) {
//切换账号失败
}
})
切换账号成功信息:
UserInfo
字段
类型
说明
UID
String
用户ID,SDK返回的唯一ID
username
String
用户登录名
token
String
用户验证token
接入要求:
在游戏界面中,获取到切换账号成功的通知,游戏注销当前的游戏角色,使用新的用户信息,回到进入游戏的界面。(针对渠道SDK在游戏界面中通过悬浮框进行账号的切换)
2.6.5 设置定额支付通知(必接)
类名:QuickSDK
方法:public QuickSDK setPayNotifier(PayNotifier notifier)
功能:设置用户支付结果回调通知等相关的处理
案例:
QuickSDK.getInstance().setPayNotifier(new PayNotifier() {
@Override
public void onSuccess(String sdkOrderID, String cpOrderID,
String extrasParams) {
//支付成功
//sdkOrderID:quick订单号 cpOrderID:游戏订单号
}
@Override
public void onCancel(String cpOrderID) {
//支付取消
}
@Override
public void onFailed(String cpOrderID, String message, String trace) {
//支付失败
}
});
说明:游戏充值是否成功到账,只能以服务器的通知为准,而不是客户端的通知,因为部分渠道SDK自身有时不会发送正确的通知。
2.6.6 设置退出通知(必接)
类名:QuickSDK
方法:public QuickSDK setExitNotifier(ExitNotifier notifier)
功能:设置用户退出结果回调通知等相关的处理
案例:
QuickSDK.getInstance().setExitNotifier(new ExitNotifier() {
@Override
public void onSuccess() {
//退出成功,游戏在此做自身的退出逻辑处理
}
@Override
public void onFailed(String message, String trace) {
//退出失败,不做处理
}
});
接入要求:获取到退出成功的通知后,游戏做自身的退出逻辑处理。
接入要求:SDK的接口需在UI主线程下调用
2.7.1 SDK初始化(必接)
类名:com.quicksdk.Sdk
方法:public void init(Activity activity, String productCode, String productKey)
功能:渠道SDK初始化
参数:activity 必填 当前Activity
targetVersion大于等于23时,需要在初始化之前申请权限(QuickSDK没有要求任何权限,游戏按自己的需要进行申请便可,如不用可以不做申请)如下:
案例1(当targetVersion 较大时 动态申请读写权限和读取手机状态等权限,具体权限 具体而定):
try {
//check权限
if ((ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)
|| (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {
//没有,申请权限 权限数组
ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE ,Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUESTCODE);
} else {
// 有则执行初始化
Sdk.getInstance().init(this, "Product_Code", "Product_Key");
}
} catch (Exception e) {
//异常 继续申请
ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE ,Manifest.permission.WRITE_EXTERNAL_STORAGE }, REQUESTCODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//如果requestCode不是游戏自己申请时传的,则不作处理
if (requestCode != REQUESTCODE){
return;
}
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//申请成功
Sdk.getInstance().init(this,"Product_Code", "Product_Key");
} else {
//失败 这里逻辑以游戏为准 这里只是模拟申请失败 cp方可改为继续正常初始化调登录然后进游戏 或者继续申请权限 或者退出游戏 或者其他逻辑
Sdk.getInstance().init(this,"Product_Code", "Product_Key");
}
}
targetVersion小于等于22时,无申请权限。如下:
案例2:
QuickSDK.getInstance().setInitNotifier(new InitNotifier() {
@Override
public void onSuccess() {
//初始化成功
}
@Override
public void onFailed(String message, String trace) {
//初始化失败
}
});
productCode 必填 QuickSDK后台申请的productCode
productKey 必填 QuickSDK后台申请的productKey
案例:
com.quicksdk.Sdk.getInstance().init(activity, "后台申请的productCode", "后台申请的productKey");
接入要求:初始化接口,应在Activity中onCreate方法中调用。
2.7.2 登录账号(必接)
类名:com.quicksdk.User
方法:public void login(Activity activity)
功能:调用渠道SDK登录
参数:activity 必填 当前Activity
案例:
User.getInstance().login(activity);
接入要求:进入到登录界面,自动调用此接口,须保证初始化成功后再调用登录接口。
2.7.3 上传角色信息(必接)
类名:com.quicksdk.User
方法:public void setGameRoleInfo(Activity activity, GameRoleInfo roleInfo, boolean createRole)
功能:向渠道SDK上传角色信息
参数:activity 必填 当前Activity
roleInfo 必填 角