跳到主要内容

使用 SDK

迅雷游戏 SDK​

提供账号登录、支付、实名认证、防沉迷和行为上报,本文适用于 1.8.0.3 AAR。

接入顺序:获取参数 → 添加 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)。

调用参数​

参数类型说明
contextContext应用上下文,可传 getApplicationContext()
adPlatformString无投放传 "";腾讯 tencent、字节 bytedance、百度 baidu;不能传 null
configNxConfig.Builder初始化配置,直接传 Builder,无需调用 build()
listenerNiuxMobileGameListener结果监听抽象类,必须实现支付、实名、退出回调
handlerIAppHandler处理 GoLogin 跳转登录页和 DoToast 提示

初始化配置​

参数类型必填说明
fcm_appidString是国家防沉迷系统提供的公司主体 appid
fcm_bizidString是国家防沉迷系统提供的游戏备案 bizid
game_idString是平台游戏 ID,由平台提供
game_nameString是平台游戏名称,由平台提供
coop_idString是平台游戏方 ID,由平台提供
coop_nameString是游戏方主体名称
client_idString是应用的授权登录标识,由平台提供
client_secretString是与 client_id 对应的授权登录密钥,由平台提供
schemeCallbackString是游戏唯一的授权回调 scheme,须与 Manifest 中的 scheme 一致
xlpaykeyString是客户端支付所需的 Key,由迅雷账号支付平台提供
gdtUserActionSetIdString腾讯投放时腾讯广告的用户行为数据源 ID
gdtAppSecretKeyString腾讯投放时腾讯广告的应用密钥
byteDanceAppIdString字节投放时字节广告的应用 ID
needShowPrivacyDialogboolean否是否展示 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。