SDK介绍

  • 安卓 SDK用于安卓游戏联运,主要提供用户系统、支付系统、游戏攻略、游戏礼包等功能。
  • 安卓 SDK接入配置SDK版本,minSdkVersion=大于等于16,targetSdkVersion=小于26。

注意事项

  • 接口参数大小写敏感
  • request 和 response的编码格式均为 UTF-8

前期准备

1.SDK接入技术人员仔细阅读该对接文档

2.下载SDK-DEMO示例 下载,获取DuoJiaoLib工程

3.CP提供支付回调地址。

4.获取平台配置参数:

字段 描述
DJ_APPID app_id(游戏ID)
DJ_APPKEY app_key(游戏KEY)
DJ_CLIENTID client_id(客户端ID)
DJ_CLIENTKEY client_key(客户端KEY)
DJ_AGENT 渠道标识(SDK默认值)
DJ_GAMEVERSION 游戏版本号(以接入的游戏版本为准)
DJ_SDKVERSION sdk版本号(一般不需要修改)

接入步骤

安卓 SDK导入

引入SDK提供的(DuoJiaoLib)工程,(DuoJiaoLib是基于eclipse开发) 具体流程如下:

  • 右键点击游戏打包工程,弹出菜单中选择Properties。
  • 选中Android一栏在界面中点击Add,在弹出页中选择需要导入的DuoJiaoLib工程,点击OK,导入Lib成功(最终样图如下) SDK导入
  • 将DuoJiaoDemo的AndroidManifest文件中的权限声明以及配置复制到你的打包工程中,注意启动页面需要替换成你自己的页面
  • 将AndroidManifest中的(DJ_APPID、DJ_CLIENTID、DJ_CLIENTKEY、DJ_GAMEVERSION)替换为:从平台获取的数据(DJ_AGENT、DJ_SDKVERSION可以不修改)
  • DuoJiaoDemo assets目录下的图片文件复制到你的打包工程中,(不然会导致微信无法支付)

接口调用

1. SDK横竖屏设置

设置横竖屏设置一次生效,默认情况下是横屏展示,如果游戏为竖屏必须在登录前调用设置方法,不然会出现页面展示异常

    //设置竖屏展示
    YTSDKManager.setScreenViewStatus(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,SDKActivity.this);
    //设置横屏展示
    YTSDKManager.setScreenViewStatus(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,SDKActivity.this);
    //设置日志打印 正式上线需要替换成flase
    Logger.setLog(true);

2. SDK初始化

ttwsdkmanager = YTSDKManager.getInstance(this,new InitCallback() {

            @Override
            public void onInitSuccess(String arg0) {
                // TODO Auto-generated method stub
                //如果需要自动登录请在此处添加登录相关接口
            }

            @Override
            public void onInitFail(String arg0) {
                // TODO Auto-generated method stub
            }
        })

调用初始化之前必须确保:

1.上下文路径必须为Activity实例.

2.AndroidManifest.xml 中的AppID等配置参数为当前游戏参数。

3. SDK登录

 ttwsdkmanager.showLogin(this, true, new OnLoginListener() {
            @Override
            public void loginSuccess(LogincallBack logincallback) {
                // TODO Auto-generated method stub111
                System.out.println("登录成功");
                 if(logincallback!=null){
                    String user_id = logincallback.mem_id;
                    String user_token = logincallback.user_token;
                }
            }

            @Override
            public void loginError(LoginErrorMsg errorMsg) {
                // TODO Auto-generated method stub
                if (errorMsg != null) {
                    Toast.makeText(SDKActivity.this, errorMsg.msg,
                            Toast.LENGTH_SHORT).show();
                }

            }
        });

调用登录必须确保:
1.SDK初始化完成,否则将无法登录。

4. 创角/角色升级

ttwsdkmanager.addUserRole(this, "女儿国", "1", "小清新", "1", "190",
                new RolekCallback() {

                    @Override
                    public void onSuccess(Object responseString) {
                        // TODO Auto-generated method stub 正式游戏接入时不需要Toast
                        Toast.makeText(SDKActivity.this, "创角信息提交成功",
                                Toast.LENGTH_SHORT).show();
                        // 接口调用成功 响应结果在这里
                    }

                    @Override
                    public void onFailure(Object failureString) {
                        // TODO Auto-generated method stub
                        tv_userRole.setClickable(true);
                    }
                });

为了SDK平台更好的获取有用数据,所以游戏接入时务必接入此接口。

5. 游戏购买道具支付

