跳到主要内容
版本:海外SDK

海外游戏对接文档--安卓

版本

当前版本 3.5.0 历史版本

SDK功能

  1. 登录,切换账号,绑定。
  2. 支付
  3. 广告
  4. 上报游戏角色信息,上报游戏事件
  5. google评论功能和firebase的推送
  6. NAVER游戏接口
  7. 数数科技上报接口
  8. adjust数据上报
  9. 客服功能
  10. Facebook分享功能

1.SDK接入前准备工作

1.1接入前准备工作:发行中间层提供参数说明(参数由发行层技术提供)

参数类型参数描述
game_idstring发行中间层分配的游戏id,
appKeystring发行中间层分配的游戏key
appSecretstring发行中间层分配的游戏secret
urlstring发行中间层的服务端域名

2.SDK快速接入

2.1 开发环境

  1. com.android.tools.build:gradle 4.0.0 版或更高版本,build.gradle需要添加以下配置和依赖
//如下所示,对plugins声明区段进行Kotlin插件声明
plugins {
id 'com.android.application'
id 'kotlin-android'
}

repositories {
mavenCentral()
maven {url 'https://android-sdk.is.com/'}
maven {url 'https://artifact.bytedance.com/repository/pangle'}
}
//第三方SDK依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.facebook.android:facebook-login:12.2.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.firebase:firebase-messaging:23.2.1'
implementation 'com.google.firebase:firebase-analytics:21.3.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation "androidx.viewpager2:viewpager2:1.0.0"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation "com.squareup.retrofit2:retrofit:2.6.4"
implementation "com.squareup.retrofit2:converter-gson:2.6.4"
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'

