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成功(最终样图如下)
- 将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)可以多次调用,不会影响程序运行性能.
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资源回收内存释放,为了游戏性能、用户体验,必须调用此接口。
- 游戏退出接口弹出"是否退出游戏窗口",用户点击会执行相应的回调方法。
接口定义
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.* {;}