收集游戏玩家行为信息,用于统计分析玩家行为。
需要接入android 或者 ios Base Sdk以后时候。
Android
/**
* 游戏端需发送的统计日志
*
* @param logID 日志ID
* @param logKey 日志KEY
* @param logValue 日志内容 HashMap key-val格式
*/
public void LTBaseSDKSendGameInfoLog(String logID, String logKey, HashMap<String,Object> map)
IOS
/**
* 游戏端需发送的统计日志
*
* @param logID 日志ID
* @param logKey 日志KEY
* @param logValJson 日志内容 json 格式字符串
*/
**C++接口**
LTGameSDK::GetInstance().SendLog(const char* logID, const char* logKey ,const char* logValJson);
**OC接口**
- (void)LTSDKSendLogWithLogId:(NSString *)logId logKey:(NSString *)logKey dict:(NSDictionary *)dict;
unity
/**
* 游戏端需发送的统计日志
*
* @param logID 日志ID
* @param logKey 日志KEY
* @param LogValue 日志内容 Dictionary key-val格式
* @return null
*/
LTStatisticsEntry.GetInstance().sendGameInfoLog(string logID, string logKey,
Dictionary<string, object> LogValue);
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
logID | 必须 | String | 日志ID (详见logId和LogKey对应表) |
logKey | 必须 | String | 日志KEY (详见logId和LogKey对应表) |
map | 必须 | HashMap | 日志属性,具体属性字段见下面日志的说明表格 |
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog ("logID", "logKey", map);
IOS
**C++接口**
Json::Value logJson;
logJson["key1"] = "value1";
logJson["key2"] = "value2";
logJson["key3"] = "value3";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("logID", "logKey" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"value1" forKey:@"key1"];
[dict setObject:@"value2" forKey:@"key2"];
[dict setObject:@"value3" forKey:@"key3"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"logID" logKey:@"logKey" dict:dict];
unity
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("key1", "value1");
map.Add("key2", "value2");
map.Add("key3", "value3");
LTStatisticsEntry.GetInstance().sendGameInfoLog(logID,logKey,map);
logId | Logkey | 描述 | GSC平台显示名称 |
---|---|---|---|
1003 | role-act | 自定义事件 | 其他事件 |
4001 | resource-update-start | 游戏热更数据下载开始 | 热更数据 |
4002 | resource-update-success | 游戏热更数据下载成功 | 热更数据 |
4003 | resource-update-fail | 游戏热更数据下载失败 | 热更数据 |
4004 | resource-unzip-start | 游戏热更数据解压开始 | 热更数据 |
4005 | resource-unzip-success | 游戏热更数据解压成功 | 热更数据 |
4006 | resource-unzip-fail | 游戏热更数据解压失败 | 热更数据 |
当运营人员需要对游戏内的任务完成情况,关卡完成情况进行记录时,即可记录一条游戏自定义事件。在记录日志之前,游戏运营人员有必要向BI统计后台提供一份任务,关卡,以及其他自定义事件的id和名称对照表,并在BI统计后台描述任务,关卡,道具之间的关系。
任务,副本关卡日志的格式均为stageId,stageName,detail三个字段,三个字段的值完全由游戏研发人员和运营人员自行指定,例如新手引导任务可以用 newbieguide标识stageId,也可以用task001或其他字符串标识来表示stageId,任务完成,既可以用 SUCC表示,也可以用complete表示,还可以根据任务的中断,放弃,失败等多种状况,为同一个任务记录多条日志。对于同一种事件结果,建议使用同样的detail内容来描述。尽量做到同一个detail的含义一致,同一个事件结果的detail一致。
需要注意的地方:
无论是任务,关卡还是其他自定义事件日志,taskId/stageId/actId字段都必须是相对于该日志的logId唯一且在,不能够与其他任务,关卡或道具的id字段重复。
此外,还需确保同一个taskId/stageId/actId值在产品不同的测试阶段对应的点位含义相同。例如一开始用100020代表创建角色,那么以后100020就只能对应创建角色的点位,而不能改为对应其他点位,如需新增点位可以分配一个未被其他点位占用过的Id值,否则会导致产品历史的用户轨迹数据在平台测查询匹配异常,没有相关参考性。
我们建议用以下的默认字段来记录事件日志的detail,以便统计后台可以用默认的配置来对游戏自定义事件进行计算成功率,通过率等进一步指标。
如果列表中的detail无法满足游戏的日志记录要求,也允许各个游戏使用自己定义的detail来记录日志。
其中detail字段建议取值如下所示:
detail | 含义 |
---|---|
accept | 接任务 |
fail | 任务失败 |
cancel | 放弃任务 |
succ | 达成任务条件 |
complete | 任务完成 |
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);
IOS
**C++接口**
Json::Value logJson;
logJson["roleLevel"] = "10";
logJson["roleVipLevel"] = "2";
logJson["classifiedId"] = "Dungeons";
logJson["classifiedName"] = "副本";
logJson["actId"] = "fight.mineer";
logJson["actName"] = "战斗.狗头人矿工";
logJson["detail"] = "begin";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("1003", "role-act" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"10" forKey:@"roleLevel"];
[dict setObject:@"2" forKey:@"roleVipLevel"];
[dict setObject:@"Dungeons" forKey:@"classifiedId"];
[dict setObject:@"副本" forKey:@"classifiedName"];
[dict setObject:@"fight.mineer" forKey:@"actId"];
[dict setObject:@"战斗.狗头人矿工" forKey:@"actName"];
[dict setObject:@"begin" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"1003" logKey:@"role-act" dict:dict];
以上日志表示,当前角色和狗头人旷工进行战斗。
注意:
1、下载开始、下载成功、下载失败三个点,是针对当前下载行为的打点,比如1.0.0.1更新到1.0.0.2,一共100M,包含200个资源文件,只需要报一次下载开始、下载成功或者下载失败即可,不需要报200次。
2、此日志仅适配于进游戏前的热更,如果游戏内有边玩边下功能,请参考 1.1.12。
LogId | 日志名称 | key |
---|---|---|
4001 | 游戏热更数据下载开始 | resource-update-start |
字段名 | 字段类型 | 字段说明 |
---|---|---|
dataPath | String | 资源地址 |
detail | String | 游戏扩展信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
map.put("detail", "update");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4001", "resource-update-start", map);
IOS
**C++接口**
Json::Value logJson;
logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
logJson["detail"] = "update";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4001", "resource-update-start" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"update" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4001" logKey:@"resource-update-start" dict:dict];
以上日志表示,开始从https://www.longtubas.com/xxxx.zip 地址下载资源文件。
LogId | 日志名称 | key |
---|---|---|
4002 | 游戏热更数据下载成功 | resource-update-success |
字段名 | 字段类型 | 字段说明 |
---|---|---|
dataPath | String | 资源地址 |
detail | String | 游戏扩展信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
map.put("detail", "success");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4002", "resource-update-success", map);
IOS
**C++接口**
Json::Value logJson;
logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
logJson["detail"] = "success";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4002", "resource-update-success" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"success" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4002" logKey:@"resource-update-success" dict:dict];
以上日志表示,开始从https://www.longtubas.com/xxxx.zip 地址下载资源文件成功。
LogId | 日志名称 | key |
---|---|---|
4003 | 游戏热更数据下载失败 | resource-update-fail |
字段名 | 字段类型 | 字段说明 |
---|---|---|
dataPath | String | 资源地址 |
dataCDNIP | String | 资源地址对应的ip |
failType | String | 失败原因 |
detail | String | 游戏扩展信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
map.put("dataCDNIP", "192.168.1.1");
map.put("failType", "HTTPStatusCode:404");
map.put("detail", "fail");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4003", "resource-update-fail", map);
IOS
**C++接口**
Json::Value logJson;
logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
logJson["dataCDNIP"] = "192.168.1.1";
logJson["failType"] = "HTTPStatusCode:404";
logJson["detail"] = "fail";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4003", "resource-update-fail" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"192.168.1.1" forKey:@"dataCDNIP"];
[dict setObject:@"HTTPStatusCode:404" forKey:@"failType"];
[dict setObject:@"fail" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4003" logKey:@"resource-update-fail" dict:dict];
以上日志表示,开始从https://www.longtubas.com/xxxx.zip 地址下载资源文件失败,
https://www.longtubas.com/xxxx.zip 对应的ip为:192.168.1.1,
失败原因为:HTTPStatusCode:404。
LogId | 日志名称 | key |
---|---|---|
4004 | 游戏热更数据解压开始 | resource-unzip-start |
字段名 | 字段类型 | 字段说明 |
---|---|---|
dataName | String | 资源名称 |
detail | String | 游戏扩展信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("dataName", "xxxx.zip");
map.put("detail", "unzip-start");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4004", "resource-unzip-start", map);
IOS
**C++接口**
Json::Value logJson;
logJson["dataName"] = "xxxx.zip";
logJson["detail"] = "unzip-start";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4004", "resource-unzip-start" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxxx.zip" forKey:@"dataName"];
[dict setObject:@"unzip-start" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4004" logKey:@"resource-unzip-start" dict:dict];
以上日志表示,开始解压xxxx.zip 资源文件。
LogId | 日志名称 | key |
---|---|---|
4005 | 游戏热更数据解压成功 | resource-unzip-success |
字段名 | 字段类型 | 字段说明 |
---|---|---|
dataName | String | 资源名称 |
detail | String | 游戏扩展信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("dataName", "xxxx.zip");
map.put("detail", "unzip-success");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4005", "resource-unzip-success", map);
IOS
**C++接口**
Json::Value logJson;
logJson["dataName"] = "xxxx.zip";
logJson["detail"] = "unzip-success";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4005", "resource-unzip-success" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxxx.zip" forKey:@"dataName"];
[dict setObject:@"unzip-success" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4005" logKey:@"resource-unzip-success" dict:dict];
以上日志表示,开始解压xxxx.zip 资源文件 成功。
LogId | 日志名称 | key |
---|---|---|
4006 | 游戏热更数据解压失败 | resource-unzip-fail |
字段名 | 字段类型 | 字段说明 |
---|---|---|
dataName | String | 资源名称 |
detail | String | 游戏扩展信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("dataName", "xxxx.zip");
map.put("detail", "unzip-fail");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4006", "resource-unzip-fail", map);
IOS
**C++接口**
Json::Value logJson;
logJson["dataName"] = "xxxx.zip";
logJson["detail"] = "unzip-fail";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4006", "resource-unzip-fail" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxxx.zip" forKey:@"dataName"];
[dict setObject:@"unzip-fail" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4006" logKey:@"resource-unzip-fail" dict:dict];
以上日志表示,开始解压xxxx.zip 资源文件 失败。
注意:
1、开始、成功、失败三个状态,是针对当前下载行为的打点,比如1.0.0.1更新到1.0.0.2,一共100M,包含200个资源文件,只需要报一次下载开始、下载成功或者下载失败即可,不需要报200次。
LogId | 日志名称 | key |
---|---|---|
4013 | 边玩边下数据下载日志 | resourceupdate_custom |
字段名 | 字段类型 | 字段说明 |
---|---|---|
actId | String | 热更类型ID, 游戏自定义 |
actName | String | 热更类型名称, 游戏自定义 |
state | String | 热更状态:1:开始 2:成功 3:失败 |
dataPath | String | 资源地址 |
dataCDNIP | String | 资源地址对应的ip |
failType | String | 失败原因 |
detail | String | 游戏扩展信息,全为英文 |
acdid actName 介绍:
考虑到游戏边玩边下功能,资源下载位置 和资源下载分段的不确定性。所以热更类型 由游戏根据自身情况自定义。
state为下载状态或者解压状态。
举例说明:
游戏内需要下载多个副本资源,分为好望角,阿卡尼亚等。
好望角副本ID为:game_fb_001
好望角资源的下载和解压日志可以如下设置
actId 可以为: game_fb_001_down ,game_fb_001_unzip。
actName 可以为:好望角 ,好望角解压。
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("actId", "game_fb_001_down");
map.put("actName", "好望角");
map.put("state", "3");
map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
map.put("dataCDNIP", "192.168.1.1");
map.put("failType", "HTTPStatusCode:404");
map.put("detail", "fail");
LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4013", "resourceupdate_custom", map);
IOS
**C++接口**
Json::Value logJson;
logJson["actId"]= "game_fb_001_down";
logJson["actName"]= "好望角";
logJson["state"] ="3";
logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
logJson["dataCDNIP"] = "192.168.1.1";
logJson["failType"] = "HTTPStatusCode:404";
logJson["detail"] = "fail";
Json::FastWriter fast_writer;
const char* logValJson = fast_writer.write(logJson).c_str();
LTGameSDK::GetInstance().SendLog("4013", "resourceupdate_custom" ,logValJson);
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"game_fb_001_down" forKey:@"actId"];
[dict setObject:@"好望角" forKey:@"actName"];
[dict setObject:@"3" forKey:@"state"];
[dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"192.168.1.1" forKey:@"dataCDNIP"];
[dict setObject:@"HTTPStatusCode:404" forKey:@"failType"];
[dict setObject:@"fail" forKey:@"detail"];
[[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4013" logKey:@"resourceupdate_custom" dict:dict];
以上日志表示,开始从https://www.longtubas.com/xxxx.zip 地址下载资源文件失败,
https://www.longtubas.com/xxxx.zip 对应的ip为:192.168.1.1,
失败原因为:HTTPStatusCode:404。
下载的资源为:好望角资源
上海中清龙图软件有限公司