收集游戏玩家行为信息,用于统计分析玩家行为。
需要接入android 或者 ios Base Sdk以后时候。
Android
/**
* 游戏端需发送的统计日志
*
* @param logID 日志ID
* @param logKey 日志KEY
* @param logValue 日志内容 HashMap key-val格式
*/
public void MIDBaseSDKSendGameInfoLog(String logID, String logKey, HashMap<String,Object> map)
IOS
/**
* 游戏端需发送的统计日志
*
* @param logID 日志ID
* @param logKey 日志KEY
* @param logValJson 日志内容 json 格式字符串
*/
**OC接口**
- (void)MIDSDKSendLogWithLogId:(NSString *)logId logKey:(NSString *)logKey dict:(NSDictionary *)dict;
PC端
/// <summary>
/// 游戏端需发送的统计日志
/// </summary>
/// <param name="logID"> 日志ID</param>
/// <param name="logKey">日志key</param>
/// <param name="map"> 日志内容 key-val 格式</param>
public void MIDBaseSDKSendGameInfoLog(string logID ,string logKey , Dictionary<string, object> map);
参数名称 | 重要性 | 类型 | 说明 |
---|---|---|---|
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");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog ("logID", "logKey", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"value1" forKey:@"key1"];
[dict setObject:@"value2" forKey:@"key2"];
[dict setObject:@"value3" forKey:@"key3"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"logID" logKey:@"logKey" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("key1", "value1");
map.Add("key2", "value2");
map.Add("key3", "value3");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("logID", "logKey", map);
logId | Logkey | 描述 | GSC平台显示名称 |
---|---|---|---|
91 | role-income-update | 玩家虚拟货币变更 | 货币变更 |
9 | role-item-update | 玩家虚拟物品变更 | 物品变更 |
10 | role-prop-update | 玩家属性变更 | 玩家属性变更 |
13 | role-item-prop-update | 玩家商品属性变更日志 | 商品属性变更 |
14 | role-card-prop-update | 玩家卡牌属性变更日志 | 卡牌属性变更 |
1001 | role-task | 任务 | 游戏任务 |
1002 | role-stage | 副本,场景 | 游戏关卡 |
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值,否则会导致产品历史的用户轨迹数据在平台测查询匹配异常,没有相关参考性。
尽管任务,副本/场景,以及游戏自定义事件三个日志的字段数量和格式相同,但是我们希望研发人员能够按照预设的不同logid和logkey分别记录这三类日志,这样一来,便于将相对重要的日志同其它日志区分出来,也便于我们对任务和场景副本日志采用预设的特定算法来进行统计运算。
我们建议用以下的默认字段来记录事件日志的detail,以便统计后台可以用默认的配置来对游戏自定义事件进行计算成功率,通过率等进一步指标。
如果列表中的detail无法满足游戏的日志记录要求,也允许各个游戏使用自己定义的detail来记录日志。
其中detail字段建议取值如下所示:
detail | 含义 |
---|---|
accept | 接任务 |
fail | 任务失败 |
cancel | 放弃任务 |
succ | 达成任务条件 |
complete | 任务完成 |
LogId | 日志名称 | key |
---|---|---|
1001 | 任务 | role-task |
字段名 | 字段类型 | 字段说明 |
---|---|---|
roleLevel | String | 角色等级 |
roleVipLevel | String | 角色vip等级 |
classifiedId | String | 分类ID |
classifiedName | String | 分类名称 |
taskId | String | 任务编码,英文或数字 |
taskName | String | 任务名称,最好传中文 |
detail | String | 相关信息,全为英文 |
日志格式示例:
Android
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("roleLevel", "10");
map.put("roleVipLevel", "2");
map.put("classifiedId", "accept1");
map.put("classifiedName", "新手引导");
map.put("taskId", "newbieguide1");
map.put("taskName", "新手引导流程1");
map.put("detail", "accept");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("1001", "role-task", map);
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("roleLevel", "10");
map.put("roleVipLevel", "2");
map.put("classifiedId", "accept1");
map.put("classifiedName", "新手引导");
map.put("taskId", "newbieguide1");
map.put("taskName", "新手引导流程1");
map.put("detail", "complete");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("1001", "role-task", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"10" forKey:@"roleLevel"];
[dict setObject:@"2" forKey:@"roleVipLevel"];
[dict setObject:@"accept1" forKey:@"classifiedId"];
[dict setObject:@"新手引导" forKey:@"classifiedName"];
[dict setObject:@"newbieguide1" forKey:@"taskId"];
[dict setObject:@"新手引导流程1" forKey:@"taskName"];
[dict setObject:@"accept" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"1001" logKey:@"role-task" dict:dict];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"10" forKey:@"roleLevel"];
[dict setObject:@"2" forKey:@"roleVipLevel"];
[dict setObject:@"accept1" forKey:@"classifiedId"];
[dict setObject:@"新手引导" forKey:@"classifiedName"];
[dict setObject:@"newbieguide1" forKey:@"taskId"];
[dict setObject:@"新手引导流程1" forKey:@"taskName"];
[dict setObject:@"complete" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"1001" logKey:@"role-task" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("roleLevel", "10");
map.Add("roleVipLevel", "2");
map.Add("classifiedId", "accept1");
map.Add("classifiedName", "新手引导");
map.Add("taskId", "newbieguide1");
map.Add("taskName", "新手引导流程1");
map.Add("detail", "accept");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("1001", "role-task", map);
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("roleLevel", "10");
map.Add("roleVipLevel", "2");
map.Add("classifiedId", "accept1");
map.Add("classifiedName", "新手引导");
map.Add("taskId", "newbieguide1");
map.Add("taskName", "新手引导流程1");
map.Add("detail", "complete");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("1001", "role-task", map);
这两条日志表示,
当前角色马克.吐温接受了新手流程任务1,
完成了新手流程任务1。
LogId | 日志名称 | key |
---|---|---|
1002 | 副本场景日志 | role-stage |
字段名 | 字段类型 | 字段说明 |
---|---|---|
roleLevel | String | 角色等级 |
roleVipLevel | String | 角色vip等级 |
classifiedId | String | 分类ID |
classifiedName | String | 分类名称 |
stageId | String | 副本场景标识,英文或数字 |
stageName | String | 副本场景名称,最好传中文 |
detail | String | 相关信息,全为英文 |
其中detail字段建议取值如下所示:
detail | 含义 |
---|---|
begin | 场景开始 |
fail | 场景失败 |
cancel | 场景取消 |
end | 场景结束 |
日志格式示例:
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("stageId", "DeadminesIstanc");
map.put("stageName", "死亡矿井");
map.put("detail", "begin");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("1002", "role-stage", map);
IOS
**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:@"DeadminesIstanc" forKey:@"stageId"];
[dict setObject:@"死亡矿井" forKey:@"stageName"];
[dict setObject:@"begin" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"1002" logKey:@"role-stage" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("roleLevel", "10");
map.Add("roleVipLevel", "2");
map.Add("classifiedId", "Dungeons");
map.Add("classifiedName", "副本");
map.Add("stageId", "DeadminesIstanc");
map.Add("stageName", "死亡矿井");
map.Add("detail", "begin");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("1002", "role-stage", map);
以上日志表示,当前角色进入死亡矿井。
LogId | 日志名称 | key |
---|---|---|
1003 | 游戏自定义事件 | role-act |
字段名 | 字段类型 | 字段说明 |
---|---|---|
roleLevel | String | 角色等级 |
roleVipLevel | String | 角色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");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("1003", "role-act", map);
IOS
**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"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"1003" logKey:@"role-act" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("roleLevel", "10");
map.Add("roleVipLevel", "2");
map.Add("classifiedId", "Dungeons");
map.Add("classifiedName", "副本");
map.Add("actId", "fight.mineer);
map.Add("actName", "战斗.狗头人矿工");
map.Add("detail", "begin");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("1003", "role-act", map);
以上日志表示,当前角色和狗头人旷工进行战斗。
注意:
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.acesdk.cn/xxxx.zip");
map.put("detail", "update");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4001", "resource-update-start", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"https://www.acesdk.cn/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"update" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4001" logKey:@"resource-update-start" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("dataPath", "https://www.acesdk.cn/xxxx.zip");
map.Add("detail", "update");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4001", "resource-update-start", map);
以上日志表示,开始从https://www.acesdk.cn/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.acesdk.cn/xxxx.zip");
map.put("detail", "success");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4002", "resource-update-success", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"https://www.acesdk.cn/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"success" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4002" logKey:@"resource-update-success" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("dataPath", "https://www.acesdk.cn/xxxx.zip");
map.Add("detail", "success");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4002", "resource-update-success", map);
以上日志表示,开始从 https://www.acesdk.cn/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.acesdk.cn/xxxx.zip");
map.put("dataCDNIP", "192.168.1.1");
map.put("failType", "HTTPStatusCode:404");
map.put("detail", "fail");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4003", "resource-update-fail", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"https://www.acesdk.cn/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"192.168.1.1" forKey:@"dataCDNIP"];
[dict setObject:@"HTTPStatusCode:404" forKey:@"failType"];
[dict setObject:@"fail" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4003" logKey:@"resource-update-fail" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("dataPath", "https://www.acesdk.cn/xxxx.zip");
map.Add("dataCDNIP", "192.168.1.1");
map.Add("failType", "HTTPStatusCode:404");
map.Add("detail", "fail");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4003", "resource-update-fail", map);
以上日志表示,开始从https://www.acesdk.cn/xxxx.zip 地址下载资源文件失败,
https://www.acesdk.cn/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");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4004", "resource-unzip-start", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxxx.zip" forKey:@"dataName"];
[dict setObject:@"unzip-start" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4004" logKey:@"resource-unzip-start" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("dataName", "xxxx.zip");
map.Add("detail", "unzip-start");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4004", "resource-unzip-start", map);
以上日志表示,开始解压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");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4005", "resource-unzip-success", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxxx.zip" forKey:@"dataName"];
[dict setObject:@"unzip-success" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4005" logKey:@"resource-unzip-success" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("dataName", "xxxx.zip");
map.Add("detail", "unzip-success");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4005", "resource-unzip-success", map);
以上日志表示,开始解压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");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4006", "resource-unzip-fail", map);
IOS
**OC接口**
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"xxxx.zip" forKey:@"dataName"];
[dict setObject:@"unzip-fail" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4006" logKey:@"resource-unzip-fail" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("dataName", "xxxx.zip");
map.Add("detail", "unzip-fail");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4006", "resource-unzip-fail", map);
以上日志表示,开始解压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.acesdk.cn/xxxx.zip");
map.put("dataCDNIP", "192.168.1.1");
map.put("failType", "HTTPStatusCode:404");
map.put("detail", "fail");
MIDBaseSDK.getInstance(this).MIDBaseSDKSendGameInfoLog("4013", "resourceupdate_custom", map);
IOS
**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.acesdk.cn/xxxx.zip" forKey:@"dataPath"];
[dict setObject:@"192.168.1.1" forKey:@"dataCDNIP"];
[dict setObject:@"HTTPStatusCode:404" forKey:@"failType"];
[dict setObject:@"fail" forKey:@"detail"];
[[MIDGameOCSDK shareInstance] MIDSDKSendLogWithLogId:@"4013" logKey:@"resourceupdate_custom" dict:dict];
PC端
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("actId", "game_fb_001_down");
map.Add("actName", "好望角");
map.Add("state", "3");
map.Add("dataPath", "https://www.acesdk.cn/xxxx.zip");
map.Add("dataCDNIP", "192.168.1.1");
map.Add("failType", "HTTPStatusCode:404");
map.Add("detail", "fail");
WPGameSDK.getInstance().MIDBaseSDKSendGameInfoLog("4013", "resourceupdate_custom", map);
以上日志表示,开始从https://www.acesdk.cn/xxxx.zip 地址下载资源文件失败,
https://www.acesdk.cn/xxxx.zip 对应的ip为:192.168.1.1,
失败原因为:HTTPStatusCode:404。
下载的资源为:好望角资源