跳到主要内容

使用 SDK

迅雷游戏 SDK

简介

迅雷游戏 SDK 是一款为移动应用开发提供迅雷游戏对接服务的软件开发工具包(SDK)。开发者在其移动应用内集成迅雷游戏 SDK 后,可实现迅雷账号授权登录、支付对接、防沉迷实名认证、数据上报功能。

下载

SDK 依赖文件下载地址:v1.7.2.2

信息

压缩包内包含迅雷游戏 SDK xlMobileGameSDK-1.7.2.2.aar、存放 SDK 依赖包的文件夹 libs 以及存放字符串资源文件的文件夹 values。注意:values 中内容放到项目的 res/values 目录下,没有则新建。

SDK 演示工程下载地址:v1.7.2.2-demo

提示

目前的迅雷游戏安卓 SDK 仅提供 aar 版本的包,jar 版本的包不再提供。

文档包含已废弃 jar 版本的接入说明,使用 aar 版本的游戏方可忽略此部分内容。

获取 SDK 实例

借助 com.xunlei.niux.mobilegame.sdk.platform.NiuxMobileGame 类,游戏方可以获得 SDK 实例,后续调用平台功能将基于这个实例进行。

import com.xunlei.niux.mobilegame.sdk.platform.NiuxMobileGame;

NiuxMobileGame.getInstance();

初始化

调用方法

import android.content.Context;

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;

NiuxMobileGame.getInstance().initMobileGame(Context context, @NonNull String adPlatform, NxConfig.Builder config, NiuxMobileGameListener listener, IAppHandler handler);

调用参数说明

context

类型: Context
说明: 使用应用上下文

adPlatform

类型: @NonNull String
说明: 指定 apk 投放的广告平台,腾讯为 tencent,字节为 bytedance,百度为 baidu,不需要投放则传空字符串

config

类型: NxConfig.Builder
说明: SDK 初始化参数,具体如下:

参数必选说明
gameId平台的游戏 ID (由平台提供)
gameName平台的游戏名称(由平台提供)
coopId平台的游戏方 ID(由平台提供)
coop_name游戏方主体名称
clientId应用的 AppKey,用于 Oauth2.0
clientSecret第三方应用的 AppSecret,用于 Oauth2.0
schemeCallback授权回调 scheme,在 Manifest 文件声明用,必须对应且唯一
xlPayKey用于支付(由迅雷账号支付平台提供)
fcm_appid用于实名认证,公司主体,由国家防沉迷系统提供
fcm_bizid用于实名认证,游戏备案号,由国家防沉迷系统提供
gdtUserActionSetId腾讯广告投放必须,若 adPlatform=“tencent”则必传
gdtAppSecretKey腾讯广告投放必须,若 adPlatform=“tencent”则必传
byteDanceAppId字节广告投放必须,若 adPlatform=“bytedance”则必传

listener

类型: NiuxMobileGameListener
说明: 负责监听响应结果,NiuxMobileGameListener 接口定义如下所示

public interface NiuxMobileGameListener {
/**
* SDK初始化结果监听,一般参数准确,上层可以忽略
*
* @param initialResult
* 定义于com.xunlei.niux.mobilegame.sdk.constants.InitResult
* 可通过InitResult.getResultMessage(int result)获取中文解释
*/
public void onSDKInitialized(int initialResult);

/**
* 充值操作完成监听
* 此监听仅为通知外部APP充值操作完成
* 实际充值结果会通过回调合作方提供的接口通知,理论上只要回调此接口,上层游戏应该都要查询下自己的充值到账没有(即发货)
*
* @param money 充值数量
* @param productId 充值商品ID
* @param orderid 充值订单ID
*/
public void onChargeFinish(int result, int money, @NonNull String productId, @Nullable String orderid);

/**
* 通知上层accessToken过期了,没有refreshToken作刷新用,因此时间到了就通知上层token过期了,
* 上层应该换取新token,通过LoginUser再次赋值传进来
*/
public void onTokenExpired(String accessToken);

/**
* 实名认证回调
*
* @param isAuth 0:未实名;1:已实名
* @param age 0.未查询到年龄信息,1.未满8周岁(年龄<8),2.8岁以上未满16周岁(8<=年龄<16),3.16周岁以上小于18岁(16<=年龄<18),4.成年人(18<=年龄)
*/
public void onAuthorizationReal(int isAuth, int age, AuthorizationData data);

/**
* 退出游戏时调用,游戏方需要实现自己的退出游戏处理
* 1.3.0版本之后添加
*/
public void onExitGame(Context context);

/**
* onChargeFinish,支付结果
*/
public interface PayResult {
/**
* 成功
*/
int Success = 0;
/**
* 取消
*/
int Cancel = -1;
/**
* 失败
*/
int Failed = 1;
}

// onAuthorizationReal
public interface AuthResult {
int Authed = 1;// 已实名
int NoneAuth = 0;// 未实名
int AuthUnknown = -1;// 未知,接口查询失败了
int AuthCancel = -2;// 取消了实名认证弹框

/**
* 小于8岁
*/
int Age_Less8 = 1;

/**
* 8岁以上未满16周岁
*/
int Age8_To_16 = 2;

/**
* 16周岁以上未满18周岁
*/
int Age16_To_18 = 3;

/**
* 慢18周岁的成年人
*/
int Age_Greater18 = 4;
}
}