//ironsource广告依赖
implementation 'com.ironsource.sdk:mediationsdk:7.9.0'
// Add AdMob and Ad Manager Network
implementation 'com.google.android.gms:play-services-ads:23.0.0'
implementation 'com.ironsource.adapters:admobadapter:4.3.43'
// Add Applovin Network
implementation 'com.ironsource.adapters:applovinadapter:4.3.41'
implementation 'com.applovin:applovin-sdk:12.1.0'
// Add Facebook Network
implementation 'com.ironsource.adapters:facebookadapter:4.3.45'
implementation 'com.facebook.android:audience-network-sdk:6.16.0'
// Add Pangle Network
implementation 'com.ironsource.adapters:pangleadapter:4.3.26'
implementation 'com.pangle.global:ads-sdk:5.8.0.8'
// Add UnityAds Network
implementation 'com.ironsource.adapters:unityadsadapter:4.3.35'
implementation 'com.unity3d.ads:unity-ads:4.9.3'
implementation 'com.google.android.gms:play-services-appset:16.0.0'
//appsflyer依赖
implementation 'com.appsflyer:af-android-sdk:6.5.4'
implementation 'com.appsflyer:oaid:6.2.4'
//数数SDK依赖
implementation 'cn.thinkingdata.android:ThinkingAnalyticsSDK:2.8.3.3'
//kotlin依赖
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.21"
//AIHelp 客服系统依赖
implementation 'net.aihelp:android-aihelp-aar:3.4.+'
//adjust依赖
implementation 'com.adjust.sdk:adjust-android:4.38.2'
implementation 'com.android.installreferrer:installreferrer:2.2'
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
implementation 'cn.thinkingdata.android:TAThirdParty:1.2.0'
//下拉刷新控件
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'

}
  1. SDK压缩包相关的文件
  • AndroidManifest.xml:AndroidManifest.xml里面的配置需要加到游戏里面,其中com.google.android.gms.ads.APPLICATION_ID需要换成自己游戏的参数,具体参数找运营要

  • res:res/values/vlues.xml中的几个字段需要添加到游戏相应的目录下面。

  • assets:assets目录下面的文件复制到游戏的assets里

  • DMM支付特殊处理

    • SDK内含启动Activity,请勿将游戏端的 Activity设置为启动 Activity。启动Activity指的是在intent-filter中赋予了action : android.intent.action.MAIN和category : android.intent.category.LAUNCHER要素的Activity。对于想要在应用程序启动时调用的 Activity,需在sdk_configuration.xml的 mainActivity标签指定Activity类的完整类名。
    • 需要将DMM GAMES Platform上使用的游戏信息定义为 Android 资源的xml文件,命名为"sdk_configuration.xml",放入到res/xml下面。XML文件示例如下所示。
    <?xml version="1.0" encoding="utf-8"?>
    <properties>
    <gameName>熱戰少女</gameName>
    <mainActivity>com.mk.MKdemo.DemoActivity</mainActivity>

    <!--正式环境-->
    <!-- <appId>Put Application ID here(when Production Build)</appId>-->
    <!-- <consumerKey>Put Consumer Key here(when Production Build)</consumerKey>-->
    <!-- <consumerSecret>Put Consumer Secret here(when Production Build)</consumerSecret>-->

    <!--沙盒环境-->
    <appIdSandbox>773665</appIdSandbox>
    <consumerKeySandbox>yKMdlYxrj4QMn2HC</consumerKeySandbox>
    <consumerSecretSandbox>ACqWUDt1e66=[hGzXfC#$3lcX7U-ZoAg</consumerSecretSandbox>

    <!--环境模式-->
    <!-- When Production Build, Remove below a line. -->
    <developmentMode>sandbox</developmentMode>

    <!-- 超时时间(毫秒 -->
    <webViewTimeoutValue>90000</webViewTimeoutValue>
    </properties>
    • XML内各项目相关说明如下所示。
    标签名说明
    gameName指定向用户显示的游戏名称。
    mainActivity指定本SDK初始化后调用的启动游戏所需 Activity 的完整类名。
    appId指定正式环境下的DMM GAMES Platform 的 应用程序ID。
    ※在沙盒环境下运行时无需定义。
    consumerKey指定正式环境中的DMM GAMES Platform的consumerKey。
    ※在沙盒环境下运行时无需定义。
    consumerSecret指定正式环境下的DMM GAMES Platform的consumerSecret。
    ※在沙盒环境下运行时无需定义。
    appIdSandbox指定沙盒环境中的DMM GAMES Platform的应用程序ID。
    ※在正式环境下运行时无需定义。
    consumerKeySandbox指定沙盒环境中的DMM GAMES Platform的consumerKey。
    ※在正式环境下运行时无需定义。
    consumerSecretSandbox指定沙盒环境中的DMM GAMES Platform的consumerSecret。
    ※在正式环境下运行时无需定义。
    developmentMode指定在正式环境或沙盒环境的其中一方下运行sandbox或release,不设置此标签时默认值release
    webViewTimeoutValue将本SDK显示的WebView界面内的超时时间指定为毫秒。不设置此标签时默认值30000ms
  • 自动依赖(推荐使用)

    • build.gradle 文件中添加如下配置依赖:
    repositories {
    maven {url 'https://nexus.mjutech.com/repository/maven-releases/'}
    //onestore支付需要
    maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public'}
    //DMM支付需要
    maven { url 'https://repos-app.games.dmm.com/'}
    }

    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
    implementation 'com.mk.overseas.sdk:mksdk-libs:3.4.1'
    implementation 'com.navercorp.nng.android.sdk:naver-libs:1.1.3.1'
    implementation 'com.u8.sdk.oversea:u8sdk-libs:3.4.0'
    implementation 'com.oaid.sdk:oaid_sdk:1.0.25'
    }
    • 支付依赖(6选1,没有特殊要求的都选google支付)
    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
    //google 支付
    implementation 'com.mk.overseas.sdk.pay.google:mkgooglepay:6.0.4'
    implementation 'com.android.billingclient:billing:6.0.1'

    //onestore支付
    implementation 'com.mk.overseas.sdk.pay.onestore:mkonestorepay:7.0.2'
    implementation "com.onestorecorp.sdk:sdk-iap:21.00.01"
    implementation "com.onestorecorp.sdk:sdk-configuration-kr:1.0.0"

    //xsolla支付
    implementation 'com.mk.overseas.sdk.pay.xsolla:mkxsollapay:0.17.7'
    implementation 'com.xsolla.android:payments:0.17.1'
    implementation 'com.xsolla.android:store:2.5.2'

    //QooApp支付
    implementation 'com.qooapp.opensdk:qooapp-opensdk:2.0.8'
    implementation 'com.mk.overseas.sdk.pay.qoo:mkqoopay:2.1.2'

    //DMM支付
    implementation 'com.mk.overseas.sdk.pay.dmm:mkdmmpay:1.2.3'
    //SDK本体1
    implementation "com.dmm.games.android:games-store-sdk:1.2.2"
    implementation "com.dmm.games.android:billingclient:1.0.1"
    // 在沙盒环境中运行时,必需定义以下2个库
    implementation "com.dmm.games.android:auth-sandbox:1.2.2"
    implementation "com.dmm.games.android:webview-cookie-sandbox:1.2.2"
    // 在正式环境中运行时,必需定义以下2个库
    implementation "com.dmm.games.android:auth-games-store:1.2.2"
    implementation "com.dmm.games.android:webview-cookie-service:1.2.2"

    //samsung支付,java版本要使用17,gradle使用的是8.7,gradle插件版是8.5.2
    //classpath "com.android.tools.build:gradle:8.5.2"
    //distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
    //build.gradle里面需要添加namespace,添加位置自己百度
    implementation 'com.samsung.android.sdk.iap.lib:samsung:6.2.0'
    implementation 'com.mk.overseas.sdk.pay.samsung:mksamsungpay:6.2.1'
    }
  • 手动依赖:

    • 把压缩包libs下面的jar和aar包复制到游戏工程的libs下,并在build.gradle里面的dependencies添加引用
    • 支付依赖(5选1,没有特殊要求的都选google支付)
    repositories {
    //onestore支付需要
    maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public'}
    //DMM支付需要
    maven { url 'https://repos-app.games.dmm.com/'}
    }
    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
    //google 支付
    implementation 'com.android.billingclient:billing:6.0.1'

    //onestore支付
    implementation "com.onestorecorp.sdk:sdk-iap:21.00.01"
    implementation "com.onestorecorp.sdk:sdk-configuration-kr:1.0.0"

    //xsolla支付
    implementation 'com.xsolla.android:payments:0.17.1'
    implementation 'com.xsolla.android:store:2.5.2'

    //QooApp支付无

    //DMM支付
    //SDK本体1
    implementation "com.dmm.games.android:games-store-sdk:1.2.3"
    implementation "com.dmm.games.android:billingclient:1.0.1"
    // 在沙盒环境中运行时,必需定义以下2个库
    implementation "com.dmm.games.android:auth-sandbox:1.2.2"
    implementation "com.dmm.games.android:webview-cookie-sandbox:1.2.2"
    implementation "com.squareup.okhttp3:okhttp:4.3.1"
    // 在正式环境中运行时,必需定义以下2个库
    implementation "com.dmm.games.android:auth-games-store:1.2.2"
    implementation "com.dmm.games.android:webview-cookie-service:1.2.2"

    //samsung支付无
    //samsung支付,java版本要使用17,gradle使用的是8.7,gradle插件版是8.5.2
    //classpath "com.android.tools.build:gradle:8.5.2"
    //distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
    //build.gradle里面需要添加namespace,添加位置自己百度
    }
  1. 添加 Firebase 配置文件
  • ①将 Firebase Android 配置文件添加到您的应用:
    • 点击下载 google-services.json 以获取 Firebase Android 配置文件 (google-services.json(运营提供))。 将配置文件移动到应用的模块(应用级)目录中。
  • 将 Google 服务插件和kotlin插件 添加到 Gradle 文件中。
    • 在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以纳入 Google 服务 Gradle 插件和kotlin插件。此外,请确认您拥有 Google 的 Maven 代码库。
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// Add the following line:
classpath 'com.google.gms:google-services:4.3.0' // Google Services plugin
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
}
}

