返回顶部

云步zeus base sdk集成文档_Android(v4.0.7)

1. 导入SDK资源

1.1 获取SDK

下载SDK: zeus_base_v4.0.7.zip

1.2 Android Studio集成(集成方式一)

1.2.1 添加SDK

a. 将aar文件拷贝到应用级app下的libs文件夹中

b. 打开应用级app下的build.gradle文件添加以下代码

        //依赖aar需要添加下面代码
        repositories {
            flatDir {
                dirs 'libs'
            }
        }

c. 在“dependencies”中添加下面的依赖,'com.android.support:appcompat-v7:27.1.1'这个库是必须添加的

        //添加云步zeus base sdk
        implementation(name: 'zeus_base_api_v4.0.7', ext: 'aar')

        //添加其他需要的依赖库,此依赖库必须添加,且不能低于此版本,如果有版本冲突的问题,请反馈我们
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support:recyclerview-v7:27.1.1'

1.3 Eclipse集成(集成方式二)

1.3.1 添加SDK

a. 将"Eclipse/libs"文件夹下所有文件复制到工程的libs文件夹下

2. AndroidManifest.xml及其他配置

2.1 添加权限配置

a. 在AndroidManifest.xml文件中添加以下权限:

        <!-- 需要的权限 start(直接复制即可) -->
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 需要的权限 end -->

2.2 配置Application(必须)

  • Application必须配置,否则SDK无法正常工作。

a. 在AndroidManifest.xml文件中,把application节点的android:name属性设置为com.zeus.core.api.base.ZeusApplication

        <!-- 配置云步SDK的Application -->
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:name="com.zeus.core.api.base.ZeusApplication" >
            ……

        </application>

b. 如果游戏需要配置自己的Application,则游戏的Application继承ZeusApplication,然后在AndroidManifest.xml文件中配置成游戏的Application即可:

        <!-- 配置游戏的Application,游戏的Application继承ZeusApplication -->
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:name="com.zeus.core.demo.GameApplication" >
            ……

        </application>

2.3 全面屏适配

a. 在AndroidManifest.xml文件中的application节点下配置meta-data:

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:name="com.zeus.core.api.base.ZeusApplication" >

            <!-- 全面屏适配(参考) -->
            <meta-data
                android:name="android.max_aspect"
                android:value="2.2" />
        </application>

2.4 如果开启了依赖包也迁移到androidx,配置关闭

修改项目根目录的gradle.properties文件:

        android.useAndroidX=false
        android.enableJetifier=false

android.useAndroidX=false 表示当前项目不启用 androidx

android.enableJetifier=false 表示依赖包不迁移到 androidx

2.5 Android SDK 版本要求

  • targetSdkVersion 设置为26或以上

  • minSdkVersion 建议设置为17

3. 接口调用

3.1 初始化相关接口

3.1.1 基础SDK初始化(必须)

  • 初始化接口必须调用,否则SDK无法正常工作。

  • 初始化基础SDK,必须在游戏启动Activity的onCreate()中调用该方法

        ZeusPlatform.getInstance().init(Activity activity);

参数说明:

参数名称 参数类型 是否必须 参数说明
activity Activity 必须 当前Activity对象

例示:

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // 云步基础SDK初始化
            ZeusPlatform.getInstance().init(this);
        }

3.1.2 权限申请

  • 如果游戏需要在启动时就动态申请权限,必须使用以下接口添加需要申请的权限,先判断是否需要申请权限,再在初始化接口调用前添加,SDK内部会统一在初始化时去申请权限

例示:

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // 如果游戏需要在启动时就动态申请权限,可在初始化前调用此接口
            // SDK会统一在调初始化时申请一次权限
            // 权限的申请结果可通过调用初始化所在Activity的onRequestPermissionsResult知道,requestCode为ZeusCode.PERMISSION_REQUEST_CODE
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    // 没有此权限
                    ZeusPlatform.getInstance().addPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
                }
            }

            // 云步基础SDK初始化
            ZeusPlatform.getInstance().init(this);
        }
  • 如果游戏使用的是unity引擎,unity引擎可能在游戏启动时,默认对声明的一些敏感权限进行动态申请,需要在AndroidManifest.xml配置关闭
        <application>
            ....

            <meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />

            ....
        </application>

3.1.3 Activity生命周期函数接口(必须)

  • Activity生命周期接口必须调用,否则SDK无法正常工作。

  • 以下生命周期接口为必接,在游戏主Activity(初始化SDK的Activity)的如下生命周期函数中,调用对应的方法。(重要)

    @Override
    public void onStart() {
        super.onStart();
        ZeusPlatform.Lifecycle.onStart();
    }

    @Override
    public void onRestart() {
        super.onRestart();
        ZeusPlatform.Lifecycle.onRestart();
    }

    @Override
    public void onResume() {
        super.onResume();
        ZeusPlatform.Lifecycle.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        ZeusPlatform.Lifecycle.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
        ZeusPlatform.Lifecycle.onStop();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        ZeusPlatform.Lifecycle.onDestroy();
    }

    @Override
    public void onNewIntent(Intent newIntent) {
        super.onNewIntent(newIntent);
        ZeusPlatform.Lifecycle.onNewIntent(newIntent);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        ZeusPlatform.Lifecycle.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        ZeusPlatform.Lifecycle.onConfigurationChanged(newConfig);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        ZeusPlatform.Lifecycle.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

3.2 隐私协议处理(必须)

  • 根据相关规定,游戏必须向用户展示隐私协议,且必须等用户同意隐私协议后,才能继续游戏和收集设备信息。

3.2.1 方式一:

不做处理,使用SDK默认的隐私协议弹窗逻辑:

  • 云步基础SDK内部默认实现了隐私协议弹窗,在不做任何处理的情况下,调用SDK初始化接口后,SDK自动弹出隐私协议弹窗,用户只有同意后才能继续游戏。可以在初始化接口的第二个参数传入初始化监听器OnZeusInitListener,监听同意的回调:
        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this, new OnZeusInitListener() {
            @Override
            public void onPrivacyPolicyAccept() {
                // 同意隐私协议
            }

            @Override
            public void onSwitchUserAccount(UserInfo userInfo) {
                // 切换账号
            }
        });

3.2.2 方式二:

使用SDK默认的隐私协议弹窗,游戏自定义弹出的时机:

  • 游戏可以自定义隐私协议弹窗的弹出时机,避免游戏还未初始化完成就弹窗,导致游戏中断或者游戏黑屏。

步骤1: 在SDK初始化接口调用前,设置隐私协议自定义开关为true

        // 如果需要自定义隐私协议弹窗,需要在SDK初始化前调用此接口,且必须传true
        ZeusPrivacyPolicy.getInstance().setIsCustomPolicy(true);
        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this);

步骤2: 在游戏资源初始化完成,且满足弹出条件后,调用以下接口弹出隐私协议弹窗:

        // 展示隐私协议弹窗
        ZeusPrivacyPolicy.getInstance().showPrivacyPolicy(this, new OnPrivacyPolicyListener() {
            @Override
            public void onAccept() {
                // 同意隐私协议
            }

            @Override
            public void onRefuse() {
                // 拒绝隐私协议,SDK内部会自动退出游戏
            }
        });

3.2.2 方式三:

游戏自定义隐私协议的展示样式和展示时机:

  • 游戏自定义隐私协议弹窗的界面和弹出的时机,由SDK提供《用户协议》、《隐私政策》内容详情页的接口,游戏可以深度定制更符合游戏元素的风格界面,达到提高转化率的目的。