ttwsdkmanager.showPay(this, "roleid", money, "1", "魔神", "金币", "", "描述",
                new OnPaymentListener() {
                    @Override
                    public void paymentSuccess(PaymentCallbackInfo callbackInfo) {
                        // TODO Auto-generated method stub
                        Toast.makeText(
                                getApplication(),
                                "支付金额数:" + callbackInfo.money + " 消息提示:"
                                        + callbackInfo.msg, Toast.LENGTH_LONG)
                                .show();
                    }

                    @Override
                    public void paymentError(PaymentErrorMsg errorMsg) {
                        // TODO Auto-generated method stub
                        Toast.makeText(
                                getApplication(),
                                "支付失败:code:" + errorMsg.code + "  ErrorMsg:"
                                        + errorMsg.msg + "  预支付的金额:"
                                        + errorMsg.money, Toast.LENGTH_LONG)
                                .show();
                    }
                });

调用支付必须确保:

1.DuoJiaoDemo中assets目录下的文件必须复制到你的对接工程中,不然将无法调起微信支付。

6. 游戏退出

ttwsdkmanager.doOutAdavert(this, true, new ClickCallback() {

                @Override
                public void confirm() {
                    // TODO Auto-generated method stub
                    SDKActivity.this.finish();
                    ttwsdkmanager.recycle();
                }

                @Override
                public void cancel() {
                    // TODO Auto-generated method stub
                    Log.i("点击取消", "取消");
                }
            });

为了保证游戏正常运行和更好的游戏体验请务必在窗口关闭时手动调用 ttwsdkmanager.recycle();


接口说明

1.SDK初始化

SDK提供工具类YTSDKManager,游戏接入必须获取该类实例。 获取实例方法:

//方法1
YTSDKManager.getInstance(Activity content)
//方法2
YTSDKManager.getInstance(Activity content,InitCallback callback)

初始化SDK时需要调用(方法2),需要监听初始化成功与失败回调。
初始化成功后如果当前YTSDKManager对象没有调用过destroy()方法,那么想再次获取YTSDKManager实例,只需调用(方法1)即可。
YTSDKManager.getInstance(Activity content)可以多次调用,不会影响程序运行性能.

注: 1.参数Context必须为游戏的Activity. 2.初始化强烈推荐使用(方法2)调用.

2.登录/注册

完成SDK初始化后,通过获取到的实例调用登录接口,当用户第一次安装时会调起登录窗口:
登录窗口提供一下功能:

  • 一键注册
  • 手机注册
  • 短信验证码登录
  • 找回密码
    如果用户有登录过,会根据接口传递的参数判断是否进行自动登录,自动登录会延迟二秒执行登录操作,以便于用户进行切换账户。
    SDK登录成功后默认展示浮标。

接口定义

public void showLogin(acontext, Boolean isShowQuikLogin,OnLoginListener loginlistener)

参数说明

参数名 类型 参数说明
acontext Content 上下文路径
isShowQuikLogin boolen 是否显示快捷登录,true为快捷登录/false不显示快捷登录
onloginListener OnLoginListener 登录接口回调

回调说明

loginSuccess(LogincallBack logincallback) //登录成功

loginError(LoginErrorMsg logincallback) //登录失败
  • LogincallBack:
参数名 类型 参数说明
mem_id String 登录成功后用户ID(唯一)
user_toke String 用户toke(唯一用户服务端校验)
  • loginError:
参数名 类型 参数说明
code int 登录失败错误码
msg String 登录失败的消息提示

完整示例

sdkManager.showLogin(this, true, new OnLoginListener() {
    @Override
    publicvoid loginSuccess(LogincallBack logincallback) {
        //登录成功
        if(logincallback!=null){
            String user_id = logincallback.mem_id;
            String user_token = logincallback.user_token;
        }
    }

    @Override
    publicvoid loginError(LoginErrorMsg errorMsg) {
        if(errorMsg!=null){
            // 登录失败的借口回调,CP自行调用
            intcode = errorMsg.code;// 登录失败的状态码
            String msg = errorMsg.msg;// 登录失败的消息提示
        }
    }
});

3.购买道具

在完成初始化并已经获取到SDK实例的情况下,购买游戏内道具时调用此接口,为游戏提供支付系统。
安卓SDK提供多种稳定支付方式,由平台自行控制。

接口定义

public void showPay(Context ctx,String roleid, int money,String serverid, 
    String productname, String productdesc, String fcallbackurl String attach,OnPaymentListener paymentListener
)

参数说明

参数名 类型 参数说明
ctx String 上下文路径(必传)
roleid String 角色ID(必传)
money String 支付金额(必传)
serverid String 游戏商(CP)游戏服务器信息(必传)
productname String 商品名称(必传)
productdesc String 商品明细 (必传)
fcallbackurl String 回调地址(不必传/可传空,直接给出地址由商务配置)
attach String 扩展信息(不必传/可传空)
paymentListener OnPaymentListener 支付客户端回调接口(必传)

回调说明

paymentSuccess(PaymentCallbackInfo callbackInfo) //支付成功  

paymentError(PaymentErrorMsg errorMsg) //支付失败
  • PaymentCallbackInfo:
参数名 类型 参数说明
msg String 支付结果文字描述
money String 支付金额
  • PaymentErrorMsg:
参数名 类型 参数说明
code int 支付失败错误码
msg String 支付失败的消息提示
money String 支付金额