allprojects {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
}
//在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,应用 Google 服务 Gradle 插件:
apply plugin: 'com.android.application'
// Add the following line:
apply plugin: 'com.google.gms.google-services'

android {

}
  1. 打包的targetSdkVersion根据google要求设置,编译版本compileSdkVersion最好设置成33(最低要求31).

  2. 其它配置

  • 工程的gradle.properties里面添加以下配置:(此配置是把项目中用到support转换成androidX)
    android.useAndroidX=true
android.enableJetifier=true

2.2 Application 配置

方式一:如果游戏层没有自己的Application,那么游戏需要将AndroidManifest.xml中的application指定为 com.u8.sdk.U8Application。

    <application
android:name="com.u8.sdk.U8Application"
··· >
···
</application>

方式二:如果游戏有自己的Application,则可以看我们的自定义Application

  • 1.游戏中AndroidManifest.xml中,将application节点的android:name属性设置为 com.u8.sdk.U8Application
  • 2.如果游戏有自己的Application需求,或者需要在Application的生命周期方法中,做一些操作。 那么可以实现IApplicationListener里面的接口。
  • 3.上面定义了游戏的Application,紧接着,在AndroidManifest.xml中,将上面我们定义的GameProxyApplication,配置到meta-data中,android:name为U8_Game_Application。

示例,我们定义一个GameProxyApplication实现IApplicationListener接口:

<application
···
android:name="com.u8.sdk.U8Application" >
<meta-data android:name="U8_Game_Application" android:value="com.u8.sdk.test.GameProxyApplication" />
···
</application>

2.3 SDK初始化(必接)

提示

所有接口调用,都通过com.u8.sdk.platform.U8Platform 单例类来调用 登录成功使用sdkUserID和游戏账号绑定

该方法必须在游戏启动Activity的onCreate方法中调用

 U8Platform.getInstance().init(this, new U8InitListener() {

@Override
public void onSwitchAccount(UToken data) {
//游戏中通过SDK切换到新账号的回调,游戏收到该回调,需要引导用户重新登录,重新加载该新用户对应的角色数据
//登录成功
//进入游戏
//从UToken中获取用户信息
//渠道SDK登录并去u8server登录认证成功,会回调改方法。
//UToken中的参数如下:
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该sdkUserID进行绑定。
//userID:U8Server生成的唯一用户ID,
//isVistor:是否是游客账号,true 是;false 不是
//username:U8Server生成的用户名,
//sdkUserName:渠道SDK平台用户名,可能为空,部分渠道SDK没有返回用户名
//token:U8Server生成的会话ID,游戏服务器拿该字段去U8Server做二次登录验证
//extension:U8Server返回的扩展字段,部分渠道SDK需要,游戏中无需使用该字段的值
//timestamp:U8Server生成的时间戳,游戏服务器去U8Server做二次登录验证时,传给U8Server
String sdkUserID = data.getSdkUserID();
Boolean isvistor = data.getVistor();
}

@Override
public void onPayResult(int code, String msg) {
Log.d("U8SDK", "pay result. code:"+code+";msg:"+msg);
switch(code){
case U8Code.CODE_PAY_SUCCESS:
//支付成功
break;
case U8Code.CODE_PAY_FAIL:
//支付失败
break;
case U8Code.CODE_PAY_CANCEL:
//支付取消
break;
case U8Code.CODE_PAY_UNKNOWN:
//支付未知错误
break;
}
}

@Override
public void onLogout() {
//用户登出回调(需要收到该回调需要返回游戏登录界面,并调用login接口,打开SDK登录界面)
}

@Override
public void onLoginResult(int code, UToken data) {
switch(code){
case U8Code.CODE_LOGIN_SUCCESS:
//登录成功
//进入游戏
//从UToken中获取用户信息
//渠道SDK登录并去u8server登录认证成功,会回调改方法。
//UToken中的参数如下:
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该sdkUserID进行绑定。
//userID:U8Server生成的唯一用户ID,
//isVistor:是否是游客账号,true 是;false 不是
//username:U8Server生成的用户名,
//sdkUserName:渠道SDK平台用户名,可能为空,部分渠道SDK没有返回用户名
//token:U8Server生成的会话ID,游戏服务器拿该字段去U8Server做二次登录验证
//extension:U8Server返回的扩展字段,部分渠道SDK需要,游戏中无需使用该字段的值
//timestamp:U8Server生成的时间戳,游戏服务器去U8Server做二次登录验证时,传给U8Server
String sdkUserID = data.getSdkUserID();
Boolean isvistor = data.getVistor();
break;
case U8Code.CODE_LOGIN_FAIL:
//登录失败
break;
}
}

@Override
public void onInitResult(int code, String msg) {
Log.d("U8SDK", "init result.code:"+code+";msg:"+msg);
switch(code){
case U8Code.CODE_INIT_SUCCESS:
//初始化成功
break;
case U8Code.CODE_INIT_FAIL:
//初始化失败
break;
}
}
@Override
public void onShareResult(int code, String msg) {
Log.d("U8SDK", "share result.code:"+code+";msg:"+msg);
switch(code){
case U8Code.CODE_SHARE_SUCCESS:
//分享成功
break;
case U8Code.CODE_SHARE_FAILED:
//分享失败
break;
}
}
@Override
public void onBindAccountResult(int code, String msg) {
switch(code){
case U8Code.CODE_BIND_SUCCESS:
//绑定成功,sdk内部绑定成功会在这个回调里面收到通知
break;
}
}
@Override
public void onProductQueryResult(List<ProductQueryResult> result) {

}
});
//firebase初始化
U8Platform.getInstance().getFirebasePushData(new OnFirebasePushListener() {
@Override
public void firebaseToken(String token) {
//获取firebase的token
}

@Override
public void firebasePushMsg(String msg) {
//app处于前台时候,收到消息通知的信息
}
});

2.4 生命周期函数(必接)

在游戏启动Activity的如下生命周期函数中,调用对应的方法。

 public void onActivityResult(int requestCode, int resultCode, Intent data){
U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}

