此文档主要是用于在游戏及应用开发商需要仅接入龙图统计功能时,了解龙图统计功能如何接入,接入过程中需注意的事项等。
接入龙图统计 SDK的游戏及应用的android客户端开发者
直接从《资源,LIB库和配置文件》目录中复制所有资源和lib库到游戏工程的相应目录。
<!-- 如游戏本身有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>
/**
* 初始化SDK
* @param gameVersion 游戏资源版本号,无资源版本号可传""
* @param serviceId 产品serviceId ,通过技术支持获取
* @param channelId 产品channelId ,通过技术支持获取
*/
public void LTBaseSDKInit(String gameVersion, String serviceId, String channelId)
// 初始化SDK
LTBaseSDK.getInstance(this).LTBaseSDKInit("1.0.1","serviceId","channelId");
渠道初始化成功以后打点。
/**
* 仅用于渠道初始化成功日志
*/
public void LTBaseSDKInitSucces()
LTBaseSDK.getInstance(this).LTBaseSDKInitSucces();
账号注册成功,如果没有账号注册事件,可以不传
/**
* 仅用于上报 用户注册日志
*
* @param userID 用户id
* @param userName 用户名
*/
public void LTBaseSDKRegisterEvent(final String userID, final String userName)
LTBaseSDK.getInstance(this).LTBaseSDKRegisterEvent("账户id", "账户名");
账号登录成功后调用
/**
* 仅用于上报 用户登录日志
*
* @param userID 用户id
* @param userName 用户名
*/
public void LTBaseSDKLoginEvent(final String userID, final String userName)
LTBaseSDK.getInstance(this).LTBaseSDKLoginEvent("账户id", "账户名");
角色注册成功后调用
/**
* 仅用于上报 登录日志 和注册日志
*
* @param roleinfo
*/
public void LTBaseSDKRoleInfoEvent(final LTRoleInfo roleinfo)
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
setSendtype | 必须 | String | 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).LTBaseSDKRoleInfoEvent(roleInfo);
角色登录成功后调用
/**
* 仅用于上报 登录日志 和注册日志
*
* @param roleinfo
*/
public void LTBaseSDKRoleInfoEvent(final LTRoleInfo roleinfo)
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
setSendtype | 必须 | String | 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_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).LTBaseSDKRoleInfoEvent(roleInfo);
仅用于上报 用户本次下单数据
/**
* 仅用于上报 用户本次下单数据
* 调用渠道支付接口
*
* @param propId 道具id
* @param propName 道具名称
* @param Price 道具金额 分为单位
* @param CurrencyType 道具货币类型(1 人民币,2 美元 ,3 日元 4 港币 8 台币,9韩元 ,)
* @param orderId 游戏为本次下单生成的唯一标识(如果没有订单号唯一标识 可以是透传参数。都没有可以为空)
* @param detail 扩展信息,可以为空
* @param orderTime 下单时间,发生时间,格式为yyyyMMddHHmmss
* @param orderTimeStamp 下单时间,时间戳格式;参数类型:String时间类型:long 精度:毫秒 (即13位数)
*/
public void LTBaseSDKPaymentEvent(final String propId, final String propName, final String Price, final String CurrencyType, final String orderId, String detail,String orderTime,String orderTimeStamp)
LTBaseSDK.getInstance(this).LTBaseSDKPaymentEvent("1001", "道具名称", "100","1", UUID.randomUUID().toString(), "","20230406180309","1680775389471");
当运营人员需要对游戏内的任务完成情况,关卡完成情况进行记录时,即可记录一条游戏自定义事件。在记录日志之前,游戏运营人员有必要向BI统计后台提供一份任务,关卡,以及其他自定义事件的id和名称对照表,并在BI统计后台描述任务,关卡,道具之间的关系。
任务,副本关卡日志的格式均为stageId,stageName,detail三个字段,三个字段的值完全由游戏研发人员和运营人员自行指定,例如新手引导任务可以用 newbieguide标识stageId,也可以用task001或其他字符串标识来表示stageId,任务完成,既可以用 SUCC表示,也可以用complete表示,还可以根据任务的中断,放弃,失败等多种状况,为同一个任务记录多条日志。对于同一种事件结果,建议使用同样的detail内容来描述。尽量做到同一个detail的含义一致,同一个事件结果的detail一致。
需要注意的地方:
无论是任务,关卡还是其他自定义事件日志,taskId/stageId/actId字段都必须是相对于该日志的logId唯一,不能够与其他任务,关卡或道具的id字段重复。
尽管任务,副本/场景,以及游戏自定义事件三个日志的字段数量和格式相同,但是我们希望研发人员能够按照预设的不同logid和logkey分别记录这三类日志,这样一来,便于将相对重要的日志同其它日志区分出来,也便于我们对任务和场景副本日志采用预设的特定算法来进行统计运算。
我们建议用以下的默认字段来记录事件日志的detail,以便统计后台可以用默认的配置来对游戏自定义事件进行计算成功率,通过率等进一步指标。
如果列表中的detail无法满足游戏的日志记录要求,也允许各个游戏使用自己定义的detail来记录日志。
其中detail字段建议取值如下所示:
detail | 含义 |
---|---|
accept | 接任务 |
fail | 任务失败 |
cancel | 放弃任务 |
succ | 达成任务条件 |
complete | 任务完成 |
/**
* 游戏端需发送的统计日志
*
* @param logID 日志ID
* @param logKey 日志KEY
* @param logValue 日志内容 HashMap key-val格式
*/
public void LTBaseSDKSendGameInfoLog(String logID, String logKey,
HashMap<String, Object> logValue)
LogId | 日志名称 | key |
---|---|---|
1003 | 游戏自定义事件 | role-act |
字段名 | 字段类型 | 字段说明 |
---|---|---|
roleLevel | Integer | 角色等级 |
roleVipLevel | Integer | 角色vip等级 |
classifiedId | String | 分类ID |
classifiedName | String | 分类名称 |
actId | String | 事件标识,英文或数字 |
actName | String | 事件名称,最好传中文 |
detail | String | 相关信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("roleLevel", "10");
map.put("roleVipLevel", "2");
map.put("classifiedId", "Dungeons");
map.put("classifiedName", "副本");
map.put("actId", "fight.mineer");
map.put("actName", "战斗.狗头人矿工");
map.put("detail", "begin");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("1003", "role-act", map);
以上日志表示,当前角色和狗头人旷工进行战斗。
获取服务器端 发送日志使用的Servicecode
提供给BI日志用。
此接口请在登录成功后调用,不然数据不完整.
LTBaseSDK.getInstance(this).LTBaseSDKgetServicecode();
通过礼包码来兑换游戏中对应的礼包。
/**
* 礼包码兑换接口
*
* @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:错误码。
打开一个webview,并跳转到指定链接
/**
* 打开内置webview
*
* @param url 需要打开的url
*/
LTBaseSDK.getInstance(LTBase_Demo_MainActivity.mMainActivity)
.LTBaseSDKOpenWebview("需要打开的url");
调用打开登录公告,回调里返回公告打开和关闭事件,回调接口目录:9
/**
*研发主动调用 打开登录公告,
*
*/
LTBaseSDK.getInstance(this).LTBaseOpenLoginNotice();
回调里返回公告打开和关闭事件
LTBaseSDKActivityNoticeClose 回调的时候运营可以透传一些数据, 研发可以根据运营需求对透传数据做对应处理。
/**
* 设置公告页面开启关闭事件回调,
*
*/
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();
}
/**
* 活动公告关闭事件,
* 活动公告被关闭的时候展示
* @param data 运营想要透传的数据,有可能为空
*/
@Override
public void LTBaseSDKActivityNoticeClose(String data) {
Toast.makeText(LTBase_Demo_MainActivity.this, " 活动公告关闭事件 ", Toast.LENGTH_SHORT).show();
}
};
上海中清龙图软件有限公司