使用 SDK
迅雷游戏 SDK
提供账号登录、支付、实名认证、防沉迷和行为上报,本文适用于 1.8.0.3 AAR。
- 开发者: 北京迅志技术有限公司
- SDK 下载 · Demo 下载
- SDK 隐私政策 · SDK 合规使用说明
接入顺序:获取参数 → 添加 SDK 并初始化 → 登录回写 → 角色与心跳上报 → 支付。
一、添加 SDK
要求:minSdkVersion ≥ 22、AndroidX、Java 8。将 AAR 放入 app/libs/,在应用模块 build.gradle 添加:
android {
defaultConfig { minSdkVersion 22 }
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation files('libs/xlMobileGameSDK-1.8.0.3.aar')
implementation 'androidx.annotation:annotation:1.8.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.squareup.okio:okio:1.15.0'
implementation 'com.bytedance.applog:RangersAppLog-Lite-cn:6.16.9'
implementation 'com.bytedance.ads:AppConvert:1.3.2.1'
}
本地 AAR 不会自动引入上述外部依赖。仓库配置放在根 build.gradle 的 allprojects.repositories,或 settings.gradle 的 dependencyResolutionManagement.repositories:
repositories {
google()
mavenCentral()
maven { url 'https://artifact.bytedance.com/repository/Volcengine/' }
}
gradle.properties 添加:
android.useAndroidX=true
android.enableJetifier=true
AAR 已携带混淆规则,无需复制旧版 JAR 规则;上线前用 release 包验证。
二、配置授权回调
在 AndroidManifest.xml 的 application 中添加:
<activity
android:name="com.xovs.common.auth.processor.XLAuthBackActivity"
android:configChanges="screenSize"
android:exported="true"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:host="com.xunlei.game.xxx" android:scheme="yourgamescheme" />
</intent-filter>
</activity>
host 替换为平台登记的应用包名(最终 applicationId);scheme 替换为游戏唯一 scheme,并与初始化的 schemeCallback 一致。
注:scheme是自定义的10个字符内的小写英文字母,通常建议为包名分隔的最后一位,例如包名为com.xunlei.game.jqfs,那么scheme应为jqfs
三、初始化
在主进程初始化一次,调用 initMobileGame(context, adPlatform, config, listener, handler)。
调用参数
| 参数 | 类型 | 说明 |
|---|---|---|
| context | Context | 应用上下文,可传 getApplicationContext() |
| adPlatform | String | 无投放传 "";腾讯 tencent、字节 bytedance、百度 baidu;不能传 null |
| config | NxConfig.Builder | 初始化配置,直接传 Builder,无需调用 build() |
| listener | NiuxMobileGameListener | 结果监听抽象类,必须实现支付、实名、退出回调 |
| handler | IAppHandler | 处理 GoLogin 跳转登录页和 DoToast 提示 |
初始化配置
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| fcm_appid | String | 是 | 国家防沉迷系统提供的公司主体 appid |
| fcm_bizid | String | 是 | 国家防沉迷系统提供的游戏备案 bizid |
| game_id | String | 是 | 平台游戏 ID,由平台提供 |
| game_name | String | 是 | 平台游戏名称,由平台提供 |
| coop_id | String | 是 | 平台游戏方 ID,由平台提供 |
| coop_name | String | 是 | 游戏方主体名称 |
| client_id | String | 是 | 应用的授权登录标识,由平台提供 |
| client_secret | String | 是 | 与 client_id 对应的授权登录密钥,由平台提供 |
| schemeCallback | String | 是 | 游戏唯一的授权回调 scheme,须与 Manifest 中的 scheme 一致 |
| xlpaykey | String | 是 | 客户端支付所需的 Key,由迅雷账号支付平台提供 |
| gdtUserActionSetId | String | 腾讯投放时 | 腾讯广告的用户行为数据源 ID |
| gdtAppSecretKey | String | 腾讯投放时 | 腾讯广告的应用密钥 |
| byteDanceAppId | String | 字节投放时 | 字节广告的应用 ID |
| needShowPrivacyDialog | boolean | 否 | 是否展示 SDK 隐私弹窗,默认 true |
调用示例
以下代码放在游戏 Activity 中,替换占位参数后调用 initGameSdk()。
import android.content.Context;
import android.widget.Toast;
import com.xunlei.niux.mobilegame.sdk.constants.InitResult;
import com.xunlei.niux.mobilegame.sdk.platform.AuthorizationData;
import com.xunlei.niux.mobilegame.sdk.platform.IAppHandler;
import com.xunlei.niux.mobilegame.sdk.platform.NiuxMobileGame;
import com.xunlei.niux.mobilegame.sdk.platform.NiuxMobileGameListener;
import com.xunlei.niux.mobilegame.sdk.platform.NxConfig;
private void initGameSdk() {
NxConfig.Builder config = new NxConfig.Builder("fcm_appid", "fcm_bizid", "game_id")
.gameName("game_name")
.coopId("coop_id")
.coopName("coop_name")
.clientId("client_id")
.clintSecret("client_secret") // SDK 方法名为 clintSecret
.schemeCallback("yourgamescheme")
.xlPayKey("xlpaykey");
NiuxMobileGameListener listener = new NiuxMobileGameListener() {
@Override
public void onSDKInitialized(int result) {
// 200:成功,开放登录入口;404:缺少参数,检查配置。
}
@Override
public void onChargeFinish(int result, float money, String productId, String orderId) {
// 查询游戏后端确认到账。
}
@Override
public void onAuthorizationReal(int isAuth, int age, AuthorizationData data) {
// 处理实名结果,data 可能为 null。
}
@Override
public void onExitGame(Context context) {
// 停止角色心跳并执行游戏退出流程,不能只关闭 SDK 弹窗。
}
@Override
public void onTokenExpired(String accessToken) {
// 重新登录,取得新 LoginUser 后回写 SDK。
}
};
NiuxMobileGame.getInstance().initMobileGame(
getApplicationContext(), "", config, listener, new IAppHandler() {
@Override
public void onAppDeal(int type, String param) {
if (type == IAppHandler.Type.GoLogin) {
// 返回游戏登录页。
} else if (type == IAppHandler.Type.DoToast) {
runOnUiThread(() -> Toast.makeText(
getApplicationContext(), param, Toast.LENGTH_LONG).show());
}
}
});
}
默认先展示隐私弹窗,同意后才初始化,拒绝会退出进程。游戏自行完成隐私同意流程时,可设置 setShowPrivacyDialog(false)。回调修改 UI 时切到主线程。
四、实名与防沉迷
SDK 在登录回写和角色心跳中自动检查实名、防沉迷,无需调用已废弃的 requestRealCertification。
isAuth:1 已实名、0 未实名、-1 未知、-2 取消、-101 未登录。age:0 未知、1 未满 8 岁、2 满 8 岁未满 16 岁、3 满 16 岁未满 18 岁、4 成年。
游戏必须处理 onExitGame:结束角色会话并退出游戏界面。该回调的 Context 可能是 SDK 弹窗 Activity。