public void onStart(){
U8SDK.getInstance().onStart();
super.onStart();
}

public void onPause(){
U8SDK.getInstance().onPause();
super.onPause();
}
public void onResume(){
U8SDK.getInstance().onResume();
super.onResume();
}
public void onNewIntent(Intent newIntent){
U8SDK.getInstance().onNewIntent(newIntent);
super.onNewIntent(newIntent);
}
public void onStop(){
U8SDK.getInstance().onStop();
super.onStop();
}
public void onDestroy(){
U8SDK.getInstance().onDestroy();
super.onDestroy();
}
public void onRestart(){
U8SDK.getInstance().onRestart();
super.onRestart();
}

public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
U8SDK.getInstance().onRequestPermissionResult(requestCode, permissions, grantResults);
}

2.5 登录接口(必接)

login(Activity context)

接口说明:

  • 登录接口,初始化成功之后调用,打开SDK登录界面,登录成功或者失败,会触发上面初始化监听器中的onLoginResult回调函数

参数说明:

  • context:android 的上下文

调用示例:

    U8Platform.getInstance().login(context);

2.6 登录接口(正常接2.5,特殊的游戏调用这个)

accountLogin(String account)

接口说明:

  • 登录接口,初始化成功之后调用,针对于有生成唯一标识且使用这个标识作为SDK账号的游戏调用此接口,登录成功或者会触发初始化监听器中的onLoginResult回调函数

参数说明:

  • account:设备号或者账号标识,游戏里生成的唯一标识

调用示例:

    U8Platform.getInstance().accountLogin(account);

2.7 上报游戏角色信息(必接)

备注:登录成功之后调用;调用的时候,暂时没有数据的参数值需要传默认值(自己定),不可传空。

submitExtraData(UserExtraData extraData)

接口说明:

  • 要求在 选择服务器,创建角色,登录游戏,角色升级等时刻,要上报游戏中玩家数据,以便后台统计用户数据。所以,游戏层需要在特定的地方多次调用该方法。

参数说明:

  • extraData:角色信息传递参数的对象

关于UserExtraData对象:

参数名称参数类型是否必传
dataTypeint
serverIDString是(没有的传默认值"1")
serverNameString是(没有的传默认值"1")
roleIDString是(没有的传默认值"1")
roleNameString是(没有的传默认值"1")
roleLevelString是(没有的传默认值"1")
moneyNumString是(没有的传默认值"1")
roleCreateTimelong
roleLevelUpTimelong
vipString是(没有vip系统的传默认值"1")
userTagsString
customDataJSONObject
eventIDString
eventDataString

UserExtraData中的dataType类型如下:

  • public static final int TYPE_SELECT_SERVER = 1; //选择服务器
  • public static final int TYPE_CREATE_ROLE = 2; //创建角色
  • public static final int TYPE_ENTER_GAME = 3; //进入游戏
  • public static final int TYPE_LEVEL_UP = 4; //等级提升
  • public static final int TYPE_EXIT_GAME = 5; //退出游戏
  • public static final int TYPE_AD_EVENT = 6; //广告播放成功
  • public static final int TYPE_DEVICE_ACTIVE = 7; //设备启动
  • public static final int TYPE_PID_EVENT = 8; //渠道登录成功
  • public static final int TYPE_BIND_THIRED = 9; //绑定第三方
  • public static final int TYPE_DEVICE_ENTER_GAME =10; //设备进入游戏
  • public static final int TYPE_DEVICE_ENTER_SERVICE =11; //设备开始进服
  • public static final int TYPE_OTHER_EVENT =12; //其他事件
  • public static final int TYPE_CHANGE_ROLE_NAME =13; //修改角色昵称

游戏必须要调用的类型如下(括号里面是上传事件用到的eventID)

1:选择服务器; 2:创建角色(af_complete_registration); 3:进入游戏(af_login); 4:等级提升(af_level_achieved);10:设备进入游戏(loading_success); 11:设备开始进服(loading_start); 12:其他事件(设备加载过程(loading_xx),角色完成引导(af_tutorial_completion)等);13:修改角色昵称(af_change_role_name)

调用示例:

    UserExtraData data = new UserExtraData();
data.setDataType(UserExtraData.TYPE_CREATE_ROLE);
data.setMoneyNum(100);
data.setRoleCreateTime(System.currentTimeMillis()/1000);
data.setRoleID("1");
data.setRoleName("1");
data.setRoleLevel("1");
data.setRoleLevelUpTime(System.currentTimeMillis()/1000);
data.setServerID(10);
data.setServerName("server_10");
data.setVip("1");
data.setEventId("af_complete_registration");
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("ceshi","ceshi");
} catch (JSONException e) {
e.printStackTrace();
}
data.setCustomData(jsonObject);
data.setUserTags("ceshi");
Map<String, Object> eventData = new HashMap<String, Object>();
eventData.put("af_test_value","af_test_value");
data.setEventData(eventData);
U8Platform.getInstance().submitExtraData(data);

2.8 用户中心(选接)

showAccountCenter(int isEnterGame)

接口说明:

  • 部分渠道会提供用户中心界面显示用户信息,调用此接口可以拉起渠道的用户中心界面,在用户中心界面会有相应的绑定和切换操作。

参数说明:

  • isEnterGame 是否游戏内展示入口 0,是;1,否 //描述:如果游戏可以在选服阶段(1)和游戏内界面(0)展示用户中心入口

调用示例:

    U8Platform.getInstance().showAccountCenter(isEnterGame);

2.9 支付充值(必接)

 pay(Activity context, PayParams payParams)

接口说明:

  • 充值接口,打开SDK充值界面。 充值成功或者失败,会触发初始化监听器中的onPayResult接口

参数说明:

  • context:android 的上下文
  • payParams:支付参数的传递对象

关于PayParams对象:

