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);

results matching ""

    No results matching ""