步骤1: 在SDK初始化接口调用前,设置隐私协议自定义开关为true

        // 如果需要自定义隐私协议弹窗,需要在SDK初始化前调用此接口,且必须传true
        ZeusPrivacyPolicy.getInstance().setIsCustomPolicy(true);
        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this);

步骤2: 游戏实现隐私协议样式,并展示:

参考:点击跳转

展示隐私协议时,调用以下接口进行事件打点:

        // 自定义展示隐私协议,必须调用此接口进行展示事件打点
        ZeusPrivacyPolicy.getInstance().showPrivacyPolicyEvent();

步骤3: 用户同意隐私协议后,必须调用以下接口通知SDK:

        // 用户同意后,必须要调用此接口通知SDK
        ZeusPrivacyPolicy.getInstance().setAgreePolicy(true);

3.2.3 隐私协议其他相关接口

是否已同意隐私协议:

        boolean isAgree = ZeusPrivacyPolicy.getInstance().isAgreePolicy();

《用户协议》内容详情页的弹窗:

  • 《用户协议》内容详情页,一般用于设置页面
        ZeusPrivacyPolicy.getInstance().showUserProtocolDetail(Activity activity);

《隐私政策》内容详情页的弹窗:

  • 《隐私政策》内容详情页,一般用于设置页面
        ZeusPrivacyPolicy.getInstance().showPrivacyPolicyDetail(Activity activity);

《用户协议》内容详情页的URL地址:

  • 《用户协议》内容详情页的URL地址,一般用于方式三,游戏自定义隐私协议展示
        String userProtocolUrl = ZeusPrivacyPolicy.getInstance().getUserProtocolUrl();

《隐私政策》内容详情页的URL地址:

  • 《隐私政策》内容详情页的URL地址,一般用于方式三,游戏自定义隐私协议展示
        String privacyPolicyUrl = ZeusPrivacyPolicy.getInstance().getPrivacyPolicyUrl();

3.3 实名认证处理(必须)

  • 根据相关规定,未实名认证不允许进入游戏,所以必须要进行实名认证。

  • 为了提高转化,游戏可以把实名认证适当延后,并且在实名认证的时候,给予用户一些激励性的引导和奖励,以达到提高实名认证率的目的。

3.3.1 方式一:

不做处理,使用SDK默认的实名认证弹窗逻辑:

  • 云步基础SDK内部默认实现了实名认证弹窗,在不做任何处理的情况下,调用SDK初始化接口后,SDK自动弹出实名认证弹窗,用户只有实名认证通过后才能继续游戏。

3.3.2 方式二:

使用SDK默认的实名认证弹窗,游戏自定义弹出的时机:

  • 游戏可以自定义实名认证弹窗的弹出时机,比如新手引导结束,或者试玩5分钟后,提示用户进行实名认证,可在弹出实名认证弹窗前,给予用户一些激励性的引导和奖励,达到提高实名认证率的目的。

步骤1: 在SDK初始化接口调用前,设置实名认证自定义开关为true

        // 如果需要自定义实名认证弹窗弹出时机,需要在SDK初始化前调用此接口,且必须传true
        ZeusRealNameCertification.getInstance().setIsCustomRealName(true);
        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this);

步骤2: 游戏根据实际情况,在适当的时候,比如新手引导结束,或者试玩5分钟后,提示用户进行实名认证,可在弹出实名认证弹窗前,给予用户一些激励性的引导和奖励:

        // 展示实名认证弹窗
        ZeusRealNameCertification.getInstance().realNameCertification(new OnRealNameCertificationListener() {
            @Override
            public void onCertificationSuccess(int age) {
                Log.d(TAG, "onCertificationSuccess: " + age);
                // 实名认证成功,发放奖励
            }

            @Override
            public void onCertificationFailed(int code) {
                Log.d(TAG, "onCertificationFailed: ");
                if (code == IZeusRealNameCertification.CERTIFICATION_FAILED) {
                    // 实名认证失败
                } else if (code == IZeusRealNameCertification.NOT_SUPPORT) {
                    // 不支持实名认证,部分渠道由渠道SDK内部控制,不支持主动调用实名认证,无法获取到实名认证结果,游戏忽略即可
                }
            }
        });

3.3.3 方式三:

游戏自定义实名认证弹窗的展示样式和展示时机:

  • 游戏自定义实名认证弹窗的界面和弹出时机,由SDK提供实名认证请求的接口,游戏可以深度定制更符合游戏元素的风格界面,达到提高实名认证率的目的。

步骤1: 在SDK初始化接口调用前,设置实名认证自定义开关为true

        // 如果需要自定义实名认证弹窗弹出时机,需要在SDK初始化前调用此接口,且必须传true
        ZeusRealNameCertification.getInstance().setIsCustomRealName(true);
        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this);

步骤2: 判断当前渠道是否支持自定义实名认证弹窗,因为部分渠道本身已经有实名认证了,无须重复让用户进行实名认证。

        // 是否支持自定义实名认证弹窗,如果返回false,表示不支持,则无须继续进行下面的步骤,实名认证由渠道SDK内部控制
        boolean isSupportCustomRealName = ZeusRealNameCertification.getInstance().isSupportCustomRealName();

如果isSupportCustomRealName接口返回true表示支持实名认证,引导用户实名认证,且必须实名认证成功才能继续游戏;返回false表示不支持,无须进行实名认证,跳过下面的步骤,继续游戏。

步骤3: 游戏根据实际情况,在适当的时候,比如新手引导结束,或者试玩5分钟后,提示用户进行实名认证,可在弹出实名认证界面前,给予用户一些激励性的引导和奖励

参考:点击跳转

展示实名认证弹窗时,调用以下接口进行事件打点:

        // 自定义展示实名认证弹窗时,必须调用此接口进行展示事件打点
        ZeusRealNameCertification.getInstance().showRealNameCertificationEvent();

步骤4: 发起实名认证请求,调用以下接口进行实名认证请求,只有实名认证成功才可以继续游戏

        // 发起实名认证请求,传入用户输入的姓名和身份证号码,可以通过回调获取实名认证结果,只有实名认证成功才可以继续游戏
        ZeusRealNameCertification.getInstance().realNameCertificationRequest("姓名", "身份证号码", new OnRealNameCertificationListener() {
            @Override
            public void onCertificationSuccess(int age) {
                Log.d(TAG, "onCertificationSuccess: " + age);
                // 实名认证成功,发放奖励,继续游戏
            }

            @Override
            public void onCertificationFailed(int code) {
                Log.d(TAG, "onCertificationFailed: " + code);
                // 实名认证失败,提示用户失败原因,让用户重新认证,只有认证成功才能进入游戏
                if (code == IZeusRealNameCertification.CERTIFICATION_FAILED) {
                    // 实名认证失败,请重试
                } else if (code == IZeusRealNameCertification.NAME_INFO_ERROR) {
                    // 实名认证失败,姓名信息为空或者格式错误
                } else if (code == IZeusRealNameCertification.ID_INFO_ERROR) {
                    // 实名认证失败,身份证信息为空或者格式错误
                } else if (code == IZeusRealNameCertification.REAL_NAME_INFO_ERROR) {
                    // 实名认证失败,姓名和身份证信息不匹配
                }
            }
        });

3.3.4 实名认证其他相关接口

判断是否已实名认证:

        boolean isRealName = ZeusRealNameCertification.getInstance().isRealNameCertification();