参数名称参数类型参数说明
productIdString充值商品ID,游戏内的商品ID
productNameString商品名称,比如100元宝,500钻石...
productDescString商品描述,比如 充值100元宝,赠送20元宝
pricedouble充值金额{单位:美元}
buyNumint购买数量,一般都是1
coinNumint玩家当前身上剩余的游戏币
serverIdString玩家所在服务器的ID
serverNameString玩家所在服务器的名称
roleIDString玩家角色ID
roleNameString玩家角色名称
roleLevelString玩家角色等级
vipString玩家vip等级
payNotifyUrlString游戏服务器支付回调地址,渠道SDK支付成功,异步通知U8Server,U8Server根据该地址,通知游戏服务器发货
paySubNotifyUrlString游戏服务器订阅支付回调地址,渠道SDK支付成功,异步通知U8Server,U8Server根据该地址,通知游戏服务器发货
extensionString支付成功之后,U8Server通知游戏服务器时,原样返回给游戏服务器。不要传null和"";长度不超过255
skuTypeString商品类型,订阅商品"subs";普通商品"inapp",google支付用到,其余支付不会用到
product_detailString商品的道具列表,道具信息请按照上面示例传参(非必传)

调用示例:

    PayParams params = new PayParams();
params.setBuyNum(1); //购买数量,固定1
params.setCoinNum(100); //当前玩家身上拥有的游戏币数量
params.setExtension(System.currentTimeMillis()+""); //游戏自定义数据,充值成功,回调游戏服的时候,会原封不动返回。备注:不要传null和"";长度不超过255
params.setPrice(1); //单位:美元
params.setProductId("1"); //产品ID
params.setProductName("元宝"); //产品名称
params.setProductDesc("购买100元宝"); //产品描述
params.setRoleId("1"); //角色ID
params.setRoleLevel(1); //角色等级
params.setRoleName("测试角色名"); //角色名称
params.setServerId("10"); //服务器ID
params.setServerName("测试"); //服务器名称
params.setVip("vip1"); //角色VIP等级
params.setPayNotifyUrl("http://www.game.com/pay/callback"); //支付成功,U8Server异步通知该地址,告诉游戏服务器发货
params.setPaySubNotifyUrl("http://andtest-api.m-co.cn/subtest.php"); //支付成功,U8Server异步通知该地址,告诉游戏服务器订阅成功
params.setSkuType("inapp");//商品类型,订阅商品"subs";普通商品"inapp",google支付用到,其余支付不会用到
List<String> product_details = new ArrayList<>();
JSONObject product_detail_1 = new JSONObject();
product_detail_1.put("mj_daoju_id","ceshi_1");//道具id,游戏自己定义
product_detail_1.put("mj_daoju_name","daoju_1");//道具名称,游戏自己定义
product_detail_1.put("mj_daoju_type","daoju_type_1");//道具类型,游戏自己定义
product_detail_1.put("mj_daoju_value",0.01);//道具价值,游戏自己定义
product_details.add(product_detail_1.toString());
JSONObject product_detail_2 = new JSONObject();
product_detail_2.put("mj_daoju_id","ceshi_2");
product_detail_2.put("mj_daoju_name","daoju_2");
product_detail_2.put("mj_daoju_type","daoju_type_2");
product_detail_2.put("mj_daoju_value",0.01);
product_details.add(product_detail_2.toString());
params.setProduct_detail(product_details.toString());//商品的道具列表
U8Platform.getInstance().pay(this, params);

2.10 获取商品信息列表接口(必接)

备注:这个接口会有预注册奖励发放和补单逻辑处理,因此此接口需要在创角完成之后调用

getGoogleProductList(String server_id,GoogleProductListListener googleProductListListener)

接口说明:

  • 商品信息列表接口,获取google商品列表价格等信息,需要使用

参数说明:

  • server_id:玩家所在服务器的ID
  • googleProductListListener:回调接口

调用示例:

U8Platform.getInstance().getGoogleProductList(server_id,new GoogleProductListListener {
/**
* 获取google商品列表
*/
public void onGoogleProductList(String productList);
});

回调说明:

  • productList 商品列表,类型:json格式的数组
参数名称参数类型参数说明
symbolString国际标准代号
priceString后台商品价格,带货币符号
product_idString商品id和google后台配置一致
titleString商品描述
priceAmountMicroslonggoogle后台商品价格X1000000
priceCurrencyCodeString国际标准代号

回调数据示例:

[{symbol=KRW, priceAmountMicros=8500000000, price=₩8,500, product_id=com.mujoysg.demo.month, title=月卡 (Mujoysg-Demo), priceCurrencyCode=KRW}, {symbol=KRW, priceAmountMicros=16000000000, price=₩16,000, product_id=com.mujoysg.demo.month1, title=无敌 (Mujoysg-Demo), priceCurrencyCode=KRW}]

2.11 恢复订阅商品接口(google渠道用到,选接)

 recoverySub(String server_id,String extra, RecoverySubListener recoverySubListener)

接口说明:

  • 恢复订阅商品接口,google渠道用到。

参数说明:

  • server_id:玩家所在服务器的ID
  • extra:玩家所在服务器的ID
  • recoverySubListener:回调接口

调用示例:

U8Platform.getInstance().recoverySub(server_id, extra, new RecoverySubListener {

/**
* 恢复订阅成功
*/
public void onRecoverySubSuccess();

/**
* 恢复订阅失败
*/
public void onRecoverySubFail();
});

2.12 拉起激励视频广告接口(选接)

gameRewardVideoAd(Activity context, RewardVideoAdInfo rewardVideoAdInfo,RewardVideoAdListener rewardVideoAdListener)

接口说明:

  • 激励视频广告接口,拉起渠道的激励视频广告,广告播放完成触发接口携带的回调监听器中的回调函数,里面有广告相关回调信息

参数说明:

  • context:android的上下文
  • rewardVideoAdInfo:需要传递的参数对象
  • rewardVideoAdListener:回调接口

关于RewardVideoAdInfo对象:

参数名称参数类型参数说明
rewardVideoNameString广告类型名称
callbackUrlString用户激励视频回调地址
rewardVideoAccountString奖励数量
mediaExtraString用户激励视频透传参数
ExtraString用户其它透传参数
Orientationint期望视频播放的方向1:竖屏,2:横屏
eventIDStringappsflyer定义的事件appflyers_event(af定义的)
eventDataStringappsflyer定义的事件描述appflyers_value(af定义的)