// onSDKInitialized
public class InitResult {
public static final int Success = 200;
public static final int Missing_Parameter = 404;
public static final int Oauth_Failed = 500;
public static final int Network_Failed = 300;

public static final String getResultMessage(int result) {
String message;
switch (result) {
case Success:
message = "SDK 初始化成功";
break;
case Missing_Parameter:
message = "缺少必要的参数";
break;
default:
message = "未知错误 [".concat(String.valueOf(result)).concat("]");
break;
}
return message;
}
}

调用示例

NiuxMobileGame.getInstance().initMobileGame(this, "", nxConfig, mListener, new IAppHandler() {
@Override
public void onAppDeal(int type, String param) {
String text = type + ":" + param;
XLLog.d("IAppHandler", "onAppDeal " + text);
switch (type) {
case Type.GoLogin:
// 跳至登录页或登出
break;
case Type.DoToast:
// 游戏方自己的toast
Toast.makeText(mContext, param, Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
});

其他

SDK 日志开关

建议 debug 包开启

import com.xovs.common.base.XLLog;

XLLog.setDebugMode(true);
提示

使用 aar 版本的 SDK 可忽略此内容。

若接入的 SDK 是 jar 版本,需要额外导入 res 目录下的资源文件:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

注册 activity

游戏的 AndroidManifest.xml 按需添加以下 activity

<activity
android:name="com.xovs.common.auth.processor.XLAuthBackActivity"
android:configChanges="screenSize"
android:launchMode="singleTask"
android:label="授权登录回调"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<!-- URL Scheme启动 -->
<!-- 此项必须添加 -->
<action android:name="android.intent.action.VIEW" />
<!-- 如果希望该应用可以通过浏览器的连接启动,则添加该项 -->
<category android:name="android.intent.category.BROWSABLE" />
<!-- 此项必须添加,表示该页面可以被隐式调用 -->
<category android:name="android.intent.category.DEFAULT" />
<!-- 协议部分scheme必须为应用唯一独一的,host为包名,申请clientid时候需要 -->
<!-- com.xunlei.niux.demo 替换成游戏自己的包名目录 -->
<!-- niuxsdkdemo 替换成游戏自己唯一schemaCallback -->
<data android:host="com.xunlei.niux.demo" android:scheme="niuxsdkdemo" />
</intent-filter>
</activity>

<!-- 微信SDK接入(可选) -->
<!-- com.xunlei.niux.demo 替换成游戏自己的包名目录 -->
<activity
android:name="com.xunlei.niux.demo.wxapi.WXPayEntryActivity"
android:exported="true"
android:label="WXPayEntryActivity"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
/>

<!-- 如果导入的是支付宝aar,则以下类不需要声明 -->
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
/>
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
/>

<!-- 如果导入的手游SDK是aar,则以下类不需要声明 -->
<activity
android:name="com.xovs.common.auth.processor.XLAuthWebViewActivity"
android:configChanges="screenSize"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:label="H5授权"
android:exported="false"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
/>
<activity
android:name="com.xunlei.niux.mobilegame.sdk.antiaddiction.AuthRealNativeDialog"
android:exported="false"
android:launchMode="singleTask"
android:theme="@style/nx_bt_dialog"
/>
<activity
android:name="com.xunlei.niux.mobilegame.sdk.antiaddiction.LimitToLeaveDialog"
android:exported="false"
android:launchMode="singleTask"
android:theme="@style/nx_bt_dialog"
/>
<activity android:name="com.xunlei.niux.mobilegame.sdk.ui.XLFloatDialogActivity"
android:exported="false"
android:configChanges="screenSize|orientation"
android:launchMode="singleTask"
android:theme="@style/NxActivityTransparent"
/>

第三方依赖

build.gradle 配置文件的 dependencies 块内可以添加以下内容

api "com.android.support:appcompat-v7:${SUPPORT_LIBRARY_VERSION}" //v7库
api 'com.squareup.okhttp3:okhttp:3.12.0'
api 'com.google.code.gson:gson:2.8.5'
api 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.4.0'

Proguard 配置

提示

使用 aar 版本的 SDK 可忽略此内容。

若接入的 SDK 是 aar 版本,不必添加混淆配置。
若接入的 SDK 是 jar 版本,需要在开启混淆的应用添加以下规则:

-dontwarn com.xunlei.**

-keep class com.xovs.** {*;}
-keep class com.xunlei.** {*;}
-keep class com.alipay.** {*;}
-keep class com.tencent.** {*;}
-keep class okhttp3.** {*;}

-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}