3.4 退出游戏(必须)

  • 退出弹窗接口必须调用,否则上线审核会被驳回。

  • 当玩家点击手机上返回键或者游戏中退出游戏按钮时,调用此接口。

  • 注意:当玩家触发退出游戏事件时,调用此接口,调用后会弹一个退出窗口给玩家选择是否退出游戏。

        ZeusPlatform.getInstance().exitGame();

游戏退出监听:

        ZeusPlatform.getInstance().exitGame(OnGameExitListener listener);

回调说明:

        @Override
        public void onGameExit() {
            // 游戏退出弹窗中,玩家选择确定退出游戏时,会回调此方法
            Log.d(TAG, "onGameExit");
        }

3.5 登录处理

  • 云步基础SDK提供了账号登录能力,游戏可以通过登录相关接口获取用户ID作为游戏用户标识。

3.5.1 用户登录

  • 登录成功后,会返回用户ID和用户昵称,游戏可根据用户信息登录游戏服务器。

  • 因为部分渠道,不支持渠道账号登录,所以登录接口返回的用户ID,可能是游客ID,可通过UserInfo的dependableUserId字段判断是否为游客ID。

3.5.1.1 方式一:

直接调用login接口(IAA纯广告类型的游戏建议使用方式一)

        ZeusUser.getInstance().login(Activity activity, OnLoginListener listener);

参数说明:

参数名称 参数类型 是否必须 参数说明
activity Activity 必须 当前Activity对象
listener OnLoginListener 必须 登录回调listener

回调函数:

        @Override
        public void onLoginSuccess(UserInfo userInfo) {
            Log.d(TAG, "onLoginSuccess: " + userInfo);
        }

        @Override
        public void onLoginFailed(int code, String msg) {
            Log.e(TAG, "onLoginFailed: code=" + code + ",msg=" + msg);
        }

UserInfo说明:

参数名称 参数类型 参数说明
userId String 用户ID
userName String 用户昵称
token String Token
dependableUserId boolean 判断用户id是否是可靠的,如果是以单机游戏上线,因为有的渠道不支持使用渠道的账号功能,登录返回的是一个以设备标识生成的用户ID,此ID是不可靠的,为游客ID;如果游戏用于资产相关绑定,可能存在风险,悉知!
3.5.1.2 方式二:

默认以游客登录进入游戏,后面再让用户绑定账号(IAP或者IAA+IAP,有内购的游戏建议使用方式二)

  • 为了提高转化,可以允许玩家以游客账号进入游戏,比如当玩家要付费时,或者玩家到某个关卡进度后,再提示玩家绑定账号。

步骤1: 在SDK初始化接口调用前,设置自定义登录开关为true

        // 如果需要自定义登录,需要在SDK初始化前调用此接口,且必须传true
        ZeusUser.getInstance().setIsCustomLogin(true);
        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this);

步骤2: 调用登录接口,获取用户ID进入游戏

        ZeusUser.getInstance().guestLogin(Activity activity, OnLoginListener listener);

步骤3: 在适当的时候,比如当玩家要付费时,或者玩家到某个关卡进度后,再提示玩家绑定账号

在提示玩家绑定账号前,先判断当前是否支持账号绑定:

        boolean b = ZeusUser.getInstance().isSupportBindAccount();

如果isSupportBindAccount返回true表示支持账号绑定,返回false则表示不支持,无须绑定,跳过下面的步骤。

为了提高账号绑定转化率,可在提示用户绑定账号前,给予用户一些激励性的引导和奖励

参考:点击跳转

        ZeusUser.getInstance().bindAccount(Activity activity, OnLoginListener listener);

参数说明:

参数名称 参数类型 是否必须 参数说明
activity Activity 必须 当前Activity对象
listener OnLoginListener 必须 登录回调listener,参考上面登录接口

步骤四: 绑定成功后,获取绑定账号返回的用户信息,判断用户ID是否有变化(一般情况是不变的,SDK内部会继承原本的游客ID,但是如果绑定的手机号已经被注册,则会返回已注册的用户ID),如果有变化,游戏则处理游客ID到绑定账号ID的数据继承。

3.5.1.3 方式三:

游戏自定义登录弹窗的展示样式和展示时机(IAP或者IAA+IAP,有内购的游戏,且游戏能自定义登录界面建议使用方式三):

  • 游戏自定义登录的界面和弹出时机,由SDK提供判断是否支持自定义登录界面的接口(硬核渠道不需要自定义)、游客登录的接口、发送手机验证码的接口、手机号登录的接口, 游戏可以深度定制更符合游戏元素的风格界面和登录流程,达到提高转化率的目的。

步骤1: 在SDK初始化接口调用前,先判断是否支持自定义登录,支持则设置自定义登录开关为true,自定义隐私协议开关为true

        if(ZeusUser.getInstance().isSupportCustomLogin()){
            // 需要自定义登录,需要在SDK初始化前调用此接口,且必须传true
            ZeusUser.getInstance().setIsCustomLogin(true);
            // 需要自定义隐私协议弹窗,需要在SDK初始化前调用此接口,且必须传true
            ZeusPrivacyPolicy.getInstance().setIsCustomPolicy(true);
        }

        // 云步基础SDK初始化
        ZeusPlatform.getInstance().init(this);

步骤2: 判断是否支持自定义登录界面,因为硬核渠道(oppo、vivo、华为、小米等)有登录界面,不能自定义

        // 判断是否支持自定义登录界面,如果返回false,表示不支持,则游戏不展示自定义的登录界面,调用上面方式一的login接口登录即可
        boolean isSupportCustomLogin = ZeusUser.getInstance().isSupportCustomLogin();

如果isSupportCustomLogin接口返回true表示支持自定义登录界面,游戏弹出自定义的登录界面;返回false表示不支持,则游戏不展示自定义的登录界面,调用上面方式一的login接口登录即可。

步骤3: 游戏展示登录界面+隐私协议

参考:点击跳转

展示登录界面时,调用以下接口进行事件打点:

        // 展示自定义的登录界面时,必须调用此接口进行展示事件打点
        ZeusUser.getInstance().showLoginUIEvent();

        // 自定义展示隐私协议,必须调用此接口进行展示事件打点
        ZeusPrivacyPolicy.getInstance().showPrivacyPolicyEvent();

必须勾选隐私协议才能登陆,勾选后通知SDK已同意隐私协议:

        // 用户同意后,必须要调用此接口通知SDK
        ZeusPrivacyPolicy.getInstance().setAgreePolicy(true);

步骤4: 玩家选择游客登录时,调用游客登录接口:

        ZeusUser.getInstance().guestLogin(Activity activity, OnLoginListener listener);

步骤5: 玩家选择手机号登陆,使用以下接口获取短信验证码和手机号登陆

        // 发送短信验证码,会往填写的手机号码发送一条验证码的短信
        ZeusUser.getInstance().getSMSVerifyCode(String phoneNumber, OnSMSVerifyCodeListener listener);
        // 使用短信验证码登陆,传入手机号码和接收到的短信验证
        ZeusUser.getInstance().phoneLogin(String phoneNumber, String smsVerifyCode, OnLoginListener listener);
3.5.1.4 其他接口

获取登录信息

        // 每次登陆前,可以使用此接口,获取缓存的用户信息,如果返回不为null,可以直接使用返回的用户信息登录游戏
        UserInfo userInfo = ZeusUser.getInstance().getLoginInfo();

