日志打点接口

1.1 发送游戏内日志(客户端调用)

收集游戏玩家行为信息,用于统计分析玩家行为。
需要接入android 或者 ios Base Sdk以后时候。

1.1.1 接口定义

  1. Android
  2. /**
  3. * 游戏端需发送的统计日志
  4. *
  5. * @param logID 日志ID
  6. * @param logKey 日志KEY
  7. * @param logValue 日志内容 HashMap key-val格式
  8. */
  9. public void LTBaseSDKSendGameInfoLog(String logID, String logKey, HashMap<String,Object> map)
  1. IOS
  2. /**
  3. * 游戏端需发送的统计日志
  4. *
  5. * @param logID 日志ID
  6. * @param logKey 日志KEY
  7. * @param logValJson 日志内容 json 格式字符串
  8. */
  9. **C++接口**
  10. LTGameSDK::GetInstance().SendLog(const char* logID, const char* logKey ,const char* logValJson);
  11. **OC接口**
  12. - (void)LTSDKSendLogWithLogId:(NSString *)logId logKey:(NSString *)logKey dict:(NSDictionary *)dict;
  1. unity
  2. /**
  3. * 游戏端需发送的统计日志
  4. *
  5. * @param logID 日志ID
  6. * @param logKey 日志KEY
  7. * @param LogValue 日志内容 Dictionary key-val格式
  8. * @return null
  9. */
  10. LTStatisticsEntry.GetInstance().sendGameInfoLog(string logID, string logKey,
  11. Dictionary<string, object> LogValue);

1.1.2 参数说明

参数名称 重要性 类型 说明
logID 必须 String 日志ID (详见logId和LogKey对应表)
logKey 必须 String 日志KEY (详见logId和LogKey对应表)
map 必须 HashMap 日志属性,具体属性字段见下面日志的说明表格

1.1.3 接口示例

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("key1", "value1");
  4. map.put("key2", "value2");
  5. map.put("key3", "value3");
  6. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog ("logID", "logKey", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["key1"] = "value1";
  5. logJson["key2"] = "value2";
  6. logJson["key3"] = "value3";
  7. Json::FastWriter fast_writer;
  8. const char* logValJson = fast_writer.write(logJson).c_str();
  9. LTGameSDK::GetInstance().SendLog("logID", "logKey" ,logValJson);
  10. **OC接口**
  11. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  12. [dict setObject:@"value1" forKey:@"key1"];
  13. [dict setObject:@"value2" forKey:@"key2"];
  14. [dict setObject:@"value3" forKey:@"key3"];
  15. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"logID" logKey:@"logKey" dict:dict];
  1. unity
  2. Dictionary<string, object> map = new Dictionary<string, object>();
  3. map.Add("key1", "value1");
  4. map.Add("key2", "value2");
  5. map.Add("key3", "value3");
  6. LTStatisticsEntry.GetInstance().sendGameInfoLog(logID,logKey,map);

1.1.4 logId和LogKey对应表

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 游戏热更数据解压失败 热更数据

1.1.5 游戏自定义日志(客户端调用)

当运营人员需要对游戏内的任务完成情况,关卡完成情况进行记录时,即可记录一条游戏自定义事件。在记录日志之前,游戏运营人员有必要向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 任务完成

1.1.5.1 自定义事件 举例

LogId 日志名称 key
1003 游戏自定义事件 role-act
字段名 字段类型 字段说明
roleLevel Integer 角色等级
roleVipLevel Integer 角色vip等级
classifiedId String 分类ID
classifiedName String 分类名称
actId String 事件标识,英文或数字
actName String 事件名称,最好传中文
detail String 相关信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("roleLevel", "10");
  4. map.put("roleVipLevel", "2");
  5. map.put("classifiedId", "Dungeons");
  6. map.put("classifiedName", "副本");
  7. map.put("actId", "fight.mineer");
  8. map.put("actName", "战斗.狗头人矿工");
  9. map.put("detail", "begin");
  10. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("1003", "role-act", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["roleLevel"] = "10";
  5. logJson["roleVipLevel"] = "2";
  6. logJson["classifiedId"] = "Dungeons";
  7. logJson["classifiedName"] = "副本";
  8. logJson["actId"] = "fight.mineer";
  9. logJson["actName"] = "战斗.狗头人矿工";
  10. logJson["detail"] = "begin";
  11. Json::FastWriter fast_writer;
  12. const char* logValJson = fast_writer.write(logJson).c_str();
  13. LTGameSDK::GetInstance().SendLog("1003", "role-act" ,logValJson);
  14. **OC接口**
  15. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  16. [dict setObject:@"10" forKey:@"roleLevel"];
  17. [dict setObject:@"2" forKey:@"roleVipLevel"];
  18. [dict setObject:@"Dungeons" forKey:@"classifiedId"];
  19. [dict setObject:@"副本" forKey:@"classifiedName"];
  20. [dict setObject:@"fight.mineer" forKey:@"actId"];
  21. [dict setObject:@"战斗.狗头人矿工" forKey:@"actName"];
  22. [dict setObject:@"begin" forKey:@"detail"];
  23. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"1003" logKey:@"role-act" dict:dict];

以上日志表示,当前角色和狗头人旷工进行战斗。

1.1.6 游戏资源下载打点(客户端调用)

注意:
1、下载开始、下载成功、下载失败三个点,是针对当前下载行为的打点,比如1.0.0.1更新到1.0.0.2,一共100M,包含200个资源文件,只需要报一次下载开始、下载成功或者下载失败即可,不需要报200次。
2、此日志仅适配于进游戏前的热更,如果游戏内有边玩边下功能,请参考 1.1.12。

1.1.6.1 游戏热更数据下载开始

LogId 日志名称 key
4001 游戏热更数据下载开始 resource-update-start
字段名 字段类型 字段说明
dataPath String 资源地址
detail String 游戏扩展信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
  4. map.put("detail", "update");
  5. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4001", "resource-update-start", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
  5. logJson["detail"] = "update";
  6. Json::FastWriter fast_writer;
  7. const char* logValJson = fast_writer.write(logJson).c_str();
  8. LTGameSDK::GetInstance().SendLog("4001", "resource-update-start" ,logValJson);
  9. **OC接口**
  10. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  11. [dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
  12. [dict setObject:@"update" forKey:@"detail"];
  13. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4001" logKey:@"resource-update-start" dict:dict];

以上日志表示,开始从https://www.longtubas.com/xxxx.zip 地址下载资源文件。

1.1.6.2 游戏热更数据下载成功

LogId 日志名称 key
4002 游戏热更数据下载成功 resource-update-success
字段名 字段类型 字段说明
dataPath String 资源地址
detail String 游戏扩展信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
  4. map.put("detail", "success");
  5. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4002", "resource-update-success", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
  5. logJson["detail"] = "success";
  6. Json::FastWriter fast_writer;
  7. const char* logValJson = fast_writer.write(logJson).c_str();
  8. LTGameSDK::GetInstance().SendLog("4002", "resource-update-success" ,logValJson);
  9. **OC接口**
  10. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  11. [dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
  12. [dict setObject:@"success" forKey:@"detail"];
  13. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4002" logKey:@"resource-update-success" dict:dict];

以上日志表示,开始从https://www.longtubas.com/xxxx.zip 地址下载资源文件成功。

1.1.6.3 游戏热更数据下载失败

LogId 日志名称 key
4003 游戏热更数据下载失败 resource-update-fail
字段名 字段类型 字段说明
dataPath String 资源地址
dataCDNIP String 资源地址对应的ip
failType String 失败原因
detail String 游戏扩展信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
  4. map.put("dataCDNIP", "192.168.1.1");
  5. map.put("failType", "HTTPStatusCode:404");
  6. map.put("detail", "fail");
  7. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4003", "resource-update-fail", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
  5. logJson["dataCDNIP"] = "192.168.1.1";
  6. logJson["failType"] = "HTTPStatusCode:404";
  7. logJson["detail"] = "fail";
  8. Json::FastWriter fast_writer;
  9. const char* logValJson = fast_writer.write(logJson).c_str();
  10. LTGameSDK::GetInstance().SendLog("4003", "resource-update-fail" ,logValJson);
  11. **OC接口**
  12. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  13. [dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
  14. [dict setObject:@"192.168.1.1" forKey:@"dataCDNIP"];
  15. [dict setObject:@"HTTPStatusCode:404" forKey:@"failType"];
  16. [dict setObject:@"fail" forKey:@"detail"];
  17. [[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。

1.1.6.4 游戏热更数据解压开始

LogId 日志名称 key
4004 游戏热更数据解压开始 resource-unzip-start
字段名 字段类型 字段说明
dataName String 资源名称
detail String 游戏扩展信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("dataName", "xxxx.zip");
  4. map.put("detail", "unzip-start");
  5. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4004", "resource-unzip-start", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["dataName"] = "xxxx.zip";
  5. logJson["detail"] = "unzip-start";
  6. Json::FastWriter fast_writer;
  7. const char* logValJson = fast_writer.write(logJson).c_str();
  8. LTGameSDK::GetInstance().SendLog("4004", "resource-unzip-start" ,logValJson);
  9. **OC接口**
  10. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  11. [dict setObject:@"xxxx.zip" forKey:@"dataName"];
  12. [dict setObject:@"unzip-start" forKey:@"detail"];
  13. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4004" logKey:@"resource-unzip-start" dict:dict];

以上日志表示,开始解压xxxx.zip 资源文件。

1.1.6.5 游戏热更数据解压成功

LogId 日志名称 key
4005 游戏热更数据解压成功 resource-unzip-success
字段名 字段类型 字段说明
dataName String 资源名称
detail String 游戏扩展信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("dataName", "xxxx.zip");
  4. map.put("detail", "unzip-success");
  5. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4005", "resource-unzip-success", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["dataName"] = "xxxx.zip";
  5. logJson["detail"] = "unzip-success";
  6. Json::FastWriter fast_writer;
  7. const char* logValJson = fast_writer.write(logJson).c_str();
  8. LTGameSDK::GetInstance().SendLog("4005", "resource-unzip-success" ,logValJson);
  9. **OC接口**
  10. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  11. [dict setObject:@"xxxx.zip" forKey:@"dataName"];
  12. [dict setObject:@"unzip-success" forKey:@"detail"];
  13. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4005" logKey:@"resource-unzip-success" dict:dict];

以上日志表示,开始解压xxxx.zip 资源文件 成功。

1.1.6.6 游戏热更数据解压失败

LogId 日志名称 key
4006 游戏热更数据解压失败 resource-unzip-fail
字段名 字段类型 字段说明
dataName String 资源名称
detail String 游戏扩展信息,全为英文

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("dataName", "xxxx.zip");
  4. map.put("detail", "unzip-fail");
  5. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4006", "resource-unzip-fail", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["dataName"] = "xxxx.zip";
  5. logJson["detail"] = "unzip-fail";
  6. Json::FastWriter fast_writer;
  7. const char* logValJson = fast_writer.write(logJson).c_str();
  8. LTGameSDK::GetInstance().SendLog("4006", "resource-unzip-fail" ,logValJson);
  9. **OC接口**
  10. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  11. [dict setObject:@"xxxx.zip" forKey:@"dataName"];
  12. [dict setObject:@"unzip-fail" forKey:@"detail"];
  13. [[LTGameOCSDK shareInstance] LTSDKSendLogWithLogId:@"4006" logKey:@"resource-unzip-fail" dict:dict];

以上日志表示,开始解压xxxx.zip 资源文件 失败。

1.1.7 游戏边玩边下资源下载打点(客户端调用)

注意:
1、开始、成功、失败三个状态,是针对当前下载行为的打点,比如1.0.0.1更新到1.0.0.2,一共100M,包含200个资源文件,只需要报一次下载开始、下载成功或者下载失败即可,不需要报200次。

1.1.7.1 游戏边玩边下数据下载

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 可以为:好望角 ,好望角解压。

日志格式示例:

  1. Android
  2. HashMap<String,Object> map = new HashMap<String,Object>();
  3. map.put("actId", "game_fb_001_down");
  4. map.put("actName", "好望角");
  5. map.put("state", "3");
  6. map.put("dataPath", "https://www.longtubus.com/xxxx.zip");
  7. map.put("dataCDNIP", "192.168.1.1");
  8. map.put("failType", "HTTPStatusCode:404");
  9. map.put("detail", "fail");
  10. LTBaseSDK.getInstance(this).LTBaseSDKSendGameInfoLog("4013", "resourceupdate_custom", map);
  1. IOS
  2. **C++接口**
  3. Json::Value logJson;
  4. logJson["actId"]= "game_fb_001_down";
  5. logJson["actName"]= "好望角";
  6. logJson["state"] ="3";
  7. logJson["dataPath"] = "https://www.longtubus.com/xxxx.zip";
  8. logJson["dataCDNIP"] = "192.168.1.1";
  9. logJson["failType"] = "HTTPStatusCode:404";
  10. logJson["detail"] = "fail";
  11. Json::FastWriter fast_writer;
  12. const char* logValJson = fast_writer.write(logJson).c_str();
  13. LTGameSDK::GetInstance().SendLog("4013", "resourceupdate_custom" ,logValJson);
  14. **OC接口**
  15. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  16. [dict setObject:@"game_fb_001_down" forKey:@"actId"];
  17. [dict setObject:@"好望角" forKey:@"actName"];
  18. [dict setObject:@"3" forKey:@"state"];
  19. [dict setObject:@"https://www.longtubus.com/xxxx.zip" forKey:@"dataPath"];
  20. [dict setObject:@"192.168.1.1" forKey:@"dataCDNIP"];
  21. [dict setObject:@"HTTPStatusCode:404" forKey:@"failType"];
  22. [dict setObject:@"fail" forKey:@"detail"];
  23. [[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。
下载的资源为:好望角资源