完整示例

sdkManager.showPay(this, "roleid", money, "1", "魔神", "金币", "", "描述", new OnPaymentListener() {
    @Override
    publicvoid paymentSuccess(PaymentCallbackInfo callbackInfo) {
        if(callbackInfo!=null){
            double money = callbackInfo.money;
            String msg = callbackInfo.msg;
        }
    }

    @Override
    publicvoid paymentError(PaymentErrorMsg errorMsg) {
        // TODO Auto-generated method stub
        if(errorMsg!=null){
            int code = errorMsg.code;
            double money = errorMsg.money;
            String msg = errorMsg.msg;
        }
        // 弹出支付失败信息,一般不用
        /*
         * Toast.makeText( getApplication(), "充值失败:code:" +
         * errorMsg.code + "  ErrorMsg:" + errorMsg.msg +
         * "  预充值的金额:" + errorMsg.money,
         * Toast.LENGTH_LONG).show();
         */
    }
});

4. 创角/角色升级

在完成初始化并已经获取到SDK实例的情况下,用户创建角色/角色升级时调用。

注:平台需要进行数据分析,因此该接口请务必调用

接口定义

public void addUserRole(final Context context, final String QuName,
final String QuId, final String RoleName, final String RoleId,final String RoleGrade, final RolekCallback roleCallBack)

参数说明

参数名 类型 参数说明
context Content 上下文路径(必传)
QuName String 区服名称(必传)
QuId String 区服ID(必传)
RoleName String 角色名称(必传)
RoleId String 角色ID(必传)
RoleGrade String 角色等级 (必传)
roleCallBack RolekCallback 客户端回调接口(必传)

回调说明

onSuccess(Object responseString) //提交成功 

onFailure(Object failureString) //提交失败

创角接口在后台提交,对接过程中不需要处理上报结果, 为了不影响用户游戏体验,不管上报失败还是成功尽量不要弹出提示。

完整示例

ttwsdkmanager.addUserRole(this, "女儿国", "1", "小清新", "1", "190",
                new RolekCallback() {
                    @Override
                    public void onSuccess(Object responseString) {
                        // TODO Auto-generated method stub
                           // 正式游戏不要弹Toast
                        Toast.makeText(YTSDKActivity.this, "创角信息提交成",
                            Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFailure(Object failureString) {
                        // TODO Auto-generated method stub
                    }
                });

5. 游戏退出

  • 游戏退出时调用接口,在已经获取到SDK实例的情况下退出游戏时调用。
  • 此接口用于SDK资源回收内存释放,为了游戏性能、用户体验,必须调用此接口。
  • 游戏退出接口弹出"是否退出游戏窗口",用户点击会执行相应的回调方法。
注:必须在确认退出的回调方法中调用ttwsdkmanager.recycle() 接口.具体请参考下面的示例

接口定义

CodoOutAdavert(Content content, boole canBack,  ClickCallback click)

参数说明

参数名 类型 参数说明
content Content 上下文路径(必传)
canBack boole 是否允许返回(必传)
click ClickCallback 用户点击回调(必传)

回调说明

confirm() //点击确认 

cancel() //点击取消

完整示例

 ttwsdkmanager.doOutAdavert(this, true, new ClickCallback() {

        @Override
        public void confirm() {
            // TODO Auto-generated method stub
            ttwsdkmanager.recycle();  //请务必调用此接口
            YTSDKActivity.this.finish();
        }

        @Override
        public void cancel() {
            // TODO Auto-generated method stub
            Logger.msg("点击再玩一会 = " + "再玩一会");
        }
    });

混淆

SDK核心代码是以jar包及资源文件提供给用户的,其中jar包已经半混淆状态。
您在混淆自己APK包的时候请不要将game_sdk-xx的jar包再次混淆,若被混淆后可能会出现其他错误。
您可以在用ant构建混淆包的build.xml里面对应位置或者在proguard.cfg里加入:-libraryjarslibs/.jar以避免jar包被混淆。

SDK其他引用的第三方框架尽可能的不进行二次混淆
微信支付混淆:-keep class com.ipaynow.plugin.** {
;}

FAQ

初始化提示接口校验不通过

检查本地清单文件配置(APPID、CLIENTID、CLIENTKEY)是否配置正确

充值回调失败

检查提供的回调地址是否正确,接口请求格式是否正确。

微信支付无法启动微信

检查Demo中的Assets目录下的资源文件(kprogresshud_spinner.png)是否复制到主工程Assets目录下。

登录接口调用二次才弹出登录页问题

接入过程中,需要先调用YTSDKManager.getInstance(activity)初始化,再去调用showLogin().

支付宝支付无法拉起支付

请检查所引用的支付宝jar版本是否跟SDK保持一致。

微信支付提示动态库加载失败

检查第三方jar包是否被二次混淆。添加-keep class com.ipaynow.plugin.* {;}

results matching ""

    No results matching ""