调用示例:

    RewardVideoAdInfo info = new RewardVideoAdInfo();
info.setRewardVideoAdID("111111");//广告id
info.setRewardVideoName("激励视频奖励的名称");//奖励的名称
info.setRewardVideoAccount(1); //奖励的数量
info.setOrientation(1);//1:竖屏,2:横屏
info.setUserId("111111111111");//用户id
info.setMediaExtra("视频额外参数");//视频透传参数
info.setExtra("额外参数");//透传参数
Map<String, Object> eventData = new HashMap<String, Object>();
eventData.put("ads_type","zhuanpan");
info.setEventId("af_showads");
info.setEventData(eventData);
U8Platform.getInstance().gameRewardVideoAd(MainActivity.this, info, new RewardVideoAdListener(){
@Override
public void onRequestADFail(int errorCode){
//请求失败,errorCode错误码
}
@Override
public void onRewardVideoAdComplete() {
//视频播放完成
}
@Override
public void onRewardVideoAdCancel() {
//视频播放过程中取消回调
}
@Override
public void onRewardVideoAdClose(Boolean isNeedServerNotice) {
//视频播放完成,关闭视频界面回到游戏界面
//isNeedServerNotice 是否需要服务通知发放奖励,true 是有服务端通知,false是没有服务端通知
}
@Override
public void onRequestADSuccess() {
//请求视频广告成功
}
@Override
public void onRewardVideoAdSkipped() {
//视频跳过
}
});

2.13 google评论(功能不稳定,弃用)

openGoogleComment(String comment_reason,OnGoogleCommentListener commentListener)

接口说明:

  • google评论接口,拉起google评论界面

参数说明:

  • comment_reason:游戏里面的触发条件
  • commentListener:回调接口

调用示例:

   U8Platform.getInstance().openGoogleComment(comment_reason, new OnGoogleCommentListener() {
@Override
public void googleCommentSuceess() {
//评论成功
}

@Override
public void googleCommentFail() {
//评论失败
}
});

2.14 打开NAVER游戏—主页横幅接口(选接)

openNaverComment(Activity activity)

接口说明:

  • 打开NAVER社区接口,调用此接口进入到NAVER渠道界面,此接口没有回调。

参数说明:

  • context:android的上下文

调用示例:

    U8Platform.getInstance().openNaverComment(activity);

2.15 数数科技上报接口(必接)

submitTAUserInfo(int eventType,String eventID,JSONObject jsonObject)

接口说明:

  • 调用数数科技上报接口,上报事件和用户属性数据

参数说明:

  • eventType:上报类型(0:事件上报;1:用户数据上报set;2:用户数据上报setOnce;3:用户数据上报add);4:设置事件的公共属性;6:设置一次性事件上报;7:设置可更新事件上报
  • eventID:上报事件名(用户数据上报set,add,setOnce和设置公共属性时传null或"",事件上报不能为null和"")
  • jsonObject:上报属性数据(必传,不可传null)

调用示例:

   U8Platform.getInstance().submitTAUserInfo(eventType, eventID, jsonObject);
上报时机:角色名称,登出角色和切换角色以示例标准传,其余的事件按照运营提供的文档传参
角色名称修改时上报,类型:set(eventType=1),jsonObject.put("mj_role_name",role_name);
登出角色后时上报 类型:事件上报(eventType=0);eventID="mj_logout_role"(固定的)
切换角色时上报 类型:事件上报(eventType=0);eventID="mj_change_role"(固定的)
角色名称修改
JSONObject jsonObject = new JSONObject();
jsonObject.put("mj_role_name","role_武侠");
U8Platform.getInstance().submitTAUserInfo(1, "", jsonObject);
登出角色
JSONObject jsonObject = new JSONObject();
U8Platform.getInstance().submitTAUserInfo(0, "mj_logout_role", jsonObject);
切换角色
JSONObject jsonObject = new JSONObject();
U8Platform.getInstance().submitTAUserInfo(0, "mj_change_role", jsonObject);
上报公共属性
JSONObject jsonObject = new JSONObject();
jsonObject.put("game_version","1.1.1");
U8Platform.getInstance().submitTAUserInfo(4, "", jsonObject);

2.16 初始化问卷接口(选接)

initUserSurver(String roleID, String serverID,String callbackUrl,OnInitUserSurverListener onInitUserSurverListener)

接口说明:

  • 初始化问卷接口,是否显示问卷入口。

参数说明:

  • roleID:玩家角色ID
  • serverID:玩家所在服务器的ID
  • callbackUrl:问卷回调地址
  • onInitUserSurverListener:初始化问卷回调

调用示例:

    U8Platform.getInstance().initUserSurver(roleID, serverID, callbackUrl, new OnInitUserSurverListener {
//初始化问卷,是否显示问卷入口
public void initUserSurver(Boolean isUserSurveyOpen);
//true:显示问卷入口,false:不显示问卷入口
});

2.17 打开问卷接口(选接)

openUserSurveyActivity()

接口说明:

  • 打开问卷接口,调用此接口进入到问卷显示界面。

调用示例:

    U8Platform.getInstance().openUserSurveyActivity();

2.18 打开NAVER游戏—维护页接口(选接)

openNaverCommentSorry(Activity activity)

接口说明:

  • 打开NAVER社区维护页接口,调用此接口进入到NAVER渠道维护页界面,此接口没有回调。

参数说明:

  • context:android的上下文

调用示例:

    U8Platform.getInstance().openNaverCommentSorry(activity);

2.19 打开NAVER游戏—公告栏接口(选接)

openNaverCommentBoard(Activity activity,int boardId)

接口说明:

  • 打开NAVER社区公告栏接口,调用此接口进入到NAVER渠道公告界面,此接口没有回调。

参数说明:

  • context:android的上下文
  • boardId:公告id,NAVER后台获取

