Skip to content

初始化

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);   
    }

版权所有© 2021-2030 上海丞诺网络科技有限公司