此文档主要是用于在游戏及应用开发商需要接入龙图BASE SDK时,了解BASE SDK如何接入,接入过程中需注意的事项等。
接入龙图BASE SDK的游戏及应用的android客户端开发者。
服务端配置:请参考 通用接入文档—> 《SDK服务端接入说明文档》
是指androidmainfest.xml中的versionName。
在龙图自动打包系统里,serviceId是区分渠道信息的标识,研发如果要识别当前游戏包属于哪个渠道,请调用获取serviceId的接口(11.2),并和技术经理匹配各serviceId对应的渠道。
如果产品接入了第三方SDK,有需要根据包名、签名分配参数的情况,一定要提前通知技术经理。各个渠道包的包名、签名、证书等都不一样。自动打包将替换客户端包名、签名和证书。但不会自动替换第三方的参数。如地图、语音、推送能功能的第三方SDK。具体如何实现,需要根据具体情况操作。
注意:AndroidManifest.xml 中有需要替换为包名的位置,需要配置为ltbase_package_name
打包时打包工具会将ltbase_package_name 替换为当前渠道包名。
列如:包名为com.ltbase.lib
配置为:
<receiver android:name="com.android.PushServer.Alarm_BroadcastReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="pushserver.notice.ltbase_package_name" />
</intent-filter>
</receiver>
处理过为:
<receiver android:name="com.android.PushServer.Alarm_BroadcastReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="pushserver.notice.com.ltbase.lib" />
</intent-filter>
</receiver>
游戏使用龙图sdk的闪屏功能时,可以按照下面的闪屏制作规范,添加相应图片资源即可, 最多支持配置5套游戏闪屏。(如果测试功能可以使用demo工程龙图logo图片)
闪屏图片 制作规范:
横屏:
ltbase_gamelogo_landscape1.png
ltbase_gamelogo_landscape2.png
ltbase_gamelogo_landscape3.png
ltbase_gamelogo_landscape4.png
ltbase_gamelogo_landscape5.png
注意:每套闪屏 都需要做三个尺寸的图片,一套闪屏 需要存放到4个目录中,以第一套为例:
res\drawable 存放 尺寸:1280x720 名称:ltbase_gamelogo_landscape1.png 图片
res\drawable-xhdpi 存放 尺寸:1280x720 名称:ltbase_gamelogo_landscape1.png 图片
res\drawable-xxhdpi 存放 尺寸:2340x1080 名称:ltbase_gamelogo_landscape1.png 图片
res\drawable-xxxhdpi 存放 尺寸:2560x1440 名称:ltbase_gamelogo_landscape1.png 图片
竖屏:
ltbase_gamelogo_portrait1.png
ltbase_gamelogo_portrait2.png
ltbase_gamelogo_portrait3.png
ltbase_gamelogo_portrait4.png
ltbase_gamelogo_portrait5.png
注意:每套闪屏 都需要做三个尺寸的图片,一套闪屏 需要存放到4个目录中,以第一套为例:
res\drawable 存放 尺寸:720x1280 名称:ltbase_gamelogo_portrait1.png 图片
res\drawable-xhdpi 存放 尺寸:720x1280 名称:ltbase_gamelogo_portrait1.png 图片
res\drawable-xxhdpi 存放 尺寸:1080x2340 名称:ltbase_gamelogo_portrait1.png 图片
res\drawable-xxxhdpi 存放 尺寸:1440x2560 名称:ltbase_gamelogo_portrait1.png 图片
目前仅支持播放一个视频闪屏,视频闪屏将在sdk图片闪屏之前显示,如果游戏需要使用sdk 视频闪屏功能,请按照下面视频的制作规范制作视频:
1.视频文件名称:
ltbase_logovideo.mp4
2.视频长度;
最大不超过10秒。
3.视频帧宽高:
横屏:1280X720
竖屏:720X1280
4.视频存放目录:
制作好的视频存放到res\raw目录下。
游戏res资源文件中,png及xml文件命名最好不要过于简单,以免和第三方渠道重复。如close.png或close.xml命名的文件,可以加上游戏名前缀,game_close.png或game_close.xml。
需要根据调用龙图SDK提供的接口的返回值来确认游戏是否需要启用这三个接口和相应的UI按钮展示,因为根据渠道不同会用到其中之一或者所有或者都不用,具体接口调用详见接口说明(6.2.7)。
LTBaseSDK.getInstance(this).onPause()
LTBaseSDK.getInstance(this).onRestart()
LTBaseSDK.getInstance(this).onResume()
LTBaseSDK.getInstance(this).onStart()
LTBaseSDK.getInstance(this).onStop()
LTBaseSDK.getInstance(this).onDestroy()
LTBaseSDK.getInstance(this).onActivityResult(requestCode, resultCode, data)
LTBaseSDK.getInstance(this).onConfigurationChanged(newConfig)
LTBaseSDK.getInstance(this).onNewIntent(intent)
LTBaseSDK.getInstance(this).onBackPressed();
LTBaseSDK.getInstance(this).attachBaseContext(newBase)
LTBaseSDK.getInstance(this).onRequestPermissionsResult(requestCode, permissions, grantResults)
方式一:游戏工程直接引用《LTBase_Android_SDK_Lib_Base_完整版本号》此lib工程,工程内已包含res中的资源和lib库,assets中资源,请自行从《资源,LIB库和配置文件》目录中复制assets文件夹中内容到游戏工程的assets目录。如何引用lib工程这里不做详细说明,如不清楚如何导入lib工程到游戏工程请上网搜索,或者咨询龙图SDK技术人员。
方式二:直接从《资源,LIB库和配置文件》目录中复制所有资源和lib库到游戏工程的相应目录,包含res,libs,assets。
<!-- LTBaseSDK需要的权限 -->
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<!-- 游戏自己的启动activity类名,需要完整路径,必须配置 -->
<meta-data
android:name="ltbase_class_name"
android:value="com.longtu.sample.LTBase_Demo_MainActivity" />
<!-- 游戏请配置自己游戏的展示类型,竖屏游戏请配置成 portrait,横屏游戏请配置成landscape -->
<meta-data
android:name="ltbase_screenOrientation"
android:value="landscape" />
<!-- BASE SDK中上传崩溃日志的服务-->
<service
android:name="com.longtu.sdk.base.c.LTBaseCrashService"
android:process=":ltbaseCrash">
<intent-filter>
<action android:name="ltbase.UpCrashLog" />
</intent-filter>
</service>
兼容android高版本 31以上版本增加了android:exported=”true”
<!-- 闪屏配置,如使用此配置,请将游戏原启动activity的android.intent.category.LAUNCHER修改为android.intent.category.DEFAULT -->
<activity
android:name="com.longtu.sdk.base.logo.LTBaseLogoScreenActivity"
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"
android:screenOrientation="landscape"
android:exported="true"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 闪屏默认配置 -->
<meta-data
android:name="ltbase_logo_flag"
android:value="1" />
<!-- 闪屏时间为 2S -->
<meta-data
android:name="ltbase_logotime"
android:value="2000" />
<!-- 视频闪屏默认配置 -->
<meta-data
android:name="ltbase_videologo_flag"
android:value="1" />
<!-- 如游戏本身有Application类,则需要在代码中继承
com.longtu.android.channels.Info.LTBase_Channels_Application;如游戏本身没有
Application类,则需要在此添加配置,将AndroidManifest.xml中application的名字
命名为"com.longtu.android.channels.Info.LTBase_Channels_Application" -->
<application
android:name="com.longtu.android.channels.Info.LTBase_Channels_Application"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/NoTitle_FullScreen" >
</application>
注意:APK安装位置属性必须配置为android:installLocation=”auto”
1.手机游戏客户端会调用base sdk登录接口,发起登录/注册请求;
2.base sdk向龙图用户中心服务器发起登录/注册的请求;
3.龙图用户中心服务器向base sdk返回token、用户信息等等;
4.base sdk向游戏客户端返回登录结果,包含token和用户相关信息;
5.游戏客户端上传用户信息到游戏服务器;
6.游戏服务器根据token向龙图用户中心服务器发起登录验证;
7.龙图用户中心服务器向游戏服务器返回用户信息;
8.游戏服务器向游戏客户端返回登录结果;
/**
* 初始化SDK
*
* @param gameResVer 游戏资源版本号,无资源版本号可传""
* @param listener 回调接口
*/
public void LTBaseSDKInit(String gameResVer, LTBaseSDKListener listener)
参数名称 | 是否必传 | 类型 | 说明 |
---|---|---|---|
gameResVer | 可选 | String | 游戏资源版本号,如游戏无此概念则可以传null。 |
listener | 必须 | LTBaseSDKListener | 游戏需实现此回调中的所有接口。 |
// 初始化SDK
LTBaseSDK.getInstance(this).LTBaseSDKInit(gameResVer, new LTBaseSDKListener() {
@Override
public void LTBaseSDKExitgameCallBack(int arg0, String arg1) {
// TODO Auto-generated method stub
// 游戏使用龙图SDK退出接口时必须实现此回调,在此处实现退出游戏的功能。
MainActivity.this.finish();
// 不建议在此回调中使用杀进程的方式,杀进程的方法可以放到生命周期的onDestroy中。
}
@Override
public void LTBaseSDKInitCallBack(int code, String arg1) {
// TODO Auto-generated method stub
if (LTBaseCallbackCode.CODE_INIT_SUCCESS == code) {
// 游戏实现 初始化成功
} else {
// 游戏实现 初始化失败
}
}
@Override
public void LTBaseSDKLoginCallBack(int code, String msg, LTGameUserData arg2) {
// TODO Auto-generated method stub
if (code == LTBaseCallbackCode.CODE_LOGIN_SUCCESS) {
//登陆成功
} else {
// 登录失败
}
}
@Override
public void LTBaseSDKSwitchLoginCallBack(int code, String msg, LTGameUserData userData) {
// 当前渠道带有切换账号功能时,游戏需要实现此接口逻辑进行游戏登录。切换账号分2种情况:
// 一是调用SDK的切换账号接口实现账号的切换,此类型的切换账号按钮是由游戏去实现,建议放到登录界面,切换账号成功后,登录数据会在此接口返回,游戏可执行游戏的登录流程,类似登录成功接口的回调。
// 二是渠道SDK的悬浮框或者用户中心页面带有切换账号功能,如用户点击切换账号并登录成功后,登录数据会在此接口返回,但如果当前游戏场景处于游戏中,游戏正常应该先返回到登录界面,然后再通过SDK切换账号成功返回的数据执行游戏的登录流程。
if (code == LTBaseCallbackCode.CODE_LOGIN_SUCCESS) {
// 切换账号成功
} else {
// 切换账号失败
}
}
@Override
public void LTBaseSDKLogoutCallBack(int arg0, String arg1) {
// TODO Auto-generated method stub
// 注销成功 当前渠道带有注销功能的话由游戏实现,如返回到登录界面。
}
@Override
public void LTBaseSDKPayCallBack(int code, String pbid, String orderID) {
// TODO Auto-generated method stub
if (code == LTBaseCallbackCode.CODE_PAY_SUCCESS) {
// 支付成功
} else if (code == LTBaseCallbackCode.CODE_PAY_FAIL) {
// 支付失败
} else if (code == LTBaseCallbackCode.CODE_PAY_CANCEL) {
// 支付取消
} else if (code == LTBaseCallbackCode.CODE_PAY_UNKNOWN){
// 支付结果未知(下单成功)
}
}
});
SDK初始化结果回调 : void LTBaseSDKInitCallBack(int code, String msg);
SDK登录结果回调: void LTBaseSDKLoginCallBack(int code, String msg, LTGameUserData userdata);
SDK切换账号登录结果回调: void LTBaseSDKSwitchLoginCallBack(int code, String msg, LTGameUserData userdata);
SDK支付结果回调: void LTBaseSDKPayCallBack(int code, String pbid, String orderID);
SDK注销结果回调: void LTBaseSDKLogoutCallBack(int code, String msg);
SDK退出游戏回调: void LTBaseSDKExitgameCallBack(int code, String msg);
以上接口中的code参数为状态码。
/**
* 初始化结果回调
*
* @param code 结果状态码
* @param msg
*/
void LTBaseSDKInitCallBack(int code, String msg);
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
code | 必须 | int | LTBaseCallbackCode.CODE_INIT_SUCCESS 为成功,其他为失败 |
1.联运包调起联运SDK的登录界面;
2.官网包调起龙图官网登录界面;
/**
* 登陆接口
*/
public void LTBaseSDKShowLoginView()
// 调用登录接口
LTBaseSDK.getInstance(MainActivity.this).LTBaseSDKShowLoginView();
/**
* 登录结果回调
*
* @param code
* @param msg
* @param userdata
*/
void LTBaseSDKLoginCallBack(int code, String msg, LTGameUserData userdata);
此接口为初始化中回调接口之一。
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
code | 必须 | int | LTBaseCallbackCode.CODE_LOGIN_SUCCESS 为成功,其他为失败 |
msg | 必须 | String | 描述 |
userdata | 必须 | LTGameUserData | 当前登录用户的用户信息数据。 |
参数名称 | 类型 | 说明 |
---|---|---|
getUid | String | 用户中心生成的用户ID,游戏应以此ID作为用户登陆的唯一标识 |
getToken | String | 用户中心生成的用户token,游戏需要用来向用户中心服务器做登录验证 |
getLogintype | String | 登录类型 |
getUsername | String | 用户中心生成的用户名称 |
getUserServiceCode | String | 设备当前serviceCode数据,用于服务端打点使用 |
getReturnJson | String | Json格式的字符串。第三方用户系统返回给用户中心的数据,不同渠道返回的数据会有所不同,游戏根据情况酌情使用,不需要的话可以不取。 |
getLogintype: 登录类型,具体值的含义请见下表
loginType | 含义 |
---|---|
speedyLogin | 快速登录 |
speedyRegister | 快速注册 |
commonLogin | 普通登录 |
commonRegister | 普通注册 |
thirdHiddenLogin | 第三方用户登录 |
thirdHiddenRegister | 第三方用户注册 |
phoneVerifyCodeLogin | 手机验证码登录 |
phoneVerifyCodeRegister | 手机验证码注册 |
phoneLogin | 手机登录 |
phoneRegister | 手机注册 |
code为状态码,
code | 含义 |
---|---|
LTBaseCallbackCode.CODE_LOGIN_FAIL | 登录失败 |
LTBaseCallbackCode.CODE_LOGIN_FAIL | 登录失败,用户取消 |
LTBaseCallbackCode.CODE_LOGIN_TIMEOUT | 登录失败,连接超时 |
注销当前登录账号,注销成功后会调用游戏实现功能后的注销回调接口。
/**
* 登陆注销
*/
public void LTBaseSDKLogout()
LTBaseSDK.getInstance(MainActivity.this).LTBaseSDKLogout();
@Override
public void LTBaseSDKLogoutCallBack(int code, String msg)
此接口为初始化中回调接口之一,具体逻辑请游戏客户端实现。
暂时此接口只有成功的情况,游戏不需要处理code和msg。
某些渠道SDK当登录过一次后下次登录会变成自动登录,这个时候如果SDK内部没有注销或者切换账号的按钮,需要游戏调用此接口实现账号切换功能。
/**
* 账号切换
*/
public void LTBaseSDKSwitchAccount()
LTBaseSDK.getInstance(MainActivity.this).LTBaseSDKSwitchAccount();
/**
* 切换账号登录结果回调(返回值和登录相同)
*
* @param code
* @param msg
* @param userdata
*/
void LTBaseSDKSwitchLoginCallBack(int code, String msg, LTGameUserData userdata);
此接口为初始化中回调接口之一。
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
code | 必须 | int | LTBaseCallbackCode.CODE_LOGIN_SUCCESS 为成功,其他为失败 |
msg | 必须 | String | 描述 |
userdata | 必须 | LTGameUserData | 当前登录用户的用户信息数据。 |
参数名称 | 类型 | 说明 |
---|---|---|
getUid | String | 用户中心生成的用户ID,游戏应以此ID作为用户登陆的唯一标识 |
getToken | String | 用户中心生成的用户token,游戏需要用来向用户中心服务器做登录验证 |
getLogintype | String | 登录类型 |
getUsername | String | 用户中心生成的用户名称 |
getUserServiceCode | String | 设备当前serviceCode数据,用于服务端打点使用 |
getReturnJson | String | Json格式的字符串。第三方用户系统返回给用户中心的数据,不同渠道返回的数据会有所不同,游戏根据情况酌情使用,不需要的话可以不取。 |
getLogintype: 登录类型,具体值的含义请见下表
loginType | 含义 |
---|---|
speedyLogin | 快速登录 |
speedyRegister | 快速注册 |
commonLogin | 普通登录 |
commonRegister | 普通注册 |
thirdHiddenLogin | 第三方用户登录 |
thirdHiddenRegister | 第三方用户注册 |
phoneVerifyCodeLogin | 手机验证码登录 |
phoneVerifyCodeRegister | 手机验证码注册 |
phoneLogin | 手机登录 |
phoneRegister | 手机注册 |
code为状态码。
code | 含义 |
---|---|
LTBaseCallbackCode.CODE_LOGIN_FAIL | 登录失败 |
LTBaseCallbackCode.CODE_LOGIN_FAIL | 登录失败,用户取消 |
LTBaseCallbackCode.CODE_LOGIN_TIMEOUT | 登录失败,连接超时 |
成功登录并进入游戏后,游戏客户端必须调用此接口设置用户的角色信息,角色信息在其他功能接口中需要用到,如未调用则无法使用支付功能。用户首次创建或注册角色并登录时,需要调用一次注册设置和一次登录设置;用户使用老角色登录,则只需要调用一次登录设置。
LTROLE_SENDTYPE_LOGOUT 2.1.6版本 新增角色注销功能, 主要用于游戏内处理了角色登出,但是SDK没有办法拿到消息,在平台的统计数据上,角色在线数据不准的问题。
注意:
1.游戏内没有角色注册行为的,在游戏自动给用户创建角色的时候,即认为注册。
2.用户首次创建或注册角色并登录时,需先调用注册设置,再调用登录设置。
3.研发需要在本地做基础判断,一些特殊符号不允许出现在角色名、公会名、队伍名、联盟名等名称中,具体符号_(, | { } “ ‘ \ / @ $ # & ! - + ( ) . ? ~ )^*
/**
* 游戏在创建角色、登录、角色数据发生变化时调用
*
* @param roleinfo
*/
public void LTBaseSDKRoleInfo(final LTRoleInfo roleinfo)
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
setSendtype | 必须 | Int | LTRoleInfo.LTROLE_SENDTYPE_REGISTER:角色注册, LTRoleInfo.LTROLE_SENDTYPE_LOGIN:角色登陆 , LTRoleInfo.LTROLE_SENDTYPE_CHANGE : 角色信息变更 LTROLE_SENDTYPE_LOGOUT 角色注销 |
setServername | 必须 | String | 当前角色所在游戏服务器名称 |
setServerid | 必须 | String | 当前角色所在游戏服务器ID |
setRoleName | 必须 | String | 角色名称 |
setPlayerid | 必须 | String | 角色ID |
setRolelevel | 必须 | String | 角色等级 |
setViplevel | 必须 | String | 角色VIP等级,没有等级可以传”0” |
setLaborunion | 非必须 | String | 角色所在公会 |
setRoleCreateTime | 必须 | String | 角色创建时间(服务器采集)参数类型:String时间类型:long 精度:秒 (即10位数) |
setRoleLevelMTime | 必须 | String | 角色等级变化时间(服务器采集)参数类型:String 时间类型:long 精度:秒 (即10位数) |
LTRoleInfo roleInfo = new LTRoleInfo();
roleInfo.setSendtype(LTRoleInfo.LTROLE_SENDTYPE_REGISTER);
roleInfo.setRoleName(rolename);
roleInfo.setPlayerid(roleid);
roleInfo.setServerid(ServerId);
roleInfo.setServername(ServerName);
roleInfo.setRolelevel(RoleLv);
roleInfo.setViplevel(RoleVipLv);
// 角色注册成功需调用此接口设置角色信息,接口第一个参数为LTRoleInfo.LTROLE_SENDTYPE_REGISTE表示注册,正常情况下,注册只在新角色注册成功后调用一次
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseSDKRoleInfo(roleInfo);
LTRoleInfo roleInfo = new LTRoleInfo();
roleInfo.setSendtype(LTRoleInfo.LTROLE_SENDTYPE_LOGIN);
roleInfo.setRoleName(rolename);
roleInfo.setPlayerid(roleid);
roleInfo.setServerid(ServerId);
roleInfo.setServername(ServerName);
roleInfo.setRolelevel(RoleLv);
roleInfo.setViplevel(RoleVipLv);
// 角色登陆成功并成功进入游戏后需调用此接口设置角色信息,接口第一个参数为LTRoleInfo.LTROLE_SENDTYPE_LOGIN表示登陆,在每次角色登陆成功后都要调用
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseSDKRoleInfo(roleInfo);
进入第三方渠道SDK的用户中心或者龙图论坛界面,或者进入官网SDK的用户中心界面。
/**
* 进入用户中心接口,如果是用官网登陆的则进入官网的用户中心
*/
public void LTBaseSDKShowUserCenter()
LTBaseSDK.getInstance(MainActivity.this).LTBaseSDKShowUserCenter();
“用户中心”,“切换账号”,“登录注销”等接口必须接入。提供此接口用来引导游戏合理使用以上三个接口。根据SDK返回的值,判断是否在相应渠道客户端中显示或隐藏UI展示,以及和是否调用以上三个接口。
比如当前渠道需要调用用户中心接口,则需要将用户中心按钮显示出来并实现其接口调用的功能,如不需要,则需要隐藏用户中心的按钮。其他功能同理。
此三个功能SDK只提供功能接口,无UI显示,所以需要游戏实现展示或者隐藏“用户中心”,“切换账号”,“登录注销”的UI按钮。根据返回值给予显示或者隐藏。
/**
* 获取当前渠道游戏包是否要调用“用户中心”,“切换账号”,“登陆注销”等接口
*/
public boolean isUserCenterEnable()
public boolean isSwitchAccountEnable()
public boolean isLogoutEnable()
LTBaseSDK.getInstance(this).isLogoutEnable();
LTBaseSDK.getInstance(this).isSwitchAccountEnable();
LTBaseSDK.getInstance(this).isUserCenterEnable();
返回数据如下,boolean格式:
true: 表示需要调用
false: 表示不需要调用
1.游戏调用base sdk计费接口;
2.base sdk向计费中心发起支付请求;
3.计费中心生成订单号,sdk发起计费,服务器收到支付结果并向base sdk返回支付结果;
4.sdk回调游戏客户端支付完成
5.计费中心通知游戏服务器发货;
6.游戏服务器发送虚拟物品至玩家手机游戏客户端;
7.游戏服务器向计费中心返回发货结果;
调用自有支付功能或者第三方SDK的支付功能,实现游戏中的道具购买。
注意:
如游戏中所卖商品在游戏界面显示为“100元宝”,当调用支付接口时,商品名称请传“元宝”,商品数量请传“100”
如游戏中所卖商品在游戏界面显示为“月卡“,当调用支付接口时,商品名称请传“月卡”,商品数量请传“1”
如游戏中所卖“月卡”有多个,当调用支付接口时,商品名称建议传入月卡的金额。例如“30元月卡”、“50元月卡”等等,商品数量请传“1”
礼包类与月卡同理,请在商品名称尽量传入礼包对应的价格,例如:“30元礼包”,“50元礼包,商品数量请传“1”。
注意:官网包中支付宝等sdk支付方式,需要进行打包处理才可以支持。
/**
* 游戏进行支付时调用
*
* @param product 支付商品信息
*/
public void LTBaseSDKPay(final LTProduct product)
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
setProductId | 必须 | String | 游戏自定义的商品ID,必传。 |
setPrice | 必须 | String | 商品价格,单位为分。 |
setCurrencyType | 必须 | String | 货币类型(1人民币2美元3日元4港币5英镑6新加坡币7越南盾8台币9韩元10泰铢) |
setProductName | 必须 | String | 商品名称 |
setBuyNum | 必须 | String | 商品数量 |
setProductDesc | 必须 | String | 商品描述 |
setCurrency | 可选 | String | 购买的虚拟货币名称,比如 钻石,金币,宝石 等 |
setGamedDeliverUrl | 可选 | String | 游戏发放道具服务器地址,用户支付成功后计费中心会回调此地址告知游戏进行道具发放。 可以配置到SDK后台。 |
setExtension | 可选 | String | 游戏自定义数据,支付成功后,计费中心会将此字段数据回传给游戏服务器。 |
setRolelevel | 可选 | String | 角色等级,请传数字。 |
setViplevel | 可选 | String | 角色VIP等级,请传数字,如游戏中无角色VIP等级可以传0。 |
currencyType说明:
货币类型值 | 货币名称 | 货币单位 |
---|---|---|
1 | 人民币 | 分 |
2 | 美元 | 美分 |
3 | 日元 | 円 |
4 | 港币 | 分 |
5 | 英镑 | 便士 |
6 | 新加坡币 | 分 |
7 | 越南盾 | 盾 |
8 | 台币 | 元 |
9 | 韩元 | 元 |
10 | 泰铢 | 萨当 |
LTProduct product = new LTProduct();
product.setBuyNum("100");
product.setCurrency("钻石");
product.setCurrencyType("1");
product.setExtension("我是扩展字段");
product.setGamedDeliverUrl("http://www.longtugame.com");
product.setPrice("1");
product.setProductDesc("100测试商品");
product.setProductId("1000");
product.setProductName("测试商品");
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseSDKPay(product);
/**
* 支付结果回调
*
* @param code 结果类型
* @param pbid 游戏支付的商品id
* @param orderID 龙图计费中心产生的订单号。
*/
void LTBaseSDKPayCallBack(int code, String pbid, String orderID);
此接口为初始化中回调接口之一。
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
code | 必须 | Int | 结果状态码。 |
pbid | 必须 | String | 游戏自定义商品ID。 |
orderID | 必须 | String | 计费中心生成的订单号,支付失败或者用户取消支付时可能返回为空。 |
code 标识码说明
参数名称 | 说明 |
---|---|
LTBaseCallbackCode.CODE_PAY_SUCCESS | 支付成功 |
LTBaseCallbackCode.CODE_PAY_FAIL | 支付失败 |
LTBaseCallbackCode.CODE_PAY_CANCEL | 用户取消支付 |
LTBaseCallbackCode.CODE_PAY_UNKNOWN | 支付结果未知(下单成功) |
注:”CODE_PAY_UNKNOWN”表示当前订单已经成功提交,但用户是否进行支付,以计费中心服务器的通知为准。 “CODE_PAY_UNKNOWN”代表支付流程结束。”CODE_PAY_UNKNOWN”回调触发以后不会在有支付成功和支付失败的回调了,游戏需要根据服务器通知为准。
通过礼包码来兑换游戏中对应的礼包,游戏内入口需要可以通过服务端控制显示或者隐藏。
/**
* 礼包码兑换接口
*
* @param giftCode 礼包码
* @param url 发货地址
* @param extendParams 扩展参数
* @param listener 回调
*/
public void LTBaseSDKGiftCodeExchange(final String giftCode, final String url,
final String extendParams,
final LTBaseGiftCodeListener listener)
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
giftCode | 必须 | String | 需要兑换的礼包码 |
url | 必须 | String | 兑换成功后,计费中心会通知此地址发货。(游戏服发货地址) |
extendParams | 可选 | String | 游戏透传参数,通知发货时会原样返回。 |
listener | 必须 | LTBaseGiftCodeListener | 客户端回调接口。 |
LTBaseSDK.getInstance(mActivity).LTBaseSDKGiftCodeExchange("礼包码",
"http://xxxxxxxxx/xxxxxxxx","透传参数",
new LTBaseGiftCodeListener() {
@Override
public void GiftCodeSuccess(String giftcode, String extendParams) {
// TODO Auto-generated
// method stub
Toast.makeText(MainActivity.mMainActivity, "兑换成功", Toast.LENGTH_SHORT).show();
}
@Override
public void GiftCodeFail(int code, String msg) {
// TODO Auto-generated
// method stub
Logs.i("info", " 礼包码 兑换失败 code = " + code);
}
});
兑换成功:
@Override
public void GiftCodeSuccess(String giftid, String extendParams)
giftid:礼包码归属的礼包ID。
extendParams:透传参数。
兑换失败:
@Override
public void GiftCodeFail(int code)
code:错误码。
因为某些第三方SDK需要用到生命周期中的某些方法,所以游戏客户端Activity中必须调用龙图SDK中定义的生命周期方法,否则可能会出现不可预估的问题。
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
LTBaseSDK.getInstance(this).onStart();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
LTBaseSDK.getInstance(this).onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
LTBaseSDK.getInstance(this).onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
LTBaseSDK.getInstance(this).onPause();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
LTBaseSDK.getInstance(this).onStop();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
LTBaseSDK.getInstance(this).onDestroy();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
LTBaseSDK.getInstance(this).onActivityResult(requestCode, resultCode, data);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
LTBaseSDK.getInstance(this).onConfigurationChanged(newConfig);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
LTBaseSDK.getInstance(this).onNewIntent(intent);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
// 必须调用
LTBaseSDK.getInstance(this).onSaveInstanceState(outState);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
LTBaseSDK.getInstance(this).onRequestPermissionsResult(requestCode, permissions, grantResults);
}
调用第三方SDK的退出提示接口,如第三方SDK无退出提示接口则调用龙图SDK的退出提示界面或者直接退出游戏。
/**
* 调用第三方SDK退出提示页面,
* 如果第三方SDK无退出提示页面则调用龙图提示页面
*/
public void LTBaseSDKExitGame()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
LTBaseSDK.getInstance(this).LTBaseSDKExitGame();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* SDK退出回调
*
* @param code
* @param msg
*/
void LTBaseSDKExitgameCallBack(int code, String msg);
游戏需要在此回调内处理游戏退出逻辑。
此接口为初始化中回调接口之一。
打开后能在logcat看到SDK的日志输出,TAG为“LTBaseSDKLog”, 用于游戏接入SDK的调试阶段,出正式游戏包时请务必关闭日志输出。
// 设置打开日志输出
LTBaseSDK.getInstance(this).setLogs(true);
true为打开,false为关闭。
研发不调用此接口,默认为关闭状态
获取当前游戏包中的ServiceId,(游戏联运渠道ID,游戏可根据此ID区分各发行渠道)。
LTBaseSDK.getInstance(this).getServiceId();
获取当前游戏包的SNID, 主要是用来给BI平台发送日志使用, (兼容BI系统日志时使用)。
LTBaseSDK.getInstance(this).getsnId();
获取当前游戏包中的LocaleId, (游戏发行区域ID)。
LTBaseSDK.getInstance(this).getLocaleId();
获取当前游戏包中的deviceGroupId, (机型组ID)。
LTBaseSDK.getInstance(this).getDeviceGroupId();
获取当前游戏配置在平台的公告内容,获取到的内容游戏需要自己做UI框展示内容,展示时机由游戏控制。公告分为 选服前公告,用于展示在选服之前或者选服时展示。活动公告列表,用于角色登录以后展示。
/**
* 获取 是否有游戏内公告数据。
*
* @param noticeType 公告类型
* @param listener 数据回调
*/
LTBaseSDK.getInstance(this).LTBaseSDKGetGameNotice(LTBaseParam.GAME_NOTICE_TYPE_LOGIN,
LTBaseGameNoticeListener);
公告类型说明
公告类型说明 参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
LTBaseParam.GAME_NOTICE_TYPE_LOGIN | 必须 | int | 选服前公告 |
LTBaseParam.GAME_NOTICE_TYPE_ACTIVITY | 必须 | int | 游戏内公告 |
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
noticeType | 必须 | int | 公告类型 (详见 公告类型说明) |
listener | 必须 | LTBaseGameNoticeListener | 公告数据回调 (详见 11.6.4 回调说明) |
回调接口区分成功和失败,失败时为未获取到公告,主要原因是连接服务器失败导致的。
获取成功时会返回 公告条数,如果条目为0 则为未配置。
/**
* 游戏内公告数据解析
*
*/
private LTBaseGameNoticeListener mLTBaseGameNoticeListener = new LTBaseGameNoticeListener() {
@Override
public void getNoticeSuccess(int code, int dataSize, String data) {
Log.i("ltbase_demo", " getNoticeSuccess code = " + code + " dataSize = " + dataSize + " data = " + data);
if (dataSize == 0) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity, "未配置公告信息", Toast.LENGTH_SHORT).show();
} else {
try {
JSONArray dataJson = new JSONArray(data);
for (int i = 0; i < dataJson.length(); i++) {
JSONObject noticeJson = dataJson.getJSONObject(i);
String noticeId = noticeJson.getString("noticeId");
String noticeType = noticeJson.getString("noticeType");
String noticeTitle = noticeJson.getString("noticeTitle");
String noticeContent = noticeJson.getString("noticeContent");
String contentType = noticeJson.getString("contentType");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void getNoticeFail(int code) {
Log.i("ltbase_demo", " getNoticeFail code = " + code);
}
};
获取成功参数说明
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
dataSize | 必须 | int | 本次获取到的公告条数,数量为0 则为未配置公告,需要联系运营配置需要的公告 |
data | 必须 | JSONArray | json数组的公告内容,为获取到的公告数据 |
data.noticeId | 必须 | String | 公告在平台的编号 |
data.noticeType | 必须 | String | 公告类型;GAME_NOTICE_TYPE_LOGIN标识登录公告;GAME_NOTICE_TYPE_ACTIVITY标识活动公告; 登录公告是在进入游戏服之前展示,支持按渠道以及版本进行配置; 活动公告是进服后展示,支持按游戏服以及版本进行配置 |
data.noticeTitle | 必须 | String | 公告标题 |
data.contentType | 必须 | String | 公告内容的类型;text:文本;html:富文本 |
data.noticeContent | 必须 | String | 公告内容 |
调用打开活动公告接口,一般用于游戏内公告展示。回调里返回公告打开和关闭事件,回调接口目录:11.8
/**
* 研发主动调用 打开游戏内活动公告,
*
*/
LTBaseSDK.getInstance(this).LTBaseOpenActivityNotice();
/**
*研发主动调用 打开登录公告,
*
*/
LTBaseSDK.getInstance(this).LTBaseOpenLoginNotice();
产品根据需求调用,调用接口立即展示公告。
SDK 2.1.6及以上版本适用。
/**
*研发主动调用 打开指定服务器公告,
* @param roleServerId 需要打开那个服务器公告
*/
LTBaseSDK.getInstance(this).LTBaseOpenLoginNotice("0001");
回调里返回公告打开和关闭事件
/**
* 研发主动调用 打开游戏内活动公告,
*
*/
LTBaseSDK.getInstance(this).LTBaseSetSDKNoticeListener(LTBaseSDKNoticeListener listener);
回调给研发公告的事件,包含用户通过SDK悬浮层公告按钮点击以后的公告事件,研发主动调用活动公告打开关闭事件,公告不存在的回调。
/**
* 登录公告和游戏内活动公告打开关闭事件
*/
private LTBaseSDKNoticeListener mLTBaseSDKNoticeListener = new LTBaseSDKNoticeListener() {
/**
* 登录公告打开事件,只有页面存在的时候,才会有打开的效果
*/
@Override
public void LTBaseSDKLoginNoticeStart() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 登录公告打开事件 ", Toast.LENGTH_SHORT).show();
}
/**
* 登录公告关闭事件
*/
@Override
public void LTBaseSDKLoginNoticeClose() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 登录公告关闭事件 ", Toast.LENGTH_SHORT).show();
}
/**
* 登录公告不存在,
* 调用打开公告接口的时候,发现公告不存在的时候被调用
*/
@Override
public void LTBaseSDKNoLoginNotice() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 登录公告不存在 ", Toast.LENGTH_SHORT).show();
}
/**
* 活动公告打开事件,只有页面存在的时候,才会有打开的效果
*/
@Override
public void LTBaseSDKActivityNoticeStart() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 活动公告打开事件 ", Toast.LENGTH_SHORT).show();
}
/**
* 活动公告关闭事件
*/
@Override
public void LTBaseSDKNoActivityNotice() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 活动公告不存在 ", Toast.LENGTH_SHORT).show();
}
/**
* 活动公告不存在,
* 调用打开公告接口的时候,发现公告不存在的时候被调用
*/
@Override
public void LTBaseSDKActivityNoticeClose(String data) {
Toast.makeText(LTBase_Demo_MainActivity.this, " 活动公告关闭事件 ", Toast.LENGTH_SHORT).show();
}
};
研发上报游戏现在的进度,用于SDK标记游戏现在所处进度,并进行相关操作。
以悬浮层按钮开关为例:
SDK会在进入服务器列表时打开SDK悬浮功能条,
SDK会在离开服务器选择时关闭SDK悬浮功能条,
请研发上报事件时尽量准确。
参数名称 | 说明 |
---|---|
LTBaseParam.GAME_PROCESS_EVENT_TYPE_IN_SELECT_SERVERLIST | 进入选择服务器列表页面的事件。 |
LTBaseParam.GAME_PROCESS_EVENT_TYPE_OUT_SELECT_SERVERLIST | 离开选择服务器列表页面的事件。 |
/**
* 研发主动调用,传入不同的事件用于标记游戏现在所处进度
*
*/
LTBaseSDK.getInstance(this).LTBaseSendGameProcess(int event);
打开游戏内活动详情页面,通过后台配置的活动id打开指定活动页面。
/**
* 根据活动ID打开活动页面
* @param activityId 活动id
* @param roleLevel 当前角色等级
* @param roleVipLevel 当前角色VIP等级
* @param listener 活动公告回调
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseOpenAvtivtyDetils("19",
"10", "10", mLTBaseSDKActivityDetilsListener);
private LTBaseSDKActivityDetilsListener mLTBaseSDKActivityDetilsListener = new LTBaseSDKActivityDetilsListener() {
/**
* 登录公告弹出,适用于主动弹出。
* @param activityId 研发打开的活动id
*/
@Override
public void LTBaseSDKActivityDetilsStart(String activityId) {
Logs.i(LOGTAG, " mLTBaseSDKActivityDetilsListener 活动详情打开 活动ID activityId = "
+ activityId);
}
/**
* 登录公告关闭返回
* @param activityId 研发打开的活动id
* @param data 暂时没用,为以后回传数据预约字段
*/
@Override
public void LTBaseSDKActivityDetilsClose(String activityId, String data) {
Logs.i(LOGTAG, " mLTBaseSDKActivityDetilsListener 活动详情关闭 活动ID activityId = "
+ activityId);
}
/**
* 没有登录公告
* @param activityId 研发打开的活动id
*/
@Override
public void LTBaseSDKNoActivityDetils(String activityId) {
Logs.i(LOGTAG, " mLTBaseSDKActivityDetilsListener 活动不存在 活动ID activityId = "
+ activityId);
}
};
客服反馈功能弃用,请使用aihelp客服功能。
初始化成功以后可以通过SDK获取配置到GSC后台的CDN数据。可以配置多个CDN
/**
* 获取游戏更新资源使用的CDN地址,
*
* @param listener 获取结果回调
*/
LTBaseSDK.getInstance(this).LTBaseSDKgetUpdateCDNPath(mLTBaseUpdatePCDNPathListener);
获取成功后的 json格式说明
参数名 | 格式 | 说明 |
---|---|---|
domainList | String | cdn地址集合,逗号分隔,研发可以按照顺序尝试使用 |
/**
* 获取CDN地址回调
*/
private LTBaseUpdatePCDNPathListener mLTBaseUpdatePCDNPathListener = new LTBaseUpdatePCDNPathListener() {
@Override
public void getPathSuccess(JSONObject cdnPath) {
Logs.i(LOGTAG, " mLTBaseUpdatePCDNPathListener getPathSuccess cdnPath = "
+ cdnPath.toString());
// cdn地址集合,逗号分隔,研发可以按照顺序尝试使用
try {
String domainList = cdnPath.getString("domainList");
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void getPathFail(int code) {
Logs.i(LOGTAG, " mLTBaseUpdatePCDNPathListener getPathFail code = "
+ code);
}
};
登录完成或者切换账号完成以后在登录数据内返回serviceCode。
LTGameUserData 对象内调用getUserServiceCode。
适用于有切换语言需求的产品。
如果没有多语言需求可以忽略。
可以在初始化前调用。
暂时支持 英文,中文,繁体,印尼语,泰语,德语,韩语,俄罗斯语,法语,西班牙语,意大利,葡萄牙语,日文
如果研发有多语言需求,需要在启动后先设置语言,避免SDK展示语言和游戏展示语言不一致情况。
2.3.9版本 增加 荷兰,挪威,波兰,瑞典语言
/**
* 切换换语言
*
* @param pNewUserLocale New User Locale
*/
LTBaseSDK.getInstance(this).LTBaseUpdateLocale(Locale pNewUserLocale);
语言 | 参数 |
---|---|
英文 | LTBaseParam.LOCALE_English |
中文 | LTBaseParam.LOCALE_CHINESE |
繁体 | LTBaseParam.LOCALE_TRADITIONAL_CHINESE |
印尼语 | LTBaseParam.LOCALE_ID |
泰语 | LTBaseParam.LOCALE_TH |
德语 | LTBaseParam.LOCALE_DE |
韩语 | LTBaseParam.LOCALE_KO |
俄罗斯语 | LTBaseParam.LOCALE_RU |
法语 | LTBaseParam.LOCALE_FR |
西班牙语 | LTBaseParam.LOCALE_ES |
意大利 | LTBaseParam.LOCALE_IT |
葡萄牙 | LTBaseParam.LOCALE_PT |
土耳其语 | LTBaseParam.LOCALE_TR |
越南语 | LTBaseParam.LOCALE_VI |
日文 | LTBaseParam.LOCALE_JA |
荷兰 | LTBaseParam.LOCALE_NL |
挪威 | LTBaseParam.LOCALE_NO |
波兰 | LTBaseParam.LOCALE_PL |
瑞典 | LTBaseParam.LOCALE_SV |
/**
* 切换换语言
*
* @param pNewUserLocale 用户选择的语言
*/
LTBaseSDK.getInstance(this).LTBaseUpdateLocale(LTBaseParam.LOCALE_English);
游戏端发送第三方的日志
比如给AppsFlyer、Facebook之类的第三方统计SDK发送。
需要运营和技术支持确定参数和日志key以后调用。
使用此接口需要联系技术支持获取详细点位文档。
这里只是说明和用完成新手引导作为举例说明。
/**
* 游戏端发送第三方的日志
* 比如给AppsFlyer、Facebook之类的第三方统计SDK发送
*
* @param logKey 日志KEY
* @param logValue 日志内容 HashMap key-val格式
*/
public void LTBaseSDKSendAnalyticsInfoLog(String logKey,
HashMap<String, Object> logValue) {
// 完成新手引导打点举例
HashMap<String, Object> logValue = new HashMap<String, Object>();
LTBaseSDK.getInstance(LTBaseDataCollector.getInstance().getmActivity())
.LTBaseSDKSendAnalyticsInfoLog("tutorial_complete",
logValue);
SDK通过此回调返回给研发隐私协议选择状态。
在初始化的时候同时设置隐私协议回调。
/**
* 设置用户协议相关接口
*
* @param listener 用户协议回调
*/
public void LTBaseSetAgreementListener(LTBaseUserAgreementListener listener);
// 用户协议回调注册
LTBaseSDK.getInstance(MainActivity).LTBaseSetAgreementListener(mLTBaseUserAgreementListener);
LTBaseUserAgreementListener 回调说明。
/**
* 用户协议。
*
*/
private LTBaseUserAgreementListener mLTBaseUserAgreementListener = new LTBaseUserAgreementListener() {
@Override
public void UserAgreementOpen() {
Logs.i("ltdemo", " UserAgreementOpen, 隐私协议打开接口,不需要可以不关心");
}
@Override
public void UserAgreementResult(boolean isAgree, JSONObject jsonObject) {
Log.i("ltdemo", "UserAgreementResult: isAgree = " + isAgree + " jsonObject = " + jsonObject);
}
};
针对全球GDPR,协议,参数解释。其他地区只需要关心是否同意即可。
| 参数 | 参数说明 |
| —————— | —————— |
| isAgree | 是否同意了协议 ,对GDPR,默认是同意 |
| jsonObject | 同意详情。具体选择了那种模式 ,JSON格式,育碧欧美专用,其他地区不需要关心 |
| jsonObject.personalizedDiscounts | 同意了第一选项, |
| jsonObject.marketingPurposes | 同意了第二选项 |
SDK通过此接口在游戏内打开隐私协议,
具体打开实际按照运营需求。
隐私协议选择结果,通过11.19回调通知。
/**
* 打开隐私协议。
*/
public void LTBaseOpenUserAgreement()
/**
* 打开隐私协议。
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseOpenUserAgreement();
返回客户端当前IP,请在登录成功后获取。
/**
* @return 客户端IP
*/
LTBaseSDK.getInstance(this).LTBaseGetClientIP();
请使用获取谷歌支付列表功能
游戏调用此接口后,可以从获取全部商品的列表,列表内包括商品id 商品价格和货币符号。
此接口有可能会失败。 所以游戏需要在失败的时候,有默认展示项。
此功能需要经过SDK工具打包后实现, 母包默认返回空字符串,望知悉。
仅使用华为&谷歌支付的包可以使用此接口。
同时需要游戏研发和运营确定好计费点,并通知技术支持配置后才能获取。
/**
* 获取华为&谷歌支付列表功能
*
* @param id
* getPayCurrency 获取华为&谷歌支付当前货币信息固定值
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseSDKChannelExtend("SkuDetails");
功能回调通过 LTBaseSDK.getInstance(this).LTBaseSDKSetExtendListener 注册的回调接口接收。
接收到的数据为道具列表。(JSONArray)
列表内每一项说明:
key | 类型 | 说明 |
---|---|---|
gscProductId | String | 商品编码 |
price | String | 商品价格,带有货币符号和货币编码的。 列如:港币8块钱 此项为: HK$8.00 |
title | String | 商品名 |
productId | String | 商品在华为&谷歌后台的商品id |
currency | String | 当前货币符号,列如: 港币 此项为:HKD |
price_amount | String | 当前价格。分为单位。列如:港币8块钱 此项为 800 |
/**
* 扩展功能回调
*/
private LTBaseExtendListener mLTBaseExtendListener = new LTBaseExtendListener() {
@Override
public void extendListener(String id, String... data) {
if (id.equals("SkuDetails")) {
if (data[0] != null || !data[0].equals("")) {
Log.i(LOGTAG,
" SkuDetails 当前华为&谷歌需要支付的货币列表 = " + data[0]);
try {
JSONArray propList = new JSONArray(data[0]);
for (int i = 0; i < propList.length(); i++) {
JSONObject prop = propList.getJSONObject(i);
String productId = prop.getString("productId");
String price = prop.getString("price");
String title = prop.getString("title");
String gscProductId = prop.getString("gscProductId");
String currency = prop.getString("currency");
}
} catch (JSONException e) {
e.printStackTrace();
}
Toast.makeText(LTBase_Demo_MainActivity.this, data[0], Toast.LENGTH_SHORT).show();
} else {
Log.i(LOGTAG, "SkuDetails 获取道具信息 失败,拿不到实际支付获取货币 ");
}
}
}
};
调转到谷歌应用商店接口。让用户可以去评分。
仅谷歌商店的包可以使用此功能。
/**
* 跳转到谷歌应用商店接口
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseSDKChannelExtend("transferToGooglePlay");
打开一个webview,并跳转到指定链接
2.0.3版本添加
/**
* 打开内置webview
*
* @param url 需要打开的url
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseSDKOpenWebview("需要打开的url");
返回客户端当前IP 所在地域,请在登录成功后获取。
参数值来源于国际公认的国家和地区ISO 3166-1代码表
/**
* @return 客户端IP地域
*/
LTBaseSDK.getInstance(this).LTBaseGetClientIPCountry();
返回客户端当前IP 所在地域,请在登录成功后获取。
/**
* @return 客户端IP地域
*/
LTBaseSDK.getInstance(this).LTBaseGetClientIPProvince();
打开问卷调查页面。
需要和技术支持协商使用,
问卷调查ID需要在平台配置。
此功能需要和服务端配合接入。
问卷网后台配置的所有外部参数,除request_id由平台生成外,其他参数都需要通过“透传参数”传过来才能显示在答卷数据中。
/**
* 打开问卷调查
*
* @param QuestionId 问卷id
* @param roleLv 角色等级
* @param roleVipLv 角色vip等级
* @param value 透传参数 研发自定义 可以为null
*/
public void LTBaseOpenQuestionnaire(final String QuestionId, final String roleLv, final String roleVipLv, final HashMap<String, String> value)
// 举例打开 问卷ID为:1 的问卷,
// 角色等级:11 ,角色VIP等级:12, 透传参数 key1 value1, key2,value2.
HashMap<String, String> mapValue = new HashMap<>();
mapValue.put("key1", "value1");
mapValue.put("key2", "value2");
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity).LTBaseOpenQuestionnaire("1", "11", "12", mapValue);
用于检测权限是否被允许
SDK 2.3.6版本添加
/**
* 检测权限是否允许
* @param permiss 需要检测的权限
* @return true 允许 false不允许
*/
public boolean LTBaseCheckPermission(String permiss) ;
// 举例 检测是否允许通知
// return true 允许 false不允许
Boolean isPer = LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseCheckPermission("android.permission.POST_NOTIFICATIONS")
用于申请权限
SDK 2.3.6版本添加
/**
* 申请单个权限
*
* @param permissions 需要申请的权限
*/
public void LTBaseRequestPermission(String permissions, OnPermissionCallback callback);
/**
* 申请多个权限
*
* @param permissions 需要申请的权限数组
*/
public void LTBaseRequestPermissions(String[] permissions, OnPermissionCallback callback);
// 举例 申请通知栏权限
/LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseRequestPermission("android.permission.POST_NOTIFICATIONS",
new com.longtu.sdk.utils.LTPermission.OnPermissionCallback() {
@Override
public void onGranted(List<String> list, boolean b) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity,
" 通知栏权限开启", Toast.LENGTH_SHORT).show();
}
@Override
public void onDenied(List<String> permissions, boolean doNotAskAgain) {
Toast.makeText(LTBase_Demo_MainActivity.mMainActivity,
" 通知栏权限被拒绝开启", Toast.LENGTH_SHORT).show();
}
});
/**
* 有权限被同意授予时回调
*
* @param permissions 请求成功的权限组
* @param allGranted 是否全部授予了
*/
void onGranted( List<String> permissions, boolean allGranted);
/**
* 有权限被拒绝授予时回调
*
* @param permissions 请求失败的权限组
* @param doNotAskAgain 是否勾选了不再询问选项
*/
default void onDenied( List<String> permissions, boolean doNotAskAgain) {
}
打开龙图论坛功能。
SDK 2.1.7 版本增加
/**
* 打开龙图论坛
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseOpenForum();
打开龙图论坛功能,并且带透传参数,
参数内容需要和平台提前约定好,可以用于规定指定打开某些页面的情况。
参数内容各个产品按需求和平台约定后透传,否则传的参数不会有任何效用。
SDK 2.2.4 版本增加
如果需要得到龙图论坛的打开关闭状态可以接入(11.26 设置龙图论坛开启关闭事件回调)
/**
* 打开龙图论坛
@param customparas 透传参数
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseOpenForum(String customparas);
该接口由SDK通过服务端接口platform-app-activity提供,负责按照龙图论坛的要求整理跳转参数,并自动跳转到龙图论坛地址
customparas 介绍
字段 | 类型 | 介绍 |
---|---|---|
function | string | 功能标识; topicId:标识打开指定帖子,此时data中应该传帖子ID; subjectId:标识打开话题主页,此时data 中应该传话题id; encyclopedia:标识打开百科页面; gift-bag:标识打开礼包中心; userCenter:标识打开个人中心; 如果不填写该值,默认跳转到龙图论坛首页 |
data | string | 根据不同的function传递不同的数据 |
回调里返回龙图论坛打开和关闭事件, 需要得到龙图论坛打开和关闭状态的产品可以使用
SDK 2.3.5 版本添加
/**
* 龙图自有论坛 打开关闭回调配置
*
*/
LTBaseSDK.getInstance(this).LTBaseSetForumListener(mLTBaseForumListener);
回调给研发龙图论坛的事件,包含用户通过SDK悬浮层龙图论坛按钮点击以后的打开关闭事件,研发主动调用龙图论坛打开关闭事件。
/**
* 龙图论坛打开关闭事件
*/
private LTBaseForumListener mLTBaseForumListener = new LTBaseForumListener() {
@Override
public void onOpenForumListener() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 龙图论坛打开事件 ", Toast.LENGTH_SHORT).show();
}
@Override
public void onCloseForumListener() {
Toast.makeText(LTBase_Demo_MainActivity.this, " 龙图论坛关闭事件 ", Toast.LENGTH_SHORT).show();
}
};
龙图SDK分享功能目前整合了微信、QQ、新浪微博、Facebook、Twitter等SDK,包含文本分享、图片分享、链接分享等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4775/1500007595.html
龙图SDK语音功能目前整合了腾讯语音SDK,包含离线语音、实时语音等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4775/1500007727.html
提供获取推送Token、本地推送、移除消息等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4775/1500008916.html
整合了AIHelpSDK,包含客服模块、FAQ模块、运营模块等功能。点击链接查看详情
http://sdk.longtubas.com/t3/241/4775/1500009869.html
包含设置账号绑定回调等接口。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010378.html
包括 打开韩国tabjoy广告接口 和 打开韩国咖啡论坛等接口。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010376.html
包含谷歌游戏解锁成就、打开成就弹窗、打开排行榜弹窗、增加排行榜积分功能。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010374.html
封装了wemix区块链功能,包括查询wemixID绑定状态、绑定wemixID、交易签名等接口。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010199.html
封装了PocketBuff区块链功能,包括查询PocketBuff绑定状态、绑定PocketBuff、交易签名等接口。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010407.html
封装了ADMob聚合广告相关功能。
此文档只适用于游戏直接出最终报的情况,如果还需要使用打包工具,请接入自动打包接口。
详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010343.html
ADMob自动打包功能介绍。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500010524.html
封装了ApplovinSDK广告相关功能。详情点击链接查看
http://sdk.longtubas.com/t3/241/4775/1500009572.html
状态码 | 状态描述 |
---|---|
-1 | 未知错误 |
-2 | URL错误 |
-3 | 请求用户中心失败 |
-4 | 支付失败,其他错误 |
-5 | 无网络 |
-6 | 用户中心返回数据解析失败 |
0 | 初始化失败 |
10 | 登录错误,其他错误 |
11 | 登录取消 |
12 | 登录时,用户输入信息错误 |
13 | 登录验证错误 |
14 | 登录验证参数错误 |
15 | 获取系统用户名错误 |
17 | 第三方SDK登录错误,目前只针对华为 |
18 | 登录状态失效,目前只针对百度 |
20 | 账号注册错误,其他错误 |
21 | 账号注册错误,验证失败 |
22 | 注册时,用户输入信息格式错误 |
30 | 修改账号密码错误 |
31 | 修改密码参数错误 |
32 | 修改密码验证失败 |
33 | 找回密码参数错误 |
40 | 绑定账号错误 |
41 | 绑定账号错误,验证错误 |
42 | 绑定账号错误,参数错误 |
100 | 支付相关参数错误 |
101 | 支付成功 |
102 | 支付失败 |
103 | 支付取消 |
104 | 下单成功 |
105 | 下单失败 |
106 | 解析支付协议失败 |
107 | 当前支付方式不可用 |
111 | 兑换礼包码,礼包码未输入 |
112 | 兑换礼包码,发货地址为空 |
113 | 兑换礼包码,数据解析错误 |
401 | 用户中心绑定手机失败 |
上海中清龙图软件有限公司