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 愉快

results matching ""

    No results matching ""