SDK3 主要API使用说明
SDK3.0(SDK版本号对应为3**) 相对于与2.0 有了不少改变, 总体而言,简化了 api 的使用。
1 SDK初始化
SDK的初始化分为两步:Application和Activity的初始化。
1.1 在Application中初始化SDK
A、创建自己的自定义Application,并重写onCreate()方法,事例如下:
public class BadamApp extends Application{
// 这里的 三个 static 为初始化参数,具体请参见后面的[初始化参数说明]
// 应用ID, 从 后台获取
public static final String mAppId = BadamContant.EXTRA_APP_ID;
// 应用 api 加密字符串, 从应用后台获取
private static final String mApiSecret = BadamContant.APISECRET;
/**
* 语言使用, 这里使用的是维语,其他语言如下:
* {@link BadamContant#LANG_TYPE_ZH} 中文(默认)
* {@link BadamContant#LANG_TYPE_IR} 伊朗波斯语
* {@link BadamContant#LANG_TYPE_HE} 中国新疆 哈萨克语
* {@link BadamContant#LANG_TYPE_EN} 英文(当前实际上是中文)
* 建议:测试阶段使用中文(毕竟维语🐜文没几个人看得懂), 测试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);
// 仅单机需要接入闪屏广告,非单机请不要调用下面这一行,单机游戏调用下面这一行时, 同时需要参考
}
}
B、配置AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.game.ziipin.badamsdkv2">
<!-- 爱贝支付所需要的权限 start -->
<!-- 银联相关配置 -->
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.hardware.nfc.hce" /> <!-- 银联相关配置 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- 银联相关配置 -->
<uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 外部存储 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.Light.NoTitleBar">
<!-- 爱贝支付设置 start -->
<!-- 银联支付相关配置 -->
<uses-library
android:name="org.simalliance.openmobileapi"
android:required="false" /> <!-- 网页显示界面 -->
<activity
android:name="com.iapppay.sdk.main.WebActivity"
android:configChanges="screenSize|orientation|keyboard|navigation|layoutDirection"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.iapppay.ui.activity.PersonCenterActivity"
android:configChanges="screenSize|orientation|keyboard|navigation|layoutDirection"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 收银台普通界面 -->
<activity
android:name="com.iapppay.ui.activity.PayHubActivity"
android:configChanges="screenSize|orientation|keyboard|navigation|layoutDirection"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 选择充值金额界面 -->
<activity
android:name="com.iapppay.ui.activity.SelectAmountActivity"
android:configChanges="screenSize|orientation|keyboard|navigation|layoutDirection"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.iapppay.ui.activity.ChargeActivity"
android:configChanges="screenSize|orientation|keyboard|navigation|layoutDirection"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 游戏卡和话费卡充值界面 -->
<activity
android:name="com.iapppay.ui.card.GamepayActivity"
android:configChanges="screenSize|orientation|keyboard|navigation|layoutDirection"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- alipay sdk begin (新的支付宝) -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" /> <!-- alipay sdk end -->
<uses-library
android:name="org.simalliance.openmobileapi"
android:required="false" /> <!-- 银联3.3.3start -->
<uses-library
android:name="org.simalliance.openmobileapi"
android:required="false" />
<!-- badam WAP, 如果游戏是横屏的, 请在 本 activity 中加 android:screenOrientation="landscape" 强制使用 横屏-->
<activity
android:name="com.ziipin.pay.sdk.library.WebPayActivity"
android:exported="false"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|layoutDirection|smallestScreenSize"
android:theme="@style/Theme.WebPay">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="com.badam.pay2sdk.WEBPAY"/>
</intent-filter>
</activity>
</application>
</manifest>
请将上述配置中的 user-permission
,activity
, user-library
配置融合到你自己的 AndroidManifest.xml
文件中, 如果需要将支付的中间页面也改为横屏,请在 com.ziipin.pay.sdk.library.WebPatActivity
配置中添加android:screenOrientation="landscape"
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, BadamApp.LANG, new InitListener() {
@Override
// success 初始化是否成功,
// errorCode, 初始化失败时的错误码
// message, 初始化失败时错误码对应的提示
public void onInitResult(boolean success, int errorCode, String message) {
Logger.debug( success ? "初始化成功" : "初始化失败" + message);
}
});
}
2 用户入口
用户体系相关的接口只需要通过一行代码调用,其它的都放在SDK中完成。
2.1 接口描述
根据客户端需求,SDK做了两个入口:普通入口和快速登录入口,普通入口有登录和注册页面;快速登录入口没有界面,点击直接进入。普通入口适合重度游戏,强调用户注册登录的应用场景;快速登录入口适合休闲类的小游戏,不强调用户登录注册,希望用户进入游戏就可以直接上手玩儿的。CP在接入的时候根据实际需求自行选择一种接入方式即可。
普通入口
BadamSdk.getInstance().enterBadamSdk(Activity activity, BadamUserListener, listener);
快速登录入口, 非常推荐
BadamSdk.getInstance().quickLoginBadamSdk(Activity activity, BadamUserListener listener);
BadamUserListener 为登录回调, 其接口定义为: ```java public interface BadamUserListener {
// user 用户登录后的用户数据, 登录失败时为 null, // errorCode,登录成功时为0, 与 user 结合使用 // message 登录失败时的提示,与 errorCode 对应 void onUserResult(UserBean user, int errorCode, String message);
}
UserBean 为巴达木平台定义的用户数据结构, 其字段为:
```java
public class UserBean {
public String appid; // 非空,当前应用的应用ID
public String token; // 非空,当前登录用户的 token
public String openid;// 非空,登录用户本次登录的 openid, 同一用户本字断唯一,不会改变
public boolean isBind;// 是否绑定手机号
public String account;// 可能为空, 当前登录用户的账户
public String nickname;// 可能为空, 本次登录用户的昵称
public String avatar; // 可能为空, 本次登录用户的头像
public int sex; // 性别,用户的性别,可能未设置
public String born;// 可能为空, 用户的生日
}
登录成功时UserBean中的前三个字断一定不会为空,使用时推荐只使用这三个 field
2.2 用户切换
本SDK中没有内置用户切换API, 但是用户可在浮动图标中进入个人信息页面进行切换,此时可接收新进入的用户信息,其接收方式为。
@Override
protected void onResume() {
// 应用切换或者切换到后台之后,再切换游戏时显示悬浮窗
// 第一个参数为 Activity 实例,
// 第二个参数为当前的应用 appid
// 第三个参数为用户回调,用户可在这里进入个人信息页面进行账户切换行为。
BadamSdk.getInstance().showWindow(this, BadamApp.mAppId, BadamUserListener listener);
super.onResume();
}
2.3 显示和隐藏浮动图标
显示 api 为 showWindow(Activity activity, String appId, BadamUserListener listener)
, 隐藏 api 为 hideWindow(Activity activity)
, 具体使用时我们推荐以如下方式使用:
@Override
protected void onResume() {
// 应用切换或者切换到后台之后,再切换游戏时显示悬浮窗
// 第一个参数为 Activity 实例,
// 第二个参数为当前的应用 appid
// 第三个参数为用户回调,用户可在这里进入个人信息页面进行账户切换行为。
sdk.showWindow(this, BaseApp.mAppId, BadamUserListener listener);
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 应用切换或者切换到后台之时,隐藏悬浮窗
sdk.hideWindow(this);
}
@Override
protected void onDestroy() {
// 退出游戏或者杀死游戏进程时,隐藏悬浮窗
sdk.hideWindow(this);
super.onDestroy();
}
当然如果不想显示的浮动图标的话,不调用上这两个 api 即可
2.4 服务端用户校验
3.0 服务端校验用户登录 api 已经进行了更改,具体请参考:https://h5-doc.badambiz.com/chapter3-started/step1.html
3 更新用户角色
客户端在角色信息发生改变时(比如等级升高等)需要上报角色信息,此时就需要调用该接口,具体调用如下:
/**
* openId 登录用户的 openId
* roleName 角色名
* roleArea 区服
* roleId 角色ID
* level 用户等级
*/
BadamSdk.getInstance().addRole(Activity activity, String appid, String openId, String roleName, String roleArea, String roleId, int level);
4 支付
4.1 方法说明
在需要支付的地方调用 payCash
方法, 其中定义如下:
/** 支付时需要提供的参数及其意义请参考下表:
* appOrder : 每次支付行为的订单号。用于三方通信,当Badam服务器确认 付成功之后,将会携带该参数向客户服务发送成功响应,详情参考服务端接 指南。
* amount : 支付金额,单位为分,建议为200、400、600等200的整数值。
* goodsName :商品名称, 用于支付界面显示。
* userData :客户端透传参数, 付完成时将会下发给客户服务端。
* openId: mOpenId是户唯标识登陆或注册成功之后SDK会返回给客户端。
*/
BadamSdk.getInstance().payCash(Activity activity, String appOrder, int amount, String goodsName, String userData, String userData, PayResultListener listener);
// PayResultListener 定义为:
public interface PayResultListener {
/**
* 用户发起支付行为后的回调
* @param orderId 巴达木 SDK 订单ID,
* @param resultCode 本次支付的状态码, <br />可能值为:<ul><li>{@link ErrorCode#PAY_SUCCESS} 支付成功</li>
* <li>{@link ErrorCode#PAY_FAIL} 支付失败(用户没有点击取消按钮,通过其他不期待的方式取消了当前的支付行为)</li>
* <li>{@link ErrorCode#PAY_CANCELLED} 用户取消</li>
* @param errorCode 当 resultCode 不为 {@link ErrorCode#PAY_SUCCESS} 时的说明代码,具体请参考 {@link ErrorCode}
* 里 FAIL_ 开始的代码定义以及说明
* @param message errorCode 不为 {@link ErrorCode#FAIL_SUCCEED} 时的 代码描述
*/
void onPayResult(String orderId, int resultCode, int errorCode, String message);
}
特别需要注意的是, 需要接收支付结果,需要复写 onActivityResult
方法, 如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 支付时需要接收这一行为,必须传入
BadamSdk.getInstance().onActivityResult(requestCode, resultCode, data);
// 下面处理自己业务逻辑内的行为
}
4.2 支付时生命周期行为:
在支付行为的Activity中调用支付功能后,重写相应的生命周期onPause()、onResume()、onDestroy()方法:
@Override
protected void onPause() {
super.onPause();
BadamSdk.getInstance().onPause(this);
}
@Override
protected void onResume() {
super.onResume();
BadamSdk.getInstance().onResume(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
BadamSdk.getInstance().onDestroy(this);
}
5 其他
祝 BUG 愉快