跳到主要内容
版本:1.8.7

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

版本

当前版本 1.8.7 历史版本

SDK功能

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

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需要添加以下几个依赖
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
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.android.play:core:1.9.0'
implementation 'com.google.firebase:firebase-messaging:23.0.6'
implementation 'com.google.firebase:firebase-analytics:20.1.2'
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'
implementation 'com.google.android.gms:play-services-appset:16.0.0'
}
2.SDK相关的jar包
1.把libs下面的.jar复制到游戏工程的libs下,并添加引用;包含android-support-multidex.jar,u8sdk3.jar,Java-WebSocket-1.4.0.jar,javax.websocket-api-1.1.jar,slf4j-api-1.7.21.jar,slf4j-log4j12-1.7.2.jar;
3.添加 Firebase 配置文件
①将 Firebase Android 配置文件添加到您的应用:
点击下载 google-services.json 以获取 Firebase Android 配置文件 (google-services.json(运营提供))。
将配置文件移动到应用的模块(应用级)目录中。
②将 Google 服务插件添加到 Gradle 文件中。
在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以纳入 Google 服务 Gradle 插件。此外,请确认您拥有 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
}
}

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 {

}
3.打包的targetSdkVersion要设置成31,编译版本compileSdkVersion要设置成33.

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

2.2 Application 配置

方式一:如果游戏层没有自己的Application,那么游戏需要将AndroidManifest.xml中的application指定为 com.u8.sdk.U8Application。
<application
android:name="ccom.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 单例类来调用

