Appearance
初始化
WARNING
初始化接口,需要在游戏主Activity中的onCreate方法中尽早调用。
设置SDK事件监听器
聚合SDK在完成初始化、登录成功/失败、登出、支付成功/失败等时机,都会通过事件监听器通知给游戏层, 游戏层需要在初始化时,设置U8InitListener对象:
点击查看代码
java
private U8InitListener sdkListener = new U8InitListener() {
/**
* 初始化回调
* @param code
* @param msg
*/
@Override
public void onInitResult(int code, String msg) {
Log.d("U8SDK", "init result.code:"+code+";msg:"+msg);
switch(code){
case U8Code.CODE_INIT_SUCCESS:
Toast.makeText(MainActivity.this, "初始化成功", Toast.LENGTH_LONG).show();
break;
case U8Code.CODE_INIT_FAIL:
Toast.makeText(MainActivity.this, "初始化失败", Toast.LENGTH_LONG).show();
break;
}
}
/**
* 登录回调
* @param code
* @param data
*/
@Override
public void onLoginResult(int code, UToken data) {
Log.d("U8SDK", "init result.code:"+code);
switch(code){
case U8Code.CODE_LOGIN_SUCCESS:
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();
break;
case U8Code.CODE_LOGIN_FAIL:
case U8Code.CODE_LOGIN_AUTH_FAILED:
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
break;
}
}
/**
* 从渠道SDK的悬浮窗-》用户中心中完成账号切换
* 已经切换到新的账号了,UToken中是新的账号信息
* TODO: 游戏层收到该回调, 需要引导玩家返回到游戏登录界面,用UToken中新的账号信息,重新进入游戏
* @param data
*/
@Override
public void onSwitchAccount(UToken data) {
Log.d("U8SDK", "onSwitchAccount called");
}
/**
* 从渠道SDK的悬浮窗-》用户中心中登出账号
* TODO: 游戏层收到该回调, 需要引导玩家返回到游戏登录界面,重新调用登录接口,弹出SDK的登录界面,让玩家重新登录,进入游戏
*/
@Override
public void onLogout() {
Log.d("U8SDK", "onLogout called");
}
/**
* 支付回调
* @param code
* @param msg
*/
@Override
public void onPayResult(int code, String msg) {
Log.d("U8SDK", "pay result. code:"+code);
switch(code){
case U8Code.CODE_PAY_SUCCESS:
Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_LONG).show();
//因为部分SDK支付成功回调触发的时机并不是真的支付成功,所以这里最好不要主动给用户提示, 以SDK充值界面中显示的状态为准。
break;
case U8Code.CODE_PAY_FAIL:
Toast.makeText(MainActivity.this, "支付失败", Toast.LENGTH_LONG).show();
//因为部分SDK支付界面关闭可能也会触发支付失败回调,所以这里最好不要主动给用户提示, 以SDK充值界面中显示的状态为准。
break;
case U8Code.CODE_PAY_CANCEL:
Toast.makeText(MainActivity.this, "支付取消", Toast.LENGTH_LONG).show();
break;
case U8Code.CODE_PAY_UNKNOWN:
Toast.makeText(MainActivity.this, "未知错误", Toast.LENGTH_LONG).show();
break;
}
}
/**
* 目前用不到
* @param realNameInfo
*/
@Override
public void onRealnameResult(URealNameInfo realNameInfo) {
}
/**
* 如果是单机游戏,可以在该回调中给玩家发放道具
* @param code
* @param order
*/
@Override
public void onSinglePayResult(int code, U8Order order) {
}
/**
* 目前用不到
* @param result
*/
@Override
public void onProductQueryResult(List<ProductQueryResult> result) {
}
/**
* SDK销毁回调
*/
@Override
public void onDestroy() {
}
/**
* 其他事件回调
* @param code 可以参考:com.u8.sdk.U8Code
* @param msg
*/
@Override
public void onResult(int code, String msg) {
switch (code){
case U8Code.CODE_U8_INIT_SUCCESS:
// U8框架初始化成功, data是json格式,包含服务端时间戳,后台配置的动态参数等:
// {"gameParams":"{\"test_123\":\"测试值\"}","serverTimestamp":"1712993299286","localTimestamp":"1712993298698"}
Log.d("U8SDK", "u8 init success:"+msg);
break;
case U8Code.CODE_U8_INIT_FAILED:
// U8框架初始化失败
Log.d("U8SDK", "u8 init failed");
break;
case U8Code.CODE_MY_ROLES_FETCHED:
// 当前玩家的角色列表获取成功
// msg是json array格式,格式如下:
// [
// {
// "roleID":"1",
// "roleName":"test_11",
// "roleLevel":"1",
// "serverID":"1",
// "serverName":"测试1服",
// "vip":"1",
// "createTime":"2024-04-03 10:36:42",
// "lastLevelUpTime":"2024-04-03 10:36:42",
// "lastGameTime":"2024-04-03 10:36:42",
// "extraData":"111,222,333",
// "deviceID":"",
// "ip":"172.261.122.27"
// },
// {...}
// ]
// U8Platform.getInstance().fetchMyRoles(); 该接口对应的回调
Log.d("U8SDK", "fetch my roles success:"+msg);
break;
case U8Code.CODE_MY_ROLES_FETCH_FAILED:
Log.d("U8SDK", "fetch my roles failed:"+msg);
break;
case U8Code.CODE_SERVERS_FETCHED:
// 服务器列表获取成功
// msg是json array格式,格式如下:
// [
// {
// "autoCloseTime":"",
// "autoOpenTime":"2024-04-03 00:00:00",
// "createTime":"2024-04-03 10:36:46",
// "extra":"",
// "internalID":"abcdefgh",
// "mergeServerIDs":"",
// "openTime":"2024-04-03 10:36:42",
// "payNotifyUrl":"",
// "serverAddr":"172.16.3.200:5000",
// "serverID":"2",
// "serverName":"青山绿水2服",
// "serverTags":"热门,新",
// "sortIndex":"0",
// "status":0
// },
// {...}
// ]
// U8Platform.getInstance().fetchServers(1, 10); 该接口对应的回调
Log.d("U8SDK", "fetch servers success:"+msg);
break;
case U8Code.CODE_SERVERS_FETCH_FAILED:
// 服务器列表获取失败
Log.d("U8SDK", "fetch servers failed:"+msg);
break;
case U8Code.CODE_MESSAGE_FETCHED:
//公告消息获取成功,msg中是消息列表
Log.d("U8SDK", "fetch messages success:"+msg);
break;
case U8Code.CODE_MESSAGE_FETCH_FAILED:
//公告消息获取失败
Log.d("U8SDK", "fetch messages failed:"+msg);
break;
}
}
};
上面监听事件通知中, 有两个地方的处理逻辑,需要注意一下:
1、onSwitchAccount通知
当玩家从渠道SDK的悬浮窗-》用户中心中完成账号切换时,会触发该通知。 这个时候,玩家的渠道账号已经切换到新账号了, 所以游戏层收到该通知时, 需要注意下处理的逻辑:
引导玩家返回到游戏登录界面, 使用UToken中的新账号信息,重新进入游戏。 此时,不要再调用login接口了。
2、onLogout通知
当玩家从渠道SDK的悬浮窗-》用户中心中点击登出时,会触发该通知。 这个时候, 玩家的渠道账号已经登出了, 游戏层收到该通知时,按如下逻辑处理:
引导玩家返回到游戏登录界面, 并再次调用login接口, 弹出SDK登录界面,让玩家重新登录后,再进入游戏。
调用初始化接口
在游戏主Activity中的onCreate函数中,尽早调用init接口:
注意
如果游戏有多个Activity, 一定要在游戏主Activity(也就是引擎Activity)的onCreate中调用初始化接口, 而非Launcher Activity。
java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(ResourceHelper.getIdentifier(this, "R.layout.activity_main"));
this.initUI();
U8Platform.getInstance().init(this, sdkListener);
}