3.5.2 退出登录(可选)

  • 退出账号登录,游戏可以使用此接口实现账号切换
       ZeusUser.getInstance().logout(new OnLogoutListener() {
            @Override
            public void onLogout() {
                // 收到退出回调,游戏在此处实现账号退出,返回登录界面,可以重新调用上面的登录接口实现账号登录,达到切换账号的目的
            }
        });

3.5.3 切换用户(可选)

  • 部分渠道账号系统,支持切换账号,游戏可以根据需求接入。

  • 在SDK初始化方法中,增加监听用户切换的回调,用户切换账号后,会收到新的用户信息,游戏根据新的用户信息切换新的游戏账号。

        // 云步SDK初始化
        ZeusPlatform.getInstance().init(this, new OnZeusInitListener() {
            @Override
            public void onPrivacyPolicyAccept() {
                Log.d(TAG, "onPrivacyPolicyAccept: ");
                // 隐私协议同意
            }

            @Override
            public void onSwitchUserAccount(UserInfo userInfo) {
                Log.d(TAG, "onSwitchUserAccount: " + userInfo);
                // 切换用户,重新登录游戏
            }
        });

3.5.3 上传玩家信息(可选)

  • 注意:网游必须接此接口,单机游戏不用接。
        ZeusUser.getInstance().submitPlayerInfo(ExtraPlayerInfo playerInfo);

例示:

        private void submitPlayerInfo(int type) {
            ExtraPlayerInfo playerInfo = new ExtraPlayerInfo();
            //在一下几个场景调用
            //1.选择服务器:ExtraPlayerInfo.TYPE_SELECT_SERVER
            //2.创建角色:ExtraPlayerInfo.TYPE_CREATE_ROLE
            //3.进入游戏:ExtraPlayerInfo.TYPE_ENTER_GAME
            //4.等级提升:ExtraPlayerInfo.TYPE_LEVEL_UP
            //5.退出游戏:ExtraPlayerInfo.TYPE_EXIT_GAME
            playerInfo.setType(type);
            //当前角色身上拥有的游戏币数量
            playerInfo.setCoinNum(100);
            //单位是秒,此处是参考,请传真实的角色创建时间,并且每次传递的值固定,建议从游戏服务器获取真实的角色创建时间,不能传随机值或当前系统时间值
            long roleCreateTime = System.currentTimeMillis() / 1000;
            playerInfo.setRoleCreateTime(roleCreateTime);
            //角色id
            playerInfo.setRoleId("role_100");
            //角色名称
            playerInfo.setRoleName("test_112");
            //角色等级
            playerInfo.setRoleLevel("10");
            //服务器id
            playerInfo.setServerId("10");
            //服务器名称
            playerInfo.setServerName("server_10");
            //VIP等级
            playerInfo.setVip("vip1");
            ZeusUser.getInstance().submitPlayerInfo(playerInfo);
        }

调用场景:

  • 需要在以下几种情况下调用:

  • 选择服务器:ExtraPlayerInfo.TYPE_SELECT_SERVER

  • 创建角色:ExtraPlayerInfo.TYPE_CREATE_ROLE
  • 进入游戏:ExtraPlayerInfo.TYPE_ENTER_GAME
  • 等级提升:ExtraPlayerInfo.TYPE_LEVEL_UP
  • 退出游戏:ExtraPlayerInfo.TYPE_EXIT_GAME

选择服务器时,因为还没有进入游戏,无法知道角色数据,playerInfo只需要传入服务器信息即可

ExtraPlayerInfo说明:

参数名称 参数类型 是否必须 参数说明
type int 必须 调用场景
serverId String 必须 玩家所在服务器的ID
serverName String 必须 玩家所在服务器的名称
roleId String 必须 玩家角色ID
roleName String 必须 玩家角色名称
roleLevel String 必须 玩家角色等级
coinNum int 必须 当前角色身上拥有的游戏币数量
roleCreateTime long 必须 角色创建时间,从1970年到现在的时间,单位:秒;必须传入真实的数据,否则UC审核不过
vip String 可选 玩家VIP等级
extraInfo Map<String, Integer> 可选 额外信息

3.6 游戏基础事件打点(必须)

  • 为了统计埋点事件的转化率,分析玩家流失情况,SDK内部增加了事件漏斗,以下事件游戏必须正确打点。

3.6.1 开始游戏打点

  • 当玩家同意隐私协议、登录游戏,并且真正进入游戏,开始玩游戏或者开始新手引导后,进行以下打点。
        ZeusAnalytics.getInstance().startPlayingGame();

3.7 支付相关接口

  • 云步基础SDK提供了支付相关接口,有内购的游戏,可以通过支付相关接口进行游戏道具购买。

3.7.1 支付

        ZeusPay.getInstance().pay(Activity activity, PayParams params, OnPayListener listener);

例示:

private void pay() {
    PayParams params = new PayParams();

    // 充值金额(默认单位:元)(必须)
    params.setPrice(1);

    // 金额单位,不设置默认为PayParams.UNIT.RMB_YUAN (可选)
    params.setUnit(PayParams.UNIT.RMB_YUAN);

    // 充值商品id,productId必须是数字(必须)
    params.setProductId("1");

    // 商品名称,比如:100元宝,500钻石,不可包含特殊字符,只能包含中文、英文字母大小写、数字、下划线。(必须)
    params.setProductName("100元宝");

    // 商品描述,比如:充值100元宝,赠送20元宝,不可包含特殊字符,只能包含中文、英文字母大小写、数字、下划线。(必须)
    params.setProductDesc("获得3000金币");

    // 商品分类,如:破冰礼包(可选)
    params.setProductCategory("break_ice");

    // 透传参数,充值成功,回调通知游戏服务器的时候,会原封不动返回。(透传字段长度不超过64)(网游可选,单机不用传)
    //params.setDeveloperPayload("developerPayload");

    // 服务器发货模式的订单标识,订单ID要包含支付的信息,订单ID长度不能超过30个字符,订单号不可重复,必须唯一,且只能由英文字母大小写、数字和下划线组成,字母区分大小写(网游必须,单机不用传)
    //params.setOrderId("test123");

    ZeusPay.getInstance().pay(this, params, mOnPayListener);
}

PayParams说明:

参数名称 参数类型 是否必须 参数说明
productId String 必须 充值商品id,productId必须是数字
productName String 必须 商品名称,比如:100元宝,500钻石,不可包含特殊字符,只能包含中文、英文字母大小写、数字、下划线。
productDesc String 必须 商品描述,比如:充值100元宝,赠送20元宝,不可包含特殊字符,只能包含中文、英文字母大小写、数字、下划线。
productCategory String 可选 商品分类,用于统计
price int 必须 充值金额(默认单位:元)
unit PayParams.UNIT 可选 充值金额的单位,PayParams.UNIT.RMB_YUAN:人民币元;PayParams.UNIT.RMB_FEN:人民币分;默认为PayParams.UNIT.RMB_YUAN
orderId String 采用服务器发货模式必须传订单id 订单id要包含支付的信息,订单id长度不能超过30个字符,订单号不可重复,必须唯一,且只能由英文字母大小写、数字和下划线组成,字母区分大小写
developerPayload String 采用服务器发货模式可选 透传参数,充值成功,回调通知游戏服务器的时候,会原封不动返回。(透传字段长度不超过64)

商品分类:

礼包类型 类型 对应的值
破冰类 PayParams.ProductCategory.BREAK_ICE break_ice
存钱罐类 PayParams.ProductCategory.BIGGY_BANK biggy_bank
技能类 PayParams.ProductCategory.SKILLS skills
关卡内类 PayParams.ProductCategory.IN_STAGE in_stage
连胜类 PayParams.ProductCategory.CONTINUOUS_WIN continuous_win
去广告类 PayParams.ProductCategory.NO_AD no_ad
限时类 PayParams.ProductCategory.TIME_LIMIT time_limit
订阅类 PayParams.ProductCategory.SUBSRIBE subscribe
商店道具类 PayParams.ProductCategory.SHOP_PROPS shop_props
商店礼包类 PayParams.ProductCategory.SHOP_PACK shop_pack
解锁类 PayParams.ProductCategory.UNLOCK unlock
主页弹窗类 PayParams.ProductCategory.HOME_POPUP home_popup
关卡弹窗类 PayParams.ProductCategory.STAGE_POPUP stage_popup

回调说明:

  • 接入时,未经过渠道打包,为了方便测试,每次调用默认返回支付成功。
        @Override
        public void onPaySuccess(PayOrderInfo payOrderInfo) {
            Log.d(TAG, "onPaySuccess: " + payOrderInfo);

            ZeusPay.getInstance().gameReceivePaySuccess(payOrderInfo);
        }

        @Override
        public void onPayCancel() {
            Log.d(TAG, "onPayCancel: ");
        }

        @Override
        public void onPayFailed(int code, String msg) {
            Log.e(TAG, "onPayFailed: code=" + code + ",msg=" + msg);
        }

PayOrderInfo说明:

参数名称 参数类型 参数说明
productId String 支付时传入的商品id
productName String 支付时传入的商品名称
orderId String 支付时传入的订单id
zeusOrderId String SDK内部生成的订单id
developerPayload String 支付时传入的透传参数

3.7.2 支付成功事件

  • 当游戏收到支付成功后,且已经发货,调用此接口通知SDK
ZeusPay.getInstance().gameReceivePaySuccess(PayOrderInfo payOrderInfo);

3.7.3 订单核销接口(必接)

  • 当游戏收到支付成功后,且已经发货,调用此接口通知SDK核销订单
// isReOrder表示是否补单,是补单传true,正常支付传false
ZeusPay.getInstance().reportOrderComplete(PayOrderInfo payOrderInfo,boolean isReOrder);

3.7.4 每次启动验证是否存在支付掉单(必接)

  • 每次游戏启动时,在适当的时候,调用此接口验证是否存在支付后异常退出、网络原因导致未到账的订单.

  • 在开始游戏进入到主游戏页面后调用,确保收到验证成功后可以正常发货.

  • 注意:此接口不是在支付成功时调用,而是在用户进入游戏后调用.

  • 服务器发货也需要调用,可以不处理此接口的回调

ZeusPay.getInstance().queryPayOrderInfo(OnQueryPayOrderListener listener);

回调说明:

            @Override
            public void onQuerySuccess(List<PayOrderInfo> list) {
                //验证成功,根据PayOrderInfo中的商品id补发游戏道具

            }

            @Override
            public void onQueryFailed(int code, String msg) {

            }
  • 接入时,未经过渠道打包,为了方便测试,每次调用默认返回成功。

3.8 兑换码相关接口

3.8.1 使用兑换码

  • 使用兑换码兑换游戏道具
ZeusCdkey.getInstance().useCdKey("TestCode123", new OnUseCdKeyListener() {
    @Override
    public void onSuccess(String productId) {
        resultView.setText("发货,兑换商品ID:" + productId);
    }

    @Override
    public void onFailed(int code, String msg) {
        Log.e(TAG, "Failed,code:" + code + " ,msg:" + msg);
    }
});

增加透传参数:透传参数会在兑换码使用成功后回调给游戏服务器(有游戏服务器的可接)

ZeusCdkey.getInstance().useCdKey("TestCode123", "extra", new OnUseCdKeyListener() {
    @Override
    public void onSuccess(String productId) {
        resultView.setText("发货,兑换商品ID:" + productId);
    }

    @Override
    public void onFailed(int code, String msg) {
        Log.e(TAG, "Failed,code:" + code + " ,msg:" + msg);
    }
});

参数说明:

  • extra: 透传参数,会在兑换码使用成功后回调给游戏服务器

  • cdKey: 兑换码,开发阶段未经过打包可以使用1111122222333334444455555进行调试,分别对应的发货商品ID为1,2,3,4,5 (注意:兑换码不要做字符限制,比如:长度,空格,下划线等)

  • callback: 结果回调,成功的则返回商品id(须跟运营一起协定),失败则返回失败原因。

回调说明:

  • onSuccess(String productId): 成功,返回商品ID

  • onFailed(int code, String msg): 失败

3.8.2 展示兑换中心弹窗

  • SDK内部实现了兑换码的输入,可直接调下面的接口展示兑换中心的弹窗
        ZeusCdkey.getInstance().showCdKeyCenter(activity, new OnUseCdKeyListener() {
            @Override
            public void onSuccess(String productId) {
                //兑换成功,根据商品id发放商品

            }

            @Override
            public void onFailed(int code, String msg) {
                //兑换失败
            }
        });

3.9 分享相关接口

3.9.1 分享文本

ZeusShare.getInstance().share(String text, OnRewardCallback callback);

例示:

ZeusShare.getInstance().share("分享的内容", new OnRewardCallback() {
    @Override
    public void onReward(String productId) {
        //发放奖励
    }
});

参数说明:

  • text: 分享的内容

  • callback: 分享的回调

回调说明:

  • 回调函数: onReward(String productId)

  • 回调参数: productId为奖励商品id,当前返回null,未定义具体奖励商品,游戏视情况发放奖励商品。

3.10 防沉迷相关接口

3.10.1 通知SDK游戏状态的接口

  • 为了避免防沉迷提醒时,游戏正在对局或关卡中,所以提供了以下接口通知SDK游戏当前是否在游戏关卡中的接口:
ZeusIndulgence.getInstance().setPlayingGame(boolean playingGame);
  • 传true表示正在游戏关卡中,当关卡结束也需要调此接口,传false通知SDK已经不在关卡中了

4. 渠道相关接口

4.1 打开游戏社区接口

ZeusUser.getInstance().gameForum();

4.2 打开游戏互推界面接口

ZeusUser.getInstance().gameRecommend();

4.3 跳转休闲游戏专区接口

ZeusUser.getInstance().leisureGameSubject();

4.4 获取礼包

4.4.1 获取礼包列表

ZeusUser.getInstance().getGiftBagList(String roleId, String serverId, OnGiftBagListener listener);

参数说明:

参数名称 参数类型 是否必须 参数说明
roleId String 必须 角色id,要和玩家信息上传接口(3.5.3 上传玩家信息)传的角色id一致
serverId String 必须 服务器id,要和玩家信息上传接口(3.5.3 上传玩家信息)传的服务器id一致
listener OnGiftBagListener 必须 监听回调,回调礼包列表

GiftBagInfo:

参数名称 参数类型 参数说明
giftId String 礼包id,发放道具的礼包id,礼包id具体对应发什么道具需要联系我们运营,和运营约定
count int 礼包数量

例示:

    ZeusUser.getInstance().getGiftBagList("role_100", "10", new OnGiftBagListener() {
            @Override
            public void onSuccess(List<GiftBagInfo> list) {
                Log.d(TAG, "onSuccess: " + list);
                mGiftBagInfoList = list;
                // 游戏根据礼包发货
            }

            @Override
            public void onFailed(int code, String msg) {
                Log.e(TAG, "onFailed: code=" + code + ",msg=" + msg);
            }
        });

4.4.2 礼包已发放回调

  • 当获取到礼包列表,并发放礼包后调用(必须调用,否则会导致获取礼包接口重复返回已发放的礼包
ZeusUser.getInstance().giftBagSuccess(List<GiftBagInfo> giftBagInfoList);

参数说明:

参数名称 参数类型 是否必须 参数说明
giftBagInfoList List<GiftBagInfo> 必须 礼包列表

例示:

    if (mGiftBagInfoList != null) {
        ZeusUser.getInstance().giftBagSuccess(mGiftBagInfoList);
    }

4.5 赠送玩家金币活动

4.5.1 赠送金币

  • 每次需要赠送玩家金币时调用,传入活动id(aid)和赠送数量,回调成功,则表示金币赠送成功,给予玩家提示,回调失败,则表示金币赠送失败,根据失败的原因给予玩家提示
ZeusUser.getInstance().giveGold(String aid, int num, OnGiveGoldListener listener);

参数说明:

参数名称 参数类型 是否必须 参数说明
aid String 必须 活动id,联系我们运营获取
num int 必须 赠送数量,和我们运营商量每次赠送的数量
listener OnGiveGoldListener 必须 回调监听

回调说明:

回调函数 说明
onSuccess() 成功,则表示金币赠送成功,给予玩家提示
onFailed(int code, String msg) 失败,则表示金币赠送失败,根据失败的原因给予玩家提示

错误码说明:

错误码 说明
ZeusCode.CODE_GIVE_GOLD_FAILED 赠送失败,超过当日领取数量上限、领取名额不足、超过单次领取数量上限、活动不存在、不在活动时间内等原因
ZeusCode.CODE_REQUEST_FAILED 请求失败,无网络、赠送数量错误等原因,联系我们解决

例示:

        ZeusUser.getInstance().giveGold("172092162", 100, new OnGiveGoldListener() {
            @Override
            public void onSuccess() {
                Log.d(TAG, "giveGold onSuccess: ");
                //赠送成功
            }

            @Override
            public void onFailed(int code, String msg) {
                Log.e(TAG, "giveGold onFailed: code=" + code + ",msg=" + msg);
                if (code == ZeusCode.CODE_GIVE_GOLD_FAILED) {
                    //赠送失败,超过当日领取数量上限、领取名额不足、超过单次领取数量上限、活动不存在、不在活动时间内等原因
                } else if (code == ZeusCode.CODE_REQUEST_FAILED) {
                    //请求失败,无网络、赠送数量错误等原因,联系我们解决
                } else {
                    //未知错误
                }
            }
        });

4.6 特权启动

4.6.1 判断是否支持特权启动

  • 判断是否支持特权启动活动的接口,返回true表示支持;
boolean b = ZeusUser.getInstance().isSupportGameLaunchPrivilege();

4.6.2 添加特权启动监听

  • 添加特权启动监听,判断本次启动是否是从游戏中心特权启动,在Activity的onCreate中添加监听;
ZeusUser.getInstance().addGameCenterLaunchListener(OnGameCenterLaunchListener listener);
参数名称 参数类型 是否必须 参数说明
listener OnGameCenterLaunchListener 必须 特权启动回调

listener回调说明:

回调接口 说明
void onGameCenterLaunch(boolean isCallback) 回调此方法时,表示从游戏中心特权启动,isCallback为true时,表示从游戏内,跳转到手机应用市场游戏中心后,点击特权启动的返回
void onNormalLaunch() 回调此方法时,表示正常的启动

例子:

        ZeusUser.getInstance().addGameCenterLaunchListener(new OnGameCenterLaunchListener() {
            @Override
            public void onGameCenterLaunch(boolean isCallback) {
                // 游戏处理相关逻辑,发放启动特权奖励

            }

            @Override
            public void onNormalLaunch() {
                // 游戏处理相关逻辑,引导玩家从游戏中心特权启动

            }
        });

4.6.3 跳转游戏中心去特权启动

  • 跳转游戏中心,引导玩家使用特权启动,领取特权启动奖励
ZeusUser.getInstance().launchGameCenter(Activity activity);
参数名称 参数类型 是否必须 参数说明
activity Activity 必须 Activity对象

回调说明:

  • 回调上述特权启动监听接口

5. 其它接口

5.1 获取SDK版本号

int versionCode = ZeusPlatform.getInstance().getZeusSdkVersionCode();

5.2 获取SDK版本名称

String versionName = ZeusPlatform.getInstance().getZeusSdkVersionName();

5.3 获取渠道标识

  • 获取当前渠道标识,用于统计或逻辑判断。

  • 注意:游戏自己集成友盟的话,友盟的渠道号标识必须通过此接口获取,然后初始化友盟的时候作为参数,否则渠道统计会不准确。

String channel = ZeusPlatform.getInstance().getChannelName();

返回值:

  • channel: 渠道标识,如oppo、huawei等
渠道 标识
OPPO oppo
VIVO vivo
华为 huawei
小米 xiaomi
应用宝 ysdk
4399 m4399
UC ucsingle
魅族 meizusingle
233 m233
哔哩哔哩 bilibili

5.4 是否测试环境

  • SDK服务器区分测试环境和正式环境,为true时,表示连接的是SDK的测试服务器
boolean testMode = ZeusPlatform.getInstance().isTestEnv();

返回值:

  • testMode: 返回true表示当前使用的是测试环境,false 正式环境

5.5 获取标准时间

  • 获取世界标准时间,返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。注意:此接口不要在Android主线程中调用
long time = ZeusPlatform.getInstance().getStandardTime();

返回值:

  • time: 世界标准时间 (单位:毫秒)

5.6 获取自定义参数

  • 获取开发者自定义参数,以字符串形式返回,此参数需要提供给我们,打包后会把自定义参数打包到apk中。
String customParams = ZeusPlatform.getInstance().getCustomParam();

返回值:

  • customParams: 开发者自定义参数

5.7 开关接口

  • 通用的开关接口,判断某个开关的状态

  • 注意:所有开关判断都是在使用时,实时调用获取状态,不可以做缓存,否则无法保证实时性。

  • 接入时,未经过渠道打包,为了方便测试,所有开关默认返回true。

boolean state = ZeusPlatform.getInstance().getSwitchState(String switchType);

参数说明:

参数名称 参数类型 是否必须 参数说明
switchType String 必须 开关类型

5.8 跳转到应用商店详情页(必接)

  • 此接口需要通过开关控制入口的展示:boolean state = ZeusPlatform.getInstance().getSwitchState("showMarket");
ZeusPlatform.getInstance().gotoMarket(new OnRewardCallback() {
    @Override
    public void onReward(String productId) {
        //发放奖励
    }
});

参数说明:

  • OnRewardCallback: 奖励的回调接口

回调说明:

  • 回调函数: onReward(String productId)

  • 回调参数: productId为奖励商品id,当前返回null,未定义具体奖励商品,游戏视情况发放奖励商品。

5.9 调起QQ聊天界面

  • 跳转指定QQ的聊天界面
boolean b = ZeusPlatform.getInstance().skipQQChat(String number);
if (b) {
    //调起成功
} else {
    // 未安装手Q或安装的版本不支持
}

参数说明:

  • number: QQ号码

5.10 调起添加QQ群界面

  • 跳转添加指定QQ群的界面
boolean b = ZeusPlatform.getInstance().joinQQGroup(String key);
if (b) {
    //调起成功
} else {
    // 未安装手Q或安装的版本不支持
}

参数说明:

5.11 调起手机拨号盘

  • 调起手机拨号界面
ZeusPlatform.getInstance().callPhone(String phoneNumber);

参数说明:

  • phoneNumber: 电话号码

5.12 调起微信

  • 复制内容,并跳转微信
ZeusPlatform.getInstance().skipWeiChat(String text);

参数说明:

  • text: 复制到粘贴板的内容

5.13 展示用户中心界面

ZeusPlatform.getInstance().showUserCenter(Activity activity);

5.14 敏感词校验

  • 游戏中,涉及填写昵称、聊天、公会命名等,可以输入字符串的地方,需要调用此接口,验证是否包含敏感内容,如果包含,则不能使用;
ZeusPlatform.getInstance().sensitiveWordsCheck(content, ContentType.CHAT, new OnSensitiveWordsCheckListener() {
    @Override
    public void onSuccess(String content) {
        //验证通过,可以使用
    }

    @Override
    public void onFailed(int code, String msg) {
        //验证不通过,不能使用此内容                  
    }
});

参数说明:

参数名称 参数类型 是否必须 参数说明
content String 必须 需验证的字符串内容
contentType ContentType 必须 内容类型,聊天传ContentType.CHAT,玩家昵称、公会名字传ContentType.NICKNAME,其他的传ContentType.OTHER
listener OnSensitiveWordsCheckListener 必须 验证的结果回调

回调说明:

回调方法 回调说明
void onSuccess(String content) 验证通过,不包含敏感内容,返回验证的content
void onFailed(int code, String msg) 验证失败,包含敏感内容,code为状态码,msg为失败的原因描述

5.15 展示提示用户开启通知栏权限的弹窗

  • 当手机设置中,通知栏权限未打开时,可调用此接口提示用户开启,且5天内只会提示一次;已开启的,调用后不会提示。
ZeusPlatform.getInstance().openNotificationPermission();

5.16 获取IMEI

  • 当手机支持获取IMEI,且已经同意隐私条款后,可以获取到IMEI,否则返回空值
String imei = ZeusPlatform.getInstance().getIMEI();

5.17 获取OAID

  • 当手机支持获取OAID,且已经同意隐私条款后,可以获取到OAID,否则返回空值
String oaid = ZeusPlatform.getInstance().getOaid();

5.18 获取AndroidId

  • 当手机支持获取AndroidId,且已经同意隐私条款后,可以获取到AndroidId,否则返回空值
String androidId = ZeusPlatform.getInstance().getAndroidId();

6. 统计模块接口

云步统计SDK接口文档

7. 远程配置相关接口

  • 可以通过此模块,获取一些简单的配置信息,具体信息请与我们运营或技术沟通

  • 以下接口请在需要时调用,切勿开启线程循环调用

7.1 获取字符串值

String value = ZeusConfig.getInstance().getString(String key);
参数名称 参数类型 是否必须 参数说明
key String 必须 获取配置的key,由我们运营提供,请联系我们运营获取

返回值说明:

可以通过指定的key,获取到我们服务器配置的字符串值,需要我们运营配置具体值;如果未配置,返回值为null;

7.2 获取int值

int value = ZeusConfig.getInstance().getInt(String key);
参数名称 参数类型 是否必须 参数说明
key String 必须 获取配置的key,由我们运营提供,请联系我们运营获取

返回值说明:

可以通过指定的key,获取到我们服务器配置的int值,需要我们运营配置具体值;如果未配置,返回值为0;

7.3 获取long值

long value = ZeusConfig.getInstance().getLong(String key);
参数名称 参数类型 是否必须 参数说明
key String 必须 获取配置的key,由我们运营提供,请联系我们运营获取

返回值说明:

可以通过指定的key,获取到我们服务器配置的long值,需要我们运营配置具体值;如果未配置,返回值为0;

7.4 获取float值

float value = ZeusConfig.getInstance().getFloat(String key);
参数名称 参数类型 是否必须 参数说明
key String 必须 获取配置的key,由我们运营提供,请联系我们运营获取

返回值说明:

可以通过指定的key,获取到我们服务器配置的long值,需要我们运营配置具体值;如果未配置,返回值为0;

7.5 获取double值

double value = ZeusConfig.getInstance().getDouble(String key);
参数名称 参数类型 是否必须 参数说明
key String 必须 获取配置的key,由我们运营提供,请联系我们运营获取

返回值说明:

可以通过指定的key,获取到我们服务器配置的double值,需要我们运营配置具体值;如果未配置,返回值为0;

7.6 获取boolean值

boolean value = ZeusConfig.getInstance().getBoolean(String key);
参数名称 参数类型 是否必须 参数说明
key String 必须 获取配置的key,由我们运营提供,请联系我们运营获取

返回值说明:

可以通过指定的key,获取到我们服务器配置的boolean值,需要我们运营配置具体值;如果未配置,返回值为false;

8. 提现相关接口

8.1 提现

  • 现金红包提现
ZeusCashOut.getInstance().cashOut(CashOutInfo cashOutInfo, OnCashOutListener listener);

参数说明:

参数名称 参数类型 是否必须 参数说明
cashOutInfo CashOutInfo 必须 提现信息
listener OnCashOutListener 必须 提现回调

listener回调说明:

回调接口 说明
void onSuccess(CashOutInfo info) 提现成功,info为接口调用时传入的参数
void onFailed(int code, String msg, CashOutInfo info) 提现失败,code为状态码,msg为失败的原因描述,可以直接用于提示用户,info为接口调用时传入的参数

CashOutInfo参数说明:

参数名称 参数类型 是否必须 参数说明
account String 必须 提现账号,需要用户输入提现到哪个账号,目前只支持支付宝账号
realName String 必须 提现账号对应的真实姓名
orderId String 必须 提现订单id,每次提现需要调用者生成一个唯一的订单id(长度不能超过64,且只能由字母大小写、数字和下划线组成,字母区分大小写)
cash int 必须 提现金额,最低10分,单位:分
reason String 必须 提现的原因,要求填写格式:游戏名+渠道号+提现内容说明,如:泡泡精灵传奇-oppo-签到红包提现,渠道号通过云步SDK获取渠道号的接口获取,提现内容说明可与我们运营商量

例子:

                    CashOutInfo cashOutInfo = new CashOutInfo();
                    cashOutInfo.setAccount("12345");
                    cashOutInfo.setRealName("张三");
                    cashOutInfo.setCash(10);
                    cashOutInfo.setOrderId("test" + System.currentTimeMillis());
                    cashOutInfo.setReason("提现测试");
                    ZeusCashOut.getInstance().cashOut(cashOutInfo, new OnCashOutListener() {
                        @Override
                        public void onSuccess(CashOutInfo cashOutInfo) {
                            Log.d(TAG, "onSuccess: " + cashOutInfo);
                            //提现成功
                        }

                        @Override
                        public void onFailed(int code, String msg, CashOutInfo info) {
                            Log.e(TAG, "onFailed: code=" + code + ",msg=" + msg);
                            if (code == ZeusCode.CODE_CASH_OUT_INFO_ERROR) {
                                //提现参数错误,检查填写的提现账号和名字格式是否正确
                            } else if (code == ZeusCode.CODE_CASH_OUT_ORDER_ERROR) {
                                //提现订单号格式错误,订单号只能包含数字、字母大小写和下划线
                            } else if (code == ZeusCode.CODE_CASH_OUT_AMOUNT_ERROR) {
                                //提现金额错误,最少提现10分
                            } else if (code == ZeusCode.CODE_CASH_OUT_TOO_FREQUENTLY) {
                                //提现接口调用太频繁
                            } else if (code == ZeusCode.CODE_NETWORK_ERROR) {
                                //网络异常,建议连接网络后再提现
                            } else if (code == ZeusCode.CODE_CASH_OUT_FAILED) {
                                //提现失败,不可提现、超出提现限额等原因
                            }
                        }
                    });

8.2 查询提现记录

  • 查询当前用户所有的提现成功的记录
ZeusCashOut.getInstance().queryCashOutHistoryList(OnQueryCashOutHistoryListener listener);
参数名称 参数类型 是否必须 参数说明
listener OnQueryCashOutHistoryListener 必须 查询回调

listener回调说明:

回调接口 说明
void onSuccess(List<CashOutOrderInfo> orderInfoList) 查询成功,orderInfoList为提现记录列表
void onFailed(int code, String msg) 查询失败,code为状态码,msg为失败的原因描述

例子:

        ZeusCashOut.getInstance().queryCashOutHistoryList(new OnQueryCashOutHistoryListener() {
            @Override
            public void onSuccess(List<CashOutOrderInfo> list) {
                Log.d(TAG, "onSuccess: " + list);
            }

            @Override
            public void onFailed(int code, String msg) {
                Log.e(TAG, "onFailed: code=" + code + ",msg=" + msg);
            }
        });

8.3 查询提现订单结果

  • 查询单笔提现订单的结果
ZeusCashOut.getInstance().queryCashOutOrderResult(String orderId, OnQueryCashOutOrderListener listener);
参数名称 参数类型 是否必须 参数说明
orderId String 必须 要查询的提现订单id
listener OnQueryCashOutHistoryListener 必须 查询回调

listener回调说明:

回调接口 说明
void onSuccess(CashOutOrderInfo info) 提现订单查询成功,info为订单信息,和上面接口返回的CashOutOrderInfo信息格式一致
void onFailed(int code, String msg,String orderId) 提现订单查询失败,code为状态码,msg为失败的原因描述,orderId为查询的订单id

例子:

                ZeusCashOut.getInstance().queryCashOutOrderResult(orderId, new OnQueryCashOutOrderListener() {
                        @Override
                        public void onSuccess(CashOutOrderInfo cashOutOrderInfo) {
                            Log.d(TAG, "queryCashOutOrderResult onSuccess: " + cashOutOrderInfo);
                            //此笔订单已提现成功
                        }

                        @Override
                        public void onFailed(int code, String msg, String orderId) {
                            Log.e(TAG, "queryCashOutOrderResult onFailed: code=" + code + ",msg=" + msg);
                            if (code == ZeusCode.CODE_CASH_OUT_ORDER_ERROR) {
                                //提现的订单号格式错误,请检查订单格式
                            } else if (code == ZeusCode.CODE_NETWORK_ERROR) {
                                //网络异常,建议连接网络后再查询
                            } else if (code == ZeusCode.CODE_CASH_OUT_FAILED) {
                                //提现失败,服务器未找到此笔订单
                            } else if (code == ZeusCode.CODE_CASH_OUT_RESULT_UNKNOWN) {
                                //提现结果未知,建议稍后重新查询
                            }
                        }
                    });

8.4 红包提现界面展示

8.4.1 添加提现申请的事件监听

  • 监听提现申请的状态监听
ZeusCashOut.getInstance().addOnCashOutStateListener(OnCashOutStateListener listener);
参数名称 参数类型 是否必须 参数说明
listener OnCashOutStateListener 必须 提现状态回调

listener回调说明:

回调接口 说明
void onCashOutRequestStart(CashOutItemInfo info, String orderId) 提现请求发起,info为提现档位信息,orderId为每次提现申请时,内部生成的提现订单id
void onCashOutSuccess(CashOutItemInfo info, String orderId) 提现成功,info为提现档位信息,orderId为每次提现申请时,内部生成的提现订单id
void onCashOutFailed(int code, String msg, CashOutItemInfo info, String orderId) 提现失败,code为状态码,msg为失败的原因描述,info为提现档位信息,orderId为每次提现申请时,内部生成的提现订单id

例子:

        ZeusCashOut.getInstance().addOnCashOutStateListener(new OnCashOutStateListener() {
            @Override
            public void onCashOutRequestStart(CashOutItemInfo info, String orderId) {

            }

            @Override
            public void onCashOutSuccess(CashOutItemInfo info, String orderId) {

            }

            @Override
            public void onCashOutFailed(int code, String msg, CashOutItemInfo info, String orderId) {

            }
        });

8.4.2 展示提现界面

  • 展示提现界面
ZeusCashOut.getInstance().showCashOutUI(int cashAmount, ArrayList<CashOutItemInfo> cashOutItemInfoList);
参数名称 参数类型 是否必须 参数说明
cashAmount int 必须 可提现的总金额,单位:分
cashOutItemInfoList ArrayList<CashOutItemInfo> 必须 提现档位列表,目前最多只支持9个档位

CashOutItemInfo参数说明:

参数名称 参数类型 参数说明
id int 提现档位的id,自己一定义一个整数即可,用于区分每一个档位
cash int 提现档位的金额,单位:分
state boolean 提现档位的可提现状态,true为可提现,false为不可提现

例子:

        ArrayList<CashOutItemInfo> cashOutItemInfoList = new ArrayList<>();
        cashOutItemInfoList.add(new CashOutItemInfo(1, 10, true));
        cashOutItemInfoList.add(new CashOutItemInfo(2, 20, true));
        cashOutItemInfoList.add(new CashOutItemInfo(3, 30, true));
        cashOutItemInfoList.add(new CashOutItemInfo(4, 40, true));
        cashOutItemInfoList.add(new CashOutItemInfo(5, 50, false));
        cashOutItemInfoList.add(new CashOutItemInfo(6, 60, true));
        cashOutItemInfoList.add(new CashOutItemInfo(7, 70, true));
        cashOutItemInfoList.add(new CashOutItemInfo(8, 80, true));
        cashOutItemInfoList.add(new CashOutItemInfo(9, 90, false));
        ZeusCashOut.getInstance().showCashOutUI(10000, cashOutItemInfoList);

8.5 提现相关错误码

错误码 说明
ZeusCode.CODE_NETWORK_ERROR 网络异常
ZeusCode.CODE_CASH_OUT_INFO_ERROR 提现参数信息错误
ZeusCode.CODE_CASH_OUT_ORDER_ERROR 提现订单格式错误
ZeusCode.CODE_CASH_OUT_AMOUNT_ERROR 提现金额错误
ZeusCode.CODE_CASH_OUT_TOO_FREQUENTLY 提现接口调用太频繁
ZeusCode.CODE_CASH_OUT_FAILED 提现失败,可能是达到提现限制或者其他原因,可根据接口返回的msg字段查看具体情况
ZeusCode.CODE_CASH_OUT_QUERY_HISTORY_FAILED 提现记录查询失败
ZeusCode.CODE_CASH_OUT_RESULT_UNKNOWN 提现查询失败,结果未知

9. 注意事项

9.1 代码混淆

  • 如果您的游戏使用了混淆,请添加
-dontwarn com.zeus.**
-keep class com.zeus.**{ *; }

-keepattributes *Annotation*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
-dontwarn android.**
-keep class android.** { *; }
-dontwarn com.android.**
-keep class com.android.** { *; }