2.2 主要API使用说明
2.2.1 SDK初始化
SDK的初始化分为两步:Application和Activity的初始化。
2.2.1.1 在Application中初始化SDK
A、创建自己的自定义Application,并重写onCreate()方法,事例如下:
public class BadamApp extends Application{
// 这里的 三个 static 为初始化参数,具体请参见后面的[初始化参数说明]
// 应用ID, 从 后台获取
private static final String mAppId = "dsdsd";
// 应用 api 加密字符串, 从应用后台获取
private static final String mApiSecret = "dsdsdsdsdsdsds";
/**
* 语言使用, 这里使用的是维语,其他语言如下:
* {@link BadamContant#LANG_TYPE_ZH} 中文(默认)
* {@link BadamContant#LANG_TYPE_EN} 英文(当前实际上是中文)
* {@link BadamContant#LANG_TYPE_WY} 维吾尔语
* {@link BadamContant#LANG_TYPE_HE} 哈萨克语
* {@link BadamContant#LANG_TYPE_IR} 伊朗波斯语
*
* 建议:测试阶段使用中文(毕竟维语🐜文没几个人看得懂), 测试OK后使用对应都目标语言, 一般为维语
*/
public static final int LANG = BadamContant.LANG_TYPE_WY;
@Override
public void onCreate() {
super.onCreate();
// Logger.setEnable(true/false) 会启用/禁用 sdk 的日志信息, 调试阶段 设置为 true 可以看一些调试信息
// 默认值为 false,即默认不打印 sdk 日志信息
Logger.setEnable(true);
BadamSdk.getInstance().init(this, mAppId, mApiSecret);
// 仅单机需要接入闪屏广告,非单机请不要调用下面这一行,单机游戏调用下面这一行时, 同时需要参考 AndroidManitest.xml 中
// 关于闪屏 activity 的配置信息(指定闪屏后跳转的Activity)
// BadamSdk.getInstance().splashTo(MainActivity.class);
}
}
B、配置AndroidManifest
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".BadamApp"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
单机游戏接入闪屏广告需要在 AndroidManifest.xml 中添加额外的 activity
<activity android:name="com.ziipin.pay.sdk.library.ui.BadamAdActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
⚠️注意⚠️
不接单机广告的CP可以略过这一段配置。
2.2.1.2 在Activity中初始化SDK
在Activity使用SDK的相关API方法前,需要先在onCreate()方法中初始化SDK,设置相关的布局语言:
BadamSdk.getInstance().initActivity(Activity activity, int lang, InitListener listener);
具体事例如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BadamSdk.getInstance().initActivity(this, LANG, new InitListener() {
@Override
public void onInitResult(boolean success, int erro, String message) {
Logger.debug( success ? "初始化成功" : "初始化失败" + message);
}
});
}
初始化参数说明:
- mAppId:App申请时系统下发的appid;
- mApiSecret:App申请时系统下发的apiSecret;
- LANG 语言 ,客户端根据需要设置需要显示的语言,如BadamContant.LANG_TYPE_ZH,具体语言描述如下:
public static final int LANG_TYPE_ZH = 1;//中文
public static final int LANG_TYPE_EN = 2;//英文
public static final int LANG_TYPE_WY = 3;//维吾尔语
public static final int LANG_TYPE_HE = 4;//哈萨克语
public static final int LANG_TYPE_IR = 5;//伊朗波斯语
2.2.2 用户入口
用户体系相关的接口只需要通过一行代码调用,其它的都放在SDK中完成,返回结果在onActivityResult中去取,然后再进行相对应的处理。
2.2.2.1 接口描述
根据客户端需求,SDK做了两个入口:普通入口和快速登录入口,普通入口有登录和注册页面;快速登录入口没有界面,点击直接进入。普通入口适合重度游戏,强调用户注册登录的应用场景;快速登录入口适合休闲类的小游戏,不强调用户登录注册,希望用户进入游戏就可以直接上手玩儿的。CP在接入的时候根据实际需求自行选择一种接入方式即可。
普通入口
BadamSdk.getInstance().enterBadamSdk(Activity activity);
快速登录入口
BadamSdk.getInstance().quickLoginBadamSdk(Activity activity);
2.2.2.2 返回结果
通过Intent的传递,这里直接将UserBean对象传回来了,如果登录或者注册成功了,这里就能够返回UserBean对象,失败则返回null同时给出想对应的toast提示;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data == null){
return;
}
UserBean userBean = null;
switch (resultCode){
case BadamContant.SDK_ENTER_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.SDK_ENTER_INTENT_RESULT_KEY);
break;
case BadamContant.ACCOUNT_LIST_LOGIN_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.ACCOUNT_LIST_LOGIN_INTENT_RESULT_KEY);
break;
case BadamContant.QUICK_LOGIN_SDK_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.QUICK_LOGIN_SDK_INTENT_RESULT_KEY);
break;
case BadamContant.ACCOUNT_REGISTER_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.ACCOUNT_REGISTER_INTENT_RESULT_KEY);
break;
case BadamContant.ACCOUNT_LOGIN_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.ACCOUNT_LOGIN_INTENT_RESULT_KEY);
break;
case BadamContant.PHONE_REGISTER_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.PHONE_REGISTER_INTENT_RESULT_KEY);
break;
case BadamContant.PHONE_LOGIN_RESULT_CODE:
userBean = (UserBean)data.getSerializableExtra(BadamContant.PHONE_LOGIN_INTENT_RESULT_KEY);
break;
}
}
2.2.2.3 相关标识
相关标识如下:
/***sdk入口中机器码登录(试玩)***/
public static final int SDK_ENTER_RESULT_CODE = 101;
/***手机号注册***/
public static final int PHONE_REGISTER_RESULT_CODE = 111
/***手机号登陆***/
public static final int PHONE_LOGIN_RESULT_CODE = 121;
/***账号注册***/
public static final int ACCOUNT_REGISTER_RESULT_CODE = 131;
/***账号登陆***/
public static final int ACCOUNT_LOGIN_RESULT_CODE = 141;
/***找回密码***/
public static final int FIND_BACK_PWD_RESULT_CODE = 151;
/***账号列表登陆***/
public static final int ACCOUNT_LIST_LOGIN_RESULT_CODE = 161;
/***快速登录sdk***/
public static final int QUICK_LOGIN_SDK_RESULT_CODE = 171;
2.2.3 更新用户角色
客户端在角色信息发生改变时(比如等级升高等)需要上报角色信息,此时就需要调用该接口,具体调用如下:
2.2.3.1 方法说明
BadamSdk.getInstance().addRole(Activity activity, UserReq userReq, InitListener listener);
事例如下:
private void updateRoleInfo(){
User user = new User();
UserReq userReq = new UserReq(mContext);
userReq.appid = APPID;
userReq.openid = user.openid;
userReq.token = user.token;
userReq.roleid = "1233";
userReq.name = "角色名称";
userReq.level = 1;//角色等级
userReq.appArea = "游戏所在的区服";
BadamSdk.getInstance().addRole(this, roleReq, new InitListener() {
@Override
public void onInitResult(int result, String message) {
}
});
}
更新角色信息时需要提供的参数及其意义请参考下表:
- appid:应用唯一标识,申请SDK的时候回下发。
- openid: 用户唯一标识,登录或注册成功后SDK会返回。
- token : 用户令牌,登录或注册成功后SDK会返回。
- roleid : 角色ID。
- name:角色名称,当前游戏的角色名称。
- level:角色等级,当前游戏角色等级,数据类型为[整型]。
- appArea:游戏区服,当前游戏所在哪一区的服务。
2.2.3.1 返回结果说明
根据【result】返回的值不同,有如下两种情况:
- 【0】:如何值为零,则说明上报信息成功;
- 【非0】:非零则表示上报失败;
2.2.4 悬浮窗
悬浮窗是用户体系的入口,在用户登录完成进入客户端之后为用户提供绑定手机号等交互操作。
2.2.4.1 显示悬浮窗
A、登录成功显示
登录成功后,进入主页面显示悬浮窗,操作如下:
BadamSdk.getInstance().showWindow(Activity activity);
B、后台切换回来显示
切换到Home或者其他应用,再切换回来后显示,操作如下:
@Override
protected void onResume() {
super.onResume();
if(mUser != null){
BadamSdk.getInstance().showWindow(this);
}
}
这个时候需要判断当前帐号还是否存在。
2.2.4.2 隐藏悬浮窗
退出游戏时调用隐藏悬浮窗
BadamSdk.getInstance().hideWindow(Activity activity);
操作如下:
@Override
protected void onPause() {
mPayInterface.onPause(this);
BadamSdk.getInstance().hideWindow(this);
super.onPause();
}
@Override
protected void onDestroy() {
if(!isFinishing()){
BadamSdk.getInstance().hideWindow(this);
}
super.onDestroy();
}
2.2.5 支付
2.2.5.1 方法说明
在需要支付的地方调用下面方法:
public void onPay(View v) {
BadamSdk.getInstance().pay(this,mAppOrder,mAmount,mGoodsName,mUserData,mOpenId,new PayResultListener(){
@Override
public void onPayResult(String orderId, int result, int errorCode, String message) {
String text = String.format(Locale.CHINESE, "%d - %s - %s", result, message, orderId);
Utils.showToast(PayActivity.this, text);
}
});
}
支付时需要提供的参数及其意义请参考下表:
- mAppOrder : 每次支付行为的订单号。用于三方通信,当Badam服务器确认 付成功之后,将会携带该参数向客户服务发送成功响应,详情参考服务端接 指南。
- mAmount : 支付金额,单位为分,建议为200、400、600等200的整数值。
- mGoodsName :商品名称, 用于支付界面显示。
- mUserData :客户端透传参数, 付完成时将会下发给客户服务端。
- mOpenId: mOpenId是户唯标识登陆或注册成功之后SDK会返回给客户端。
2.2.5.3 回调说明
在支付时需要传递PayResultListener实例,用于接收支付结果: PayResultListener回调方法的第一个参数【orderId】为支付系统订单id,可能为空,该订单id主要用于排除错误原因。第二个参数【result】参数表示支付结果,取值包含:
取值 | 含义 |
---|---|
ErrorCode.PAY_FAIL | 支付失败 |
ErrorCode.PAY_SUCCESS | 支付成功 |
ErrorCode.PAY_CANCELLED | 用户取消支付 |
WEB端支付回调接口,用户应该在支付的Activity的onActivityResult方法中回调下面方法,如果没有正确回调该方法可能导致无法正常支付:
public static void onActivityResult(int requestCode, int resultCode, Intent data) {
BadamSdk.getInstance().onActivityResult(requestCode, resultCode, data);
}
2.2.5.4 生命周期说明
在支付行为的Activity中调用支付功能后,重写相应的生命周期onPause()、onResume()、onDestroy()方法:
@Override
protected void onPause() {
super.onPause();
mPayInterface.onPause(this);
}
@Override
protected void onResume() {
super.onResume();
mPayInterface.onResume(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mPayInterface.onDestroy(this);
}
其中mPayInterface为在Activity中定义的全局变量:
PayListener mPayInterface = BadamSdk.getInstance();
2.2.6 退出账号
切换帐号时需要SDK通知客户端做退出操作,这里采用广播的机制,点击切换账号按钮时,SDK发送【退出账号广播】,客户端接收到广播后再做退出游戏账号的操作。具体实现步骤如下:
2.2.6.1 生成广播接收器
public class LogoutReceiver extends BroadcastReceiver{
public static final String ACTION_REQUEST = "com.ziipin.badam.sdk.logout";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (!TextUtils.isEmpty(action) && (action.equals(ACTION_REQUEST))) {
boolean logoutSucceed = intent.getBooleanExtra(BadamContant.LOGOUT_SDK_INTENT_RESULT_KEY,false);
if(logoutSucceed){
//todo 客户端做登出操作
}
}
}
}
说明:
logoutSucceed 为 true
表示接收到需要退出的广播
2.2.6.2 注册广播接收器
- 创建接收器
LogoutReceiver logoutReceiver = new LogoutReceiver();
IntentFilter intentFilter = new IntentFilter();
- 注册接收器
intentFilter.addAction(LogoutReceiver.ACTION_REQUEST);
registerReceiver(logoutReceiver,intentFilter);
2.2.6.3 广播接收取消注册
unregisterReceiver(logoutReceiver);