该方法必须在游戏启动Activity的onCreate方法中,调用
U8Platform.getInstance().init(this, new U8InitListener() {

@Override
public void onSwitchAccount(UToken data) {
//游戏中通过SDK切换到新账号的回调,游戏收到该回调,需要引导用户重新登录,重新加载该新用户对应的角色数据
//登录成功
//进入游戏
//从UToken中获取用户信息
//渠道SDK登录并去u8server登录认证成功,会回调改方法。
//UToken中的参数如下:
//userID:U8Server生成的唯一用户ID,
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该userID进行绑定。
//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中的参数如下:
//userID:U8Server生成的唯一用户ID,
//sdkUserID:渠道SDK平台用户唯一ID,游戏服务器需要将游戏账户ID和该sdkUserID进行绑定。
//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 登录接口(游戏没有获取手机唯一标识的接这个)

调用登录接口,打开SDK登录界面,登录成功或者失败,会触发上面初始化监听器中的onLoginResult回调函数
接口:
public void login(Activity context);
调用方式:
U8Platform.getInstance().login(context);

2.6 登录接口(游戏有获取手机唯一标识的可以接这个)

游戏有账号体系的调用登录接口,登录成功或者会触发初始化监听器中的onLoginResult回调函数
接口:
public void accountLogin(String account);
参数
account   设备号或者账号标识,游戏里生成的唯一标识
调用方式:
U8Platform.getInstance().accountLogin(account);

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

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

部分渠道要求在 选择服务器,创建角色,登录游戏,角色升级,退出游戏 等时刻,必须要上报游戏中玩家数据,以便渠道后台统计用户数据。所以,游戏层需要在特定的地方多次调用该方法。
接口:
public void submitExtraData(UserExtraData extraData)
调用方式:
UserExtraData data = new UserExtraData();
data.setDataType(UserExtraData.TYPE_CREATE_ROLE);
data.setMoneyNum(100);
data.setRoleCreateTime(System.currentTimeMillis()/1000);
data.setRoleID("role_100");
data.setRoleName("test_112");
data.setRoleLevel("10");
data.setRoleLevelUpTime(System.currentTimeMillis()/1000);
data.setServerID(10);
data.setServerName("server_10");
data.setEventId(eventID);
Map<String, Object> eventData = new HashMap<String, Object>();
eventData.put("af_test_value","af_test_value");
data.setEventData(eventData);
U8Platform.getInstance().submitExtraData(data);
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; //修改角色昵称
游戏必须要调用的类型如下(括号里面是上传af用到的eventID):
1:选择服务器; 2:创建角色(af_complete_registration); 3:进入游戏(af_login); 4:等级提升(af_level_achieved); 5:退出游戏; 10:设备进入游戏(loading_success); 11:设备开始进服(loading_start); 12:其他事件(设备加载过程(loading_xx),角色完成引导(af_tutorial_completion)等);13:修改角色昵称(af_change_role_name)

关于UserExtraData 数据结构:
参数名称 参数类型 参数说明
dataType int 调用时机
serverID String 玩家所在服务器的ID
serverName String 玩家所在服务器的名称
roleID String 玩家角色ID
roleName String 玩家角色名称
roleLevel String 玩家角色等级
moneyNum String 当前角色身上拥有的游戏币数量
roleCreateTime long 角色创建时间,单位秒,必须传入真实的数据
roleLevelUpTime long 角色等级变化时间,从1970年到现在的时间,单位秒
vip String 玩家VIP等级
eventID String appsflyer定义的事件appflyers_event(af定义的)
eventData String appsflyer定义的事件描述appflyers_value(af定义的)

2.8 用户中心

部分渠道会提供用户中心界面显示用户信息,调用此接口可以拉起渠道的用户中心界面,在用户中心界面会有相应的绑定和切换操作,切换账号成功会调用初始化的onSwitchAccount(UToken data)回调,游戏需要在此操作里面引导用户重新登录,重新加载该新用户对应的角色数据 。
接口:
public void showAccountCenter(int isEnterGame)
参数:
isEnterGame 是否游戏内展示入口 0,是;1,否
//描述:如果游戏可以在选服阶段(1))和游戏内界面(0)展示用户中心入口
调用方式:
U8Platform.getInstance().showAccountCenter(isEnterGame);

2.9 支付充值

调用充值接口,打开SDK充值界面。 充值成功或者失败,会触发上面初始化监听器中的onPayResult接口
接口:
public void pay(Activity context, final PayParams data);
调用方式:
PayParams params = new PayParams();
params.setBuyNum(1); //购买数量,固定1
params.setCoinNum(100); //当前玩家身上拥有的游戏币数量
params.setExtension(System.currentTimeMillis()+""); //游戏自定义数据,充值成功,回调游戏服的时候,会原封不动返回,长度不超过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);

关于PayParams对象:

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

2.10 获取商品信息列表接口

    /**
* 备注:这个接口会有预注册奖励发放和补单逻辑处理,因此此接口需要在创角完成之后调用
*/
调用商品信息列表接口,获取渠道后台配置的商品列表信息,触发接口携带的回调监听器中的回调函数。
接口:
getGoogleProductList(String server_id,GoogleProductListListener googleProductListListener);
调用方式:
U8Platform.getInstance().getGoogleProductList(server_id,googleProductListListener);
回调函数:
public interface GoogleProductListListener {
/**
* 获取google商品列表
*/
public void onGoogleProductList(String productList);
}
回调参数:
GoogleProductListListener 游戏获取商品信息列表回调
productList 商品列表,类型:json格式的数组
示例: [{"symbol":"HKD","price":"HK$8.00","product_id":"com.mujoy.ppxcq.mk.newbie1","title":"新手礼包(我是传奇)"},{"symbol":"HKD","price":"HK$8.00","product_id":"com.mujoy.ppxcq.mk.month","title":"月卡 (我是传奇)"}]

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

调用恢复订阅商品接口,渠道服务端续订订阅,触发接口携带的回调监听器中的回调函数。
接口:
recoverySub(String server_id,String extra, RecoverySubListener recoverySubListener)
调用方式:
U8Platform.getInstance().recoverySub(server_id, extra, recoverySubListener);
回调函数:
public interface RecoverySubListener {

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

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

2.12 拉起激励视频广告接口

调用激励视频广告接口,拉起渠道的激励视频广告,触发接口携带的回调监听器中的回调函数,里面有广告相关回调信息
接口:
public void gameRewardVideoAd(Activity context, RewardVideoAdInfo info,RewardVideoAdListener rewardVideoAdListener);
参数:
RewardVideoAdInfo info
参数名 参数类型 参数描述
rewardVideoAdID string 广告id
rewardVideoName string 广告类型名称
userId string 用户id
callbackUrl string 用户激励视频回调地址
rewardVideoAccount string 奖励数量
mediaExtra string 用户激励视频透传参数
Extra string 用户其它透传参数
Orientation int 期望视频播放的方向1:竖屏,2:横屏
eventID String appsflyer定义的事件appflyers_event(af定义的)
eventData String appsflyer定义的事件描述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());
回调函数:
public interface 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评论

调用google评论接口,拉起google评论界面
接口:
public void openGoogleComment(String comment_reason,OnGoogleCommentListener commentListener)
参数:
comment_reason:游戏里面的触发条件
调用方式:
U8Platform.getInstance().openGoogleComment(comment_reason, new OnGoogleCommentListener() {
@Override
public void googleCommentSuceess() {
//评论成功
}

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

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

打开NAVER社区接口,调用此接口进入到NAVER渠道界面,此接口没有回调。
接口:
openNaverComment(Activity activity)
调用方式:
U8Platform.getInstance().openNaverComment(activity);

2.15 数数科技上报接口

调用数数科技上报接口,上报事件和用户属性数据
接口:
public void submitTAUserInfo(int eventType,String eventID,JSONObject jsonObject)
参数:
eventType 上报类型(0:事件上报;1:用户数据上报set;2:用户数据上报setOnce;3:用户数据上报add);4:设置事件的公共属性;6:设置一次性事件上报
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)
调用方式:
U8Platform.getInstance().initUserSurver(roleID, serverID, callbackUrl, onInitUserSurverListener);
参数:
roleID:角色id
serverID:服务器id
callbackUrl 问卷回调地址
onInitUserSurverListener:初始化问卷回调
回调函数:
public interface OnInitUserSurverListener {

//初始化问卷,是否显示问卷入口
public void initUserSurver(Boolean isUserSurveyOpen);
//true:显示问卷入口,false:不显示问卷入口
}

2.17 打开问卷接口

打开问卷接口,调用此接口进入到问卷显示界面。
接口:
openUserSurveyActivity()
调用方式:
U8Platform.getInstance().openUserSurveyActivity();

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

打开NAVER社区接口,调用此接口进入到NAVER渠道界面,此接口没有回调。
接口:
openNaverCommentSorry(Activity activity)
调用方式:
U8Platform.getInstance().openNaverCommentSorry(activity);

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

打开NAVER社区接口,调用此接口进入到NAVER渠道界面,此接口没有回调。
接口:
openNaverCommentBoard(Activity activity,int boardId )
参数:
int boardId 公告id,NAVER后台获取
调用方式:
U8Platform.getInstance().openNaverCommentBoard(activity,boardId);

2.20 切换账号接口

调用切换账号接口,打开SDK切换账号界面,切换成功或者失败,会触发上面初始化监听器中的onSwitchAccount回调函数
接口:
public void switchAccount(Activity context);
调用方式:
U8Platform.getInstance().switchAccount(activity);

2.21 绑定账号接口

调用绑定账号接口,打开SDK绑定账号界面,绑定成功,会触发上面初始化监听器中的onBindAccountResult回调函数
接口:
public void bindAccount(Activity context);
调用方式:
U8Platform.getInstance().bindAccount(activity);

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

调用接口,获取国家等用户属性,
接口:
public void getUserInfo(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);
调用方式:
U8Platform.getInstance().getComunityCenter(activity, comunityName);
参数说明:
comunityName:社区名称,Facebook,Instagram,Discord,Reddit,Twitter,Youtube,Line,Bahamut,Cafe,目前只有9个。cafe是sdk接口模式,只能拉起主页横幅界面,其余都是链接模式,拉起webview界面显示

2.24 打开请求通知权限接口

调用接口,打开请求通知说明。
接口:
openNotifications();
调用方式:
U8Platform.getInstance().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 及以上的设备弹框

备注(特殊参数获取)

访客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版本号