调用示例:

    U8Platform.getInstance().openNaverCommentBoard(activity,boardId);

2.20 切换账号接口(选接)

switchAccount(Activity context)

接口说明:

  • 切换账号接口,打开SDK切换账号界面,切换成功或者失败,会触发上面初始化监听器中的onSwitchAccount回调函数

参数说明:

  • context:android的上下文

调用示例:

    U8Platform.getInstance().switchAccount(activity);

2.21 绑定账号接口(选接)

bindAccount(Activity context)

接口说明:

  • 绑定账号接口,打开SDK绑定账号界面,绑定成功,会触发上面初始化监听器中的onBindAccountResult回调函数

参数说明:

  • context:android的上下文

调用示例:

    U8Platform.getInstance().bindAccount(activity);

2.22 获取国家等用户属性接口(选接)

getUserInfo(U8GetUserInfoListener u8GetUserInfoListener)

接口说明:

  • 获取国家等用户属性接口,

参数说明:

  • u8GetUserInfoListener:接口回调

调用示例:

    U8Platform.getInstance().getUserInfo(new U8GetUserInfoListener() {
@Override
public void onGetUserInfoSuccess(String info) {
Log.d("U8SDK", "===onGetUserInfoSuccess"+info);
}

@Override
public void onGetUserInfoFail() {
Log.d("U8SDK", "===onGetUserInfoFail");
}
});
info信息是json字符串,示例:
{"country":"HK","totalCharge":0,"regTime":"2022-05-27 15:44:33","retainedDays":4,"totalChargeNum":0,"userID":2000000371,"sdkUserID":"57948a1c935ce412","currentCountry":"US"}
说明:
userID:用户唯一标识
sdkUserID:平台userid
country:首次注册时的国家
currentCountry:登录时的国家
firstChargeTime:首次付费时间
lastChargeTime:最近一次付费时间
regTime:注册时间
retainedDays:活跃天数
sdkUserID:平台userid
totalCharge:总充值金额
totalChargeNum:总充值次数

2.23 打开游戏社区接口(选接)

getComunityCenter(Activity activity, String comunityName)

接口说明:

  • 游戏社区接口,调用接口,打开社区界面。

参数说明:

  • comunityName:社区名称,Facebook,Instagram,Discord,Reddit,Twitter,Youtube,Line,Bahamut,Cafe,目前只有9个。cafe是sdk接口模式,只能拉起主页横幅界面,其余都是链接模式,拉起webview界面显示

调用示例:

U8Platform.getInstance().getComunityCenter(activity, comunityName);

2.24 打开请求通知权限接口(选接)

openNotifications()

接口说明:

  • 请求通知权限接口,调用接口,打开请求通知说明。
  • Android 13 引入了用于显示通知的新运行时权限。这会影响在 Android 13 或更高版本上运行的所有使用 FCM 通知的应用。用户授予此权限之前,您的应用将无法显示通知,因此需要调用此接口打开通知权限设置。相关链接:https://firebase.google.cn/docs/cloud-messaging/android/client
  • 调用接口显示弹框界面的规则:
    • 1.一天最多弹出一次(0-24点算一天)
    • 2.每个设备7天内最多弹出2次;超过2次后,7天内内不再弹出
    • 3.用户开启后,该用户不再弹出
    • 4.app删除重装后,重新计算次数
    • 5.仅针对Android 13 及以上的设备弹框

调用示例:

U8Platform.getInstance().openNotifications();

2.25 客服功能(选接)

2.25.1 是否开启FAQ功能

getShowFAQ()

接口说明:

  • 判断游戏是否开启FAQ功能,请在Init通知成功后调用。若运营人员在发行后台开启FAQ模块开关,该方法将返回true,若运营人员未开启FAQ模块,该方法将返回false。

调用示例:

Boolean isOpenShowFAQ = U8SDK.getInstance().getShowFAQ();

2.25.2 是否开启客服系统功能

getShowConversation()

接口说明:

  • 判断游戏是否开启客服系统功能,请在Init通知成功后调用。若运营人员在发行后台开启"客服系统"开关,该方法将返回true,若运营人员未开启"客服系统"模块,该方法将返回false。

调用示例:

Boolean isOpenConversation = U8SDK.getInstance().getShowConversation();

2.25.3 FAQ模块

showFAQ()

接口说明:

  • 点击进入FAQ页面

调用示例:

U8Platform.getInstance().showFAQ();

2.25.4 客服系统模块

showConversation()

接口说明:

  • 点击进入客服系统页面

调用示例:

U8Platform.getInstance().showConversation();

2.26 获取游戏虚拟币数据接口

getAccountVirtualCoinNum(OnU8AccountVirtualCoinNumListener onU8AccountVirtualCoinNumListener)

接口说明:

  • 获取虚拟币相关的数据,虚拟币名称,虚拟币icon地址,虚拟币数量和虚拟币说明。

调用示例:

    U8Platform.getInstance().getAccountVirtualCoinNum(new OnU8AccountVirtualCoinNumListener() {
@Override
public void getAccountVirtualCoinNumSuccess(String info) {

}

@Override
public void getAccountVirtualCoinNumFail() {

}
});
info信息是json字符串,示例:
{"virtual_coin_num":101,"virtual_coin_name":"test1-英","virtual_coin_icon":"https://pic.leduimg.com/pic-ledu-com/productEnvironment/1RCFRiJ_a5d831a71487fcb6eaaf75c0ee866d57.jpeg","virtual_coin_desc":"test1-desc-英"}
说明:
virtual_coin_num:虚拟币数量
virtual_coin_name:虚拟币名称
virtual_coin_icon:虚拟币icon地址
virtual_coin_desc:虚拟币说明

2.27 Facebook分享功能接口

share(ShareParams shareParams)

接口说明:

  • Facebook分享接口,暂时只做了分享本地图片接口,并且一次只能分享一张图片。分享成功或者失败,会触发上面初始化监听器中的onShareResult回调函数

参数说明:

  • shareParams:分享需要传递的参数

关于ShareParams对象:

参数名称参数类型参数说明
urlString分享的图片的网络链接

特殊设置:

  • 将 ContentProvider 添加至 AndroidManifest.xml 文件,并将 {APP_ID} 设置为您的应用编号
    <provider 
android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>

调用示例:

    ShareParams shareParams = new ShareParams();
shareParams.setUrl("https://nativesupport.dcloud.net.cn/test.jpg");
U8Platform.getInstance().share(shareParams);

2.28 菜单项目调用功能接口

openMeMenuItem(int itemTye)

接口说明:

  • 菜单项目调用功能,调用之后打开相应的菜单项目

参数说明:

  • itemTye:跳转目标菜单类别

关于itemTye:

    public class MeMenuItem {
//跳转到DMM GAMES STORE应用
public static final int ITEM_DMM_GAMES_STORE = 1;
//跳转到DMM 积分充值界面
public static final int ITEM_DMM_POINT_CHARGE = 2;
//跳转到关于GAMES使用条款的页面。
public static final int ITEM_DMM_TERM = 3;
//跳转到游戏专用的咨询表单。
public static final int ITEM_DMM_INQUIRY = 4;
//跳转到DMM GAMES Platform的游戏专用社区页面。
public static final int ITEM_DMM_COMMUNITY = 5;
//跳转到DMM GAMES Platform上的游戏设置界面
public static final int ITEM_DMM_SETTINGS = 6;
//跳转到DMM GAMES STORE应用内的“我的游戏”
public static final int ITEM_DMM_MY_GAME = 7;
//跳转到DMM GAMES STORE应用内的运营方通知界面。
public static final int ITEM_DMM_ANNOUNCEMENT = 8;
//跳转到DMM的账号管理界面。
public static final int ITEM_DMM_ACCOUNT_PAGE = 9;
//跳转到DMM GAMES STORE的游戏详情界面
public static final int ITEM_DMM_APPLICATION_UPDATE =10;
}

调用示例:

    U8Platform.getInstance().openMeMenuItem(MeMenuItem.ITEM_DMM_GAMES_STORE);

支付测试的其它操作

1.google需要添加测试账号(两处:公司主体主账号下要添加,项目下的测试人员也要添加),测试账号加入测试计划(添加测试人员下面有个链接,测试账号需要同意一下) 2.onestore的包上传的时候需要上传一下处理过的签名文件信息,处理步骤在onestore后台传包步骤里面有相关的代码,需要找运营提供;onestore包也需要添加测试账号。 3.xsolla支付区分沙箱环境和正式环境,相关的配置是assets/u8_developer_config.properties里面的XSOLLA_PAY_SETTINGS,true是沙箱环境,false是正式环境。 4.xsolla重定向处理,需要在AndroidManifest.xml里面添加相关配置,如果solla后台的重定向配置是:app://mujoy.sg,那就需要在AndroidManifest.xml的activity添加以下声明。data里面的配置和xsolla后台配置是需要对应。

<activity
android:name="com.xsolla.android.payments.ui.ActivityPaystationBrowserProxy"
android:exported="true"
android:configChanges="orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/xsolla_payments_Theme">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mujoy.sg"
android:scheme="app" />
</intent-filter>
</activity>

5.qoo支付区分沙箱环境和正式环境,相关配置是AndroidManifest.xml的两个meta-data参数,SAND开头的代表是沙箱环境参数,PROD开头的是正式环境参数

<meta-data
android:name="com.qooapp.APP_ID" android:value="SAND5476a6e0f94711ed931ae23bc1590402" />
<meta-data
android:name="com.qooapp.PUBLIC_KEY" android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8A4C2iK3oibULQli+bKjkawDCMdxqBh2RlV1l/+AEkwNnbBPshsEEwVAzTzHYMFfiBU3D/o74HYXxkTYdnfMEl5y8lF+VWSW0RFRJBm21tYyxzVqHS661RDHUOPahHfMn8wZCfrZfKEV6+EPl05IDv934rKGtZU+s20/Kcffnmw3ZNZJJPMedtKKA+jYA+TdfpghbC8rzev/1BKwNiWaDyYHc738s3eGerJJx11E45HEgV7gn4hKS5TCvzQiMQN3gi7T4fTxAPFx57dGvR/SNcuLeThe4h+GwdzJsrZaByQyvZf2V6v+hQzdpQ4NrXV9jtvv5qRvKFLlKRFCch5kfwIDAQAB" />

6.qoo沙箱环境参数测试支付正常,切换正式参数之后支付拉起异常提示"Service not available-4",这个需要运营找qoo技术处理。 7.samsung支付测试环境设置

    MKOverseasPay.getInstance().setPayOperationMode(true);

备注(特殊参数获取)

渠道号
U8SDK.getInstance().getCurrChannel();
访客id,游戏服务端上报数数数据用到,初始化成功之后获取
U8SDK.getInstance().getDistinctID();
是否是游客账号,登录成功之后获取
U8SDK.getInstance().getIsVisitor();
TA预置属性数据接口,游戏服务端用到,游戏解析获取需要用到的参数
String properties = U8SDK.getInstance().getPresetProperties()
字符串类型(json),示例:
{
"#carrier": "中国电信",
"#os": "Android",
"#device_id": "abb8e87bfb5ce66c",
"#screen_height": 2264,
"#bundle_id": "com.sw.thinkingdatademo",
"#manufacturer": "realme",
"#device_model": "RMX1991",
"#screen_width": 1080,
"#system_language": "zh",
"#os_version": "10",
"#network_type": "WIFI",
"#zone_offset": 8
"#app_version":"1.0.0"
}
说明:
carrier://手机SIM卡运营商信息,双卡双待时,取主卡的运营商信息
os://os类型,如Android
device_id://设备唯一标识
screen_height://屏幕高度
bundle_id://包名
manufacturer://手机制造商 如HuaWei
device_model://设备型号
screen_width://屏幕宽度
system_language://手机系统语言类型
os_version://系统版本号
network_type://网络类型
zone_offset://时区偏移值
app_version://app版本号