云步zeus base sdk集成文档_Android(v4.0.7)
1. 导入SDK资源
1.1 获取SDK
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: 兑换码,开发阶段未经过打包可以使用11111,22222,33333,44444,55555进行调试,分别对应的发货商品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或安装的版本不支持
}
参数说明:
- key: QQ群的key,在腾讯qq群管理后台生成:http://qun.qq.com/join.html
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. 统计模块接口
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.** { *; }