# 服务器日志开发接入手册
[TOC]
版本号 | 修订日期 | 修订内容 |
---|---|---|
V1.0 | 2018-11-23 | 初版发布 |
V1.1 | 2018-11-26 | 1. 调整部分概念描述; 2. 修正创角埋点位置; 3. 货币变更与物品变更表增加变更类型字段; 4. 在线、登出日志埋点待调研; 5. 登录日志调整字段顺序; |
V1.2 | 2018-11-28 | 1. ups按钮日志增加按钮功能字段 |
V1.21 | 2018-12-03 | 1. 更正维表的排序ID,由“order_id”改成“order_rn”,避免和付费日志的订单号混淆; 2. 调整开服信息日志字段; 3. 调整任务日志中task_id为字符串类型。 |
V1.22 | 2018-12-18 | 1. 充值日志删除reason_type字段; 2. 货币变更表变更原因描述调整,增加充值获得; 3. 修正数据库接入规则中加分区语句的一处错误,并指出只兼容mysql 5.5以上版本。 |
V1.23 | 2019-01-04 | 1. 补充zid默认值; 2. 将role_id和user_id改为string类型; 3. account_type优先级调整为2,非必填字段; 4. ordernum改为string; 5. 补充race_id说明; 6. 补充货币变更日志的Tips说明,当货币消耗不涉及实体道具时如何填item_type_id等字段 |
V1.24 | 2019-01-09 | 1. 调整reason_param字段为可选,另reason_type的定义不一定要按照文档定义来 |
V1.25 | 2019-01-19 | 1. 完善文件接入时的文件路径说明 |
V1.26 | 2019-01-25 | 1. 将日志分为一级、二级、三级三个优先级,方便开发按照优先级进行日志开发。 |
V1.27 | 2019-03-08 | 1. 新增一个一级日志:tab_account_login(账号登录); 2. 强调tab_login为角色登录游戏日志。 |
V1.28 | 2019-04-28 | 1. 调整日志接入方式; 2. 调整日志格式,新增角色信息和按钮点击接口。 |
V1.29 | 2019-05-06 | 1. 调整部分字段命名,与SDK接入文档保持一致。 |
V1.30 | 2019-05-07 | 1. 调整设备品牌、机型字段的优先级为1; 2. map_pvp新增字段:fight_value; 3. 含char字段调整为role。 |
V1.31 | 2019-05-09 | 1. 更新dev_os枚举值; 2. 调整部分字段名称,减少数据上报时key值的大小。 |
V1.32 | 2019-05-10 | 1. 分离主货币变更日志,gmoney |
V1.33 | 2019-05-15 | 1. 登出日志新增字段:if_force_log,判断是否强制打点日志 |
V1.34 | 2019-05-21 | 1. 修订了主货币变更日志中变更原因(reason_type)的枚举说明; 2. 明确商城销售日志中不记录主货币充值档位的销售记录。 |
V1.35 | 2019-05-21 | 1. 修订了货币变更日志与物品变更日志中变更原因(reason_type)的枚举说明,相同枚举值含义保持统一,自定义枚举值从100开始 |
V1.36 | 2019-05-27 | 1. 修订了货币变更日志与物品变更日志中变更原因(reason_type)的枚举说明,增加16,17两种类型(GM指令) |
V1.37 | 2019-05-30 | 1. 将配置维表的库名由dh_dim统一调整为dh_ods |
V1.38 | 2019-06-03 | 1. 修正了几处示例的错误。 |
V1.39 | 2019-06-14 | 1. dev_os_ver修正为dev_osver,统一命名 |
V1.40 | 2019-07-01 | 1. 文档命名调整; 2. 主货币变更(gmoney)日志增加货币类型字段:mny_type; 3. 商城销售(mall)日志增加栏目字段:first_catalog、second_catalog; 4. pvp日志增加地图难度和英雄形象字段:difficulty、hero_image; 5. pve日志增加英雄ID、地图难度和英雄形象字段:hero_type_id、difficulty、hero_image; 6. 新手引导步骤(guidestep)日志增加步骤参数字段:step_param; 7. 删除原先的维表接口,调整为OSS配置表的接口,用于OSS显示各类ID对应的名称 |
V1.41 | 2019-07-15 | 1. PVP/PVE日志新增hero_id_list和hero_image_list字段,用于记录多个英雄(或卡牌)的情况 |
V1.42 | 2019-10-22 | 1. 增加kafka消息接入方式; 2. 新增三个日志:玩家分群变动、玩家互动行为、匹配详情; 3. 优化了部分字段的描述信息 |
V1.43 | 2019-10-24 | 1. 玩家分群变动、玩家互动行为、匹配详情日志补充role_id字段 |
V1.44 | 2019-12-23 | 1. 分离OSS配置表接口; 2. 新增抽卡产出、卡牌养成日志 |
V1.45 | 2020-04-03 | 1. 补充自定义日志格式,增加通用扩展字段; 2. 增加FAQ,列举接入前的checklist,供开发核对 |
V1.46 | 2020-04-13 | 1. map_pve日志增加关卡层数字段; 2. 抽奖日志增加卡池ID字段 |
V1.47 | 2020-05-14 | 1. 新手引导日志增加累计时长字段; 2. 调整接入方式,取消了文件接入,统一使用kafka接入 |
V1.48 | 2020-05-28 | 1. pay日志增加三个预留付费点字段,用于记录游戏自定义的付费点信息 |
V1.49 | 2020-06-03 | 1. 公共字段增加游戏主体字段 |
V1.50 | 2020-06-18 | 1. 删除在线日志低价值的字段 |
V1.51 | 2020-06-23 | 1. 删除原一级日志:account_login(价值较低) |
V1.52 | 2020-09-03 | 1. map_pve日志增加关卡战力(fight_value_pve)字段 |
V1.53 | 2020-11-25 | 1. 增加退款接口(仅限非电魂充值); 2. 自定义日志增加操作原因:opt_reason |
V1.54 | 2020-12-22 | 1. 增加订单修改接口(仅限非电魂充值) |
V1.55 | 2021-03-29 | 1. 充值日志增加pay_mode(充值方式),pay_mode_name字段,用以适配游动充值数据 |
V1.56 | 2021-05-25 | 1. 充值日志增加is_testorder,用以标记测试订单; 2. 登录登出日志增加account_name,国内项目需上报中宣部; 3. 客户端状态日志新增客户端操作状态字段。 |
V1.57 | 2021-06-02 | 1. 修复了查询的bug,修正日志字段与原文档对比的部分偏差 |
V1.58 | 2021-10-11 | 1. 调整了部分日志字段的取值范围; 2. 调整了物品日志中item_state、reason字段的取值范围 |
V1.59 | 2022-01-07 | 1. 进一步明确日志字段的取值规则,增加了日志数据格式校验工具 |
V1.60 | 2023-03-28 | 1. 登录登出日志去除account_name(游戏无法获取); 2. 增加account_type的获取描述 |
V1.61 | 2023-08-31 | 1. 自定义日志新增ad_channel、ad_subchannel字段,部分项目有需求分主次渠道统计 |
V1.62 | 2023-09-25 | 1. 任务日志新增累计游戏时长字段,方便统计任务完成时的人均游戏时长 |
V1.63 | 2023-10-19 | 1. pay日志is_testorder调整为必传参数 |
V1.64 | 2024-12-16 | 1. 增加实时用户信息上报接口 |
V1.65 | 2025-01-07 | 1. 数据部对外字段统一V2版本 |
# 注意:所有上报日志都需带"logType":"日志英文名",如online,login,createChar*
# >> 日志接入
# 1. kafka消息接入
目前服务器日志接入统一采用kafka消息接入。下面介绍kafka接入的详细规则:使用这种接入方式,所有日志在发送时均需要添加额外的公共字段(可以作为游戏的公共配置,每次读取配置变量即可),以便数据平台在接收时可以区分不同游戏不同类型的日志。同时约定上报的json所有键值均为string类型。
特别说明 程序上报kafka失败需要输出失败日志(包括上报失败的整条消息)并让运维做好日志监控;成功的消息可以不打印,以免日志量过大。 程序需要有重试机制,上报失败后增加适当的重试次数。
- 公共字段
字段名称 | 字段注释 | 优先级 | 描述 | 值 |
---|---|---|---|---|
logType | 日志类型 | 1 | 日志类型,每个事件唯一 | 不同日志不同值:<各自的日志类型,如online> |
sourceName | 日志库名 | 1 | 对应我方数据库存储位置 | 固定值:dhOds |
sdkName | SDK名称 | 1 | 对应我方数据库存储位置 | 固定值:odsDhgs |
productId | 游戏ID | 1 | appid,由电魂平台统一分配提供 | 固定值:<各自的appid> |
recordId | 记录唯一ID | 1 | 唯一标识一条记录,可以使用上报数据的哈希值 | 每条记录不同 |
productOwner | 游戏主体 | 1 | 具体参数值在接入前咨询数据平台部 | 咨询数据平台部 |
游戏ID获取
游戏ID(product_id)由电魂平台统一分配,可以找运营/产品同学获得游戏的游戏ID,也可以通过SDK内置的方法获取。如IOS对应DHForeignConfigure.plist中的appid字段,而安卓则在manifest配置中:
<meta-data android:name="dh_appId" android:value="xxxxxx"/>
具体数值仍需要与运营/产品同学确认,不排除有用老包重新打包的可能。
# >> 通用概念
游戏中为区分不同的玩家/物品会设计一套可产生唯一ID的系统,对于这些ID需要遵循一个原则:所有ID不能复用。例如物品A,开始的类型ID是“A001”,后来物品A本质发生了变化,那么需要使用新的未使用的“A002”作为变更后的物品类型ID,不能直接使用“A001”。常见ID概念说明:
物品类型ID(itemTypeId)
指游戏中道具的类型ID,同种道具的类型ID相同,比如初级经验丹(A001)、中级经验丹(A002)等。
玩家帐号ID(accountId)
指玩家登录游戏使用的账号ID(通常是电魂ID)。
玩家角色ID(roleId)
指玩家在服务器上创建的角色ID(当游戏设计同账号只能创角一个角色时,可与账号保持一致),每个角色都需要有唯一的角色ID,即使不同服务器> 上的角色ID也需要不一样。
玩家ID(userId)
指玩家在游戏中的唯一标识,不同服务器不同的角色对应的玩家ID如果一致,则认为是属于同一个玩家。玩家ID的产生应该依赖玩家的设备/账 号,如果玩家以游客身份创建角色,后来绑定了账号在其他服务器创建角色,那么他们的玩家ID也需要保持一致,玩家ID在玩家首次进入游戏时产> 生,后续不再变更。
# 1.类型ID
比如 地图ID、关卡ID等。
此部分是指游戏中道具的逻辑分类ID,不是指具体的某件道具,一般都会有对应的配置表,配置表需要包含各类型ID对应的中文含义、用途、品> > 质、使用需求等说明。
示例:
M001,竞技地图,5V5
# 2.唯一ID
比如 玩家角色ID(roleId)、玩家账号ID(accountId)、物品ID(itemTypeId)等。
此部分是指服务器唯一甚至游戏中的唯一标识,是指具体玩家或者其拥有的某件道具。
# 3.新手引导步骤ID
001_001
001_002
002_001
每一种类型大类在前面,小类在后面,这样顺序关系一目了然。同时因为用了好几位数字,方便后期增加和扩展。或者每一类id中间预留部分空位,方便后期增加。
注意:部分游戏在玩家离线后,服务器上玩家缓存信息失效,导致日志信息记录不全。建议一定要缓存一段时间,等日志写入完成再处理缓存。
# 4.统计维度
1.应用包(联运)渠道(fromCh)
基础日志(创角、登录、登出、充值)需要包含渠道字段,即日志设计部分的from_ch字段,该字段记录的是游戏包名简称,用以区分用户使用的安装包来源比如:360渠道、官网渠道、华为渠道等 ,可以直接调用电魂SDK获得,获取方法:
安卓/iOS-SDK:
String from_ch = DHSDKHelper.query("dh_channelId");
微信小游戏-SDK:
import DHMiniSDK from "./dhminisdk";
...
// 完成初始化后可获取
console.log(sdk.channel); // 读取渠道ID,如1398,(对应数据上报 from_ch 字段)
注:渠道id信息,要使用电魂sdk中间的编号,不要自己另外编号!!! cp信息,也请使用统一的编号
2.多端区分(devOs)
通过devOs字段区分多端,如:windows、android、 ios、ps…。从电魂SDK中获取方法:
安卓/iOS-SDK:
String dev_os = DHSDKHelper.query("devOs");
微信小游戏-SDK:
import DHMiniSDK from "./dhminisdk";
...
// 完成初始化后可获取
console.log(sdk.deviceOS); // 读取设备系统类型,(对应数据上报 devOs 字段)
3.CPS渠道(adChannel/adSubchannel)
即adChannel(主渠道)和adSubchannel(次渠道),主要是用来在做广告推广时,记录用户来源,便于对广告质量作分析。该值往往通过电魂打包> 平台打包时添加该标记,非CPS包则没有该标记,此时都填0即可。可以直接调用电魂SDK获得,获取方法
安卓/iOS-SDK:
String adChannel = DHSDKHelper.query("dh_mainchannel"); String adSubchannel = DHSDKHelper.query("dh_secochannel")
微信小游戏-SDK:
import DHMiniSDK from "./dhminisdk";
...
// 完成初始化后可获取
console.log(sdk.mainChannel); // 读取主渠道ID,如100708,(对应数据上报 adChannel 字段)
console.log(sdk.secondChannel); // 读取次渠道ID,如100709,(对应数据上报 adSubchannel 字段)
4.国家字段(nation)
即nation,在海外运营时经常会用到按国家维度进行统计,通过IP转换得到。
5.设备信息
IMEI、OAID、GPS_ADID(谷歌ID)、IDFA/IDFV(IOS),dev_mac,android_id(android),dev_uuid地址等,部分情况下用来做广告跟踪、设备对应,数据映射。其中dev_uuid由电魂SDK算法生成,用于数据统计时唯一标识一台设备,获取方法:
安卓/iOS-SDK:
String devUuid = DHSDKHelper.query("devUuid");
微信小游戏-SDK:
import DHMiniSDK from "./dhminisdk";
...
// 完成初始化后可获取
console.log(sdk.deviceId); // 读取设备唯一标识,(对应数据上报 devUuid 字段)
tips:其他设备ID获取参考:http://www.jianshu.com/p/178786f833b6,IDFA获取方法:http://blog.csdn.net/qq_20401801/article/details/54707941
注:设备ID建议直接调用电魂SDK来获取,以保持口径统一
# >> 日志接口规范
# 日志优先级
分为一级、二级和三级。其中一级日志为核心运营日志,优先接入;二级和三级日志为业务特性日志,根据项目实际需求和进度接入。
# 字段优先级
1) 1表示必填字段,即使获取不到也需要填约定默认值或空值;
2) 2表示选填字段,可以不输出;
3) 能获取到的字段尽量上报,最终会影响数据统计的多维细分。
# 数据示例
为方便查看,数据示例统一以json数组的格式展示。
# 数据类型
使用kafka接入方式,约定上报的json所有键值均为string类型。
# >> 一级日志
# 1. 在线 online
Tips:在线数据每分钟记录一次数值,游戏给最细维度下的在线人数,用于统计实时在线
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
recordTime | 记录时间 | 1 | 游戏记录的日志数据,格式:yyyy-mm-dd hh:mm:ss |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
onlineNum | 在线人数 | 1 | 在线人数(角色数) |
devOs | 设备系统类型 | 2 | 取值范围:{‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’,‘wxminigame’}。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
fromCh | 应用包渠道 | 2 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等。电魂SDK(安卓/iOS)获取:String from_ch = DHSDKHelper.query(“dh_channelId”); 微信小游戏SDK获取:console.log(sdk.channel); |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
- 数据示例
[
{
"logType":"online",
"areaId":"1",
"serverId":"1",
"recordTime":"2019-04-23 12:12:12",
"timezone":"8",
"onlineNum":"100",
"devOs":"android",
"fromCh":"1058",
"extendParamJson":"{\"serverid\":\"301\"}",
"recordId":"bce6226b40d619a31104376f0ecd5e51"
},
{
"logType":"online",
"areaId":"2",
"serverId":"2",
"recordTime":"2019-04-23 12:12:12",
"timezone":"8",
"onlineNum":"100",
"devOs":"android",
"fromCh":"1058",
"extendParamJson":"{\"serverid\":\"302\"}",
"recordId":"bce6226b40d619a31104376f0ecd5e51"
}
]
# 2. 游戏登录 login
Tips:游戏登录日志中需要输出用户额外的角色快照信息。另外注意,只要账号验证成功并且角色进入游戏,都算作是登录成功,不要输出登录失败的日志。主要用于统计日活、日活分布以及监控一些游戏核心衡量指标的分布情况(如等级、段位等)
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 即登录时间,如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
lastLoginTime | 上次登录时间 | 1 | 首次登录时默认填:0000-00-00 00:00:00 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户登陆IP | 1 | 玩家设备IP |
roleLevel | 玩家角色等级 | 1 | 此处等级积分、经验等需要转换成等级 |
accountId | 账号ID | 1 | 账号ID(电魂ID),SDK获取方法:DHSDKHelper.query(“accountid”); |
fromCh | 应用包渠道 | 1 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等 |
adChannel | cps主渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_channel = DHSDKHelper.query(“dh_mainchannel”); 微信小游戏SDK获取:console.log(sdk.mainChannel); |
adSubchannel | cps次渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_subchannel = DHSDKHelper.query(“dh_secochannel”); 微信小游戏SDK获取:console.log(sdk.secondChannel); |
devUuid | 设备唯一标识 | 1 | SDK算法生成,用以统计设备数,电魂SDK(安卓/iOS)获取:String dev_uuid = DHSDKHelper.query(“dev_uuid”); 微信小游戏SDK获取:console.log(sdk.deviceId); |
devOs | 设备系统类型 | 1 | 取值范围:{‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’,‘wxminigame’}。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
devImei | IMEI(IDFA) | 1 | 安卓是设备的IMEI,如"863673044723658",IOS是设备的IDFA,如"08E443F3-07A2-4E1E-BA16-D503C4A515AC" |
devBrand | 设备品牌 | 2 | |
devModel | 设备型号 | 2 | |
devOsver | 设备系统版本 | 2 | |
devMac | 设备mac地址 | 2 | |
devRes | 设备分辨率 | 2 | |
networkType | 网络类型 | 2 | 2G/3G/4G/5G/wifi等 |
appVer | 应用版本 | 2 | |
pkgName | 应用包名 | 2 | |
roleName | 角色名称 | 2 | base64加密,UTF8编码 |
roleSex | 角色性别 | 2 | 0:男 1:女 2:其他(可能有游戏的角色没有性别之分) |
vipLevel | vip等级 | 2 | vip等级 |
onlineDurtAll | 累计游戏时长 | 2 | 累计游戏时长 |
gmoney | 登录时游戏主货币存量 | 2 | 主货币:由现实货币直接兑换的游戏币 |
fightValue | 战力值 | 2 | 游戏==核心玩法水平衡量值== |
leagueGrade | 段位等级 | 2 | 联赛(或天梯)段位(或军衔)等级,填1,2,3,4...这样的段位等级==核心玩法水平衡量值== |
achieveValue | 成就值 | 2 | ==核心玩法水平衡量值== |
accountType | 账号类型 | 2 | 账号类型渠道(facebook、google、QQ、微信等),通过账号平台回调的logintype参数获取 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
- 数据示例
[
{
"logType":"login",
"sourceName":"dhOds",
"sdkName":"odsDhgs",
"productId":"123456789",
"areaId":"1",
"serverId":"1",
"roleId":"10000",
"recordTime":"2019-04-23 12:12:12",
"timezone":"8",
"lastLoginTime":"0000-00-00 00:00:00",
"userId":"123456",
"userIp":"110.10.10.1",
"roleLevel":"1",
"accountId":"172412345",
"fromCh":"1058",
"adChannel":"10066",
"adSubchannel":"10093",
"devUuid":"ab6c1f1abcfee233ad07aa3361314f50",
"devOs":"android",
"devImei":"863673044723658",
"devBrand":"vivo",
"devModel":"vivo z1i",
"devOsver":"8.1.0",
"devMac":"02:00:00:00:00:00",
"devRes":"720*1436",
"networkType":"LTE",
"appVer":"21",
"pkgName":"com.dc01.vivo",
"roleName":"5L2g5aW9",
"roleSex":"0",
"vipLevel":"0",
"onlineDurtAll":"12",
"gmoney":"0",
"fightValue":"0",
"leagueGrade":"0",
"achieveValue":"0",
"accountType":"1058",
"extendParamJson":"{\"kills\":\"0\",\"deaths\":\"0\",\"assistant\":\"0\"}",
"recordId":"bce6226b40d619a31104376f0ecd5e51"
}
]
# 3. 创角 createChar
Tips:创角日志建议在玩家真正创角时输出记录(一般是取名字点完成之后),否则容易引起创角虚高。用于统计创角指标
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 即创角时间,如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP |
roles | 总角色数 | 1 | 本次创角后玩家的总角色数(RPG游戏会有多角色的情况,当roles=1时表示首次创角) |
accountId | 账号ID | 1 | 账号ID(电魂ID) |
fromCh | 应用包渠道 | 1 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等。电魂SDK(安卓/iOS)获取:String from_ch = DHSDKHelper.query(“dh_channelId”); 微信小游戏SDK获取:console.log(sdk.channel); |
adChannel | cps主渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_channel = DHSDKHelper.query(“dh_mainchannel”); 微信小游戏SDK获取:console.log(sdk.mainChannel); |
adSubchannel | cps次渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_subchannel = DHSDKHelper.query(“dh_secochannel”); 微信小游戏SDK获取:console.log(sdk.secondChannel); |
devUuid | 设备唯一标识 | 1 | SDK算法生成,用以统计设备数,电魂SDK(安卓/iOS)获取:String dev_uuid = DHSDKHelper.query(“dev_uuid”); 微信小游戏SDK获取:console.log(sdk.deviceId);, |
devOs | 设备系统类型 | 1 | 取值范围:{‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’,‘wxminigame’}。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
devImei | IMEI(IDFA) | 1 | |
devBrand | 设备品牌 | 2 | |
devModel | 设备型号 | 2 | |
networkType | 网络类型 | 2 | 2G/3G/4G/5G/wifi等 |
appVer | 应用版本 | 2 | |
pkgName | 应用包名 | 2 | |
roleName | 角色名称 | 2 | base64加密,UTF8编码 |
roleSex | 角色性别 | 2 | 0:男 1:女 2:其他(可能有游戏的角色没有性别之分) |
accountType | 账号类型 | 2 | 账号类型渠道(facebook、google、QQ、微信等),通过账号平台回调的logintype参数获取 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
- 数据示例
[
{
"logType":"createChar",
"sourceName":"dhOds",
"sdkName":"odsDhgs",
"productId":"123456789",
"areaId":"1",
"serverId":"1",
"roleId":"10000",
"recordTime":"2019-04-23 12:12:12",
"timezone":"8",
"userId":"123456",
"userIp":"110.10.10.1",
"roles":"1",
"accountId":"172412345",
"fromCh":"1058",
"adChannel":"10066",
"adSubchannel":"10093",
"devUuid":"ab6c1f1abcfee233ad07aa3361314f50",
"devOs":"android",
"devImei":"863673044723658",
"devBrand":"vivo",
"devModel":"vivo z1i",
"networkType":"LTE",
"appVer":"21",
"pkgName":"com.dc01.vivo",
"roleName":"5L2g5aW9",
"roleSex":"0",
"accountType":"1058",
"recordId":"bce6226b40d619a31104376f0ecd5e51"
}
]
# 4. 登出 logout
Tips:登出日志主要用于记录用户在线时长。如果需要精准记录时长数据,则在0点跨天时对在线玩家做一次强制登出打点(不是强制下线,而是强制输出日志)。时长的结算时间为当前0点,具体日志打点可以分散在一段时间内(比如0-1点之间分散),打点之后单次时长需要重新累计(如在0点强制打点时,用户在0点0分12秒有一次真实登出,则输出一条真实登出日志,在线时长为12秒)。
- 示例(未列出所有字段,只是说明打点方法):
[
{
"logType":"logout",
"roleId:"10000",
"recordTime":"2019-04-23 00:00:00",
"onlineDurt":"7200",
"onlineDurtAll":"22000",
"ifForceLog":"1" --1表示强制打点日志
},
{
"logType":"logout",
"roleId:"10000",
"recordTime":"2019-04-23 00:00:12",
"onlineDurt":"12",
"onlineDurtAll":"22012",
"ifForceLog":"0"
}
]
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 即登出时间,如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
onlineDurt | 本次登录在线时长 | 1 | 单位:秒 |
onlineDurtAll | 累计在线时长 | 1 | 算上本次,单位:秒 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP |
roleLevel | 玩家角色等级 | 1 | 此处等级积分、经验等需要转换成等级 |
accountId | 账号ID | 1 | 账号ID(电魂ID),SDK获取方法:DHSDKHelper.query(“accountid”); |
fromCh | 应用包渠道 | 1 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等。电魂SDK(安卓/iOS)获取:String from_ch = DHSDKHelper.query(“dh_channelId”); 微信小游戏SDK获取:console.log(sdk.channel); |
adChannel | cps主渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_channel = DHSDKHelper.query(“dh_mainchannel”); 微信小游戏SDK获取:console.log(sdk.mainChannel); |
adSubchannel | cps次渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_subchannel = DHSDKHelper.query(“dh_secochannel”); 微信小游戏SDK获取:console.log(sdk.secondChannel); |
devUuid | 设备唯一标识 | 1 | SDK算法生成,用以统计设备数,电魂SDK(安卓/iOS)获取:String dev_uuid = DHSDKHelper.query(“dev_uuid”); 微信小游戏SDK获取:console.log(sdk.deviceId);, |
devOs | 设备系统类型 | 1 | 取值范围:{‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’,‘wxminigame’}。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
devImei | IMEI(IDFA) | 1 | |
devBrand | 设备品牌 | 2 | |
devModel | 设备型号 | 2 | |
networkType | 网络类型 | 2 | 2G/3G/4G/5G/wifi等 |
appVer | 应用版本 | 2 | |
pkgName | 应用包名 | 2 | |
roleName | 角色名称 | 2 | base64加密,UTF8编码 |
accountType | 账号类型 | 2 | 账号类型渠道(facebook、google、QQ、微信等),通过账号平台回调的logintype参数获取 |
ifForceLog | 是否强制打点 | 2 | 0:正常登出日志 1:服务器强制打点登出日志 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
- 数据示例
[
{
"logType":"logout",
"sourceName":"dhOds",
"sdkName":"odsDhgs",
"productId":"123456789",
"areaId":"1",
"serverId":"1",
"roleId":"10000",
"recordTime":"2019-04-23 12:12:12",
"timezone":"8",
"onlineDurt":"12",
"onlineDurtAll":"122",
"userId":"123456",
"userIp":"110.10.10.1",
"roleLevel":"1",
"accountId":"172412345",
"fromCh":"1058",
"adChannel":"10066",
"adSubchannel":"10093",
"devUuid":"ab6c1f1abcfee233ad07aa3361314f50",
"devOs":"android",
"devImei":"863673044723658",
"devBrand":"vivo",
"devModel":"vivo z1i",
"networkType":"LTE",
"appVer":"21",
"pkgName":"com.dc01.vivo",
"roleName":"5L2g5aW9",
"accountType":"LoginType_Common",
"ifForceLog":"0",
"recordId":"bce6226b40d619a31104376f0ecd5e51"
}
]
# 5. 充值 pay
Tips:充值日志记录用现实货币购买/兑换游戏内物品/服务的行为,并且只记录充值成功的记录,重试、失败等错误记录请不要输出到这里,会影响统计。充值档位是配置充值包的id,方便统计充值分档。另外建议同一游戏内仅使用一种现实货币单位,方便统计和展示
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 即充值时间,如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP |
beforeGmoney | 操作前游戏币余额 | 1 | 指的是现实货币直接兑换的游戏主货币 |
payGmoney | 本次增加的游戏币 | 1 | 指的是现实货币直接兑换的游戏主货币,不含赠送的 |
payAmount | 现实货币金额 | 1 | 用户实际支付的金额,数值一般按标准货币单位提供:【人民币:元,港元:港元,新台币:元,日元:日元,韩元:韩元,泰铢:铢,印尼盾:卢比,欧元:欧元,美元:美分,英镑:英镑】 ==若数值不是标准单位(元级别),需要在currencyUnit中填写对应的转换比例,参考下sdk中的设置关系== |
currencyType | 现实货币类型 | 1 | 现实货币类型(美元、美分、人民币,一般不在同一产品中使用多种货币,具体值要参考ISO标准中的货币单位缩写) 参考:ISO4217标准 (opens new window) |
currencyUnit | 兑换比例 | 1 | 与标准单位的兑换比例,payAmount/currencyUnit为标准货币单位,如pay_amount是600分,则currency_unit=100,600/100=6元;若pay_amount是6元,则currency_unit=1,6/1=6元 |
freeAmt | 赠送游戏主货币金额 | 1 | 类似月卡这种按日返的,则填返还总数额,没有则填0 |
orderId | 订单编号 | 1 | 唯一确定订单标志,注意不要出现重复订单记录,只需要输出成功的记录,注意和电魂充值平台的订单号保持一致。 |
isFirstpay | 是否首充 | 1 | 0:否 1:是),游戏首充,多个角色的充值不重复记,即统计对象是user_id |
itemId | 充值产品 | 1 | 即充值档位(也可以是游戏道具ID) |
roleLevel | 玩家角色等级 | 1 | 充值时的等级,此处等级积分、经验等需要转换成等级,用于统计付费点 |
accountId | 账号ID | 1 | 账号ID(电魂ID),SDK获取方法:DHSDKHelper.query(“accountid”); |
fromCh | 应用包渠道 | 1 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等。电魂SDK(安卓/iOS)获取:String from_ch = DHSDKHelper.query(“dh_channelId”); 微信小游戏SDK获取:console.log(sdk.channel); |
adChannel | cps主渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_channel = DHSDKHelper.query(“dh_mainchannel”); 微信小游戏SDK获取:console.log(sdk.mainChannel); |
adSubchannel | cps次渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_subchannel = DHSDKHelper.query(“dh_secochannel”); 微信小游戏SDK获取:console.log(sdk.secondChannel); |
devUuid | 设备唯一标识 | 1 | SDK算法生成,用以统计设备数,电魂SDK(安卓/iOS)获取:String dev_uuid = DHSDKHelper.query(“dev_uuid”); 微信小游戏SDK获取:console.log(sdk.deviceId);, |
devOs | 设备系统类型 | 1 | 取值范围:{‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’,‘wxminigame’}。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
isTestorder | 是否测试订单 | 1 | 1:是, 0:否 。此字段一定要传值,OSS统计会过滤测试订单。该标记可以参考支付回调的参数:sandbox 。支付回调文档 |
devImei | IMEI(IDFA) | 1 | |
devBrand | 设备品牌 | 2 | |
devModel | 设备型号 | 2 | |
networkType | 网络类型 | 2 | 2G/3G/4G/5G/wifi等 |
appVer | 应用版本 | 2 | |
pkgName | 应用包名 | 2 | |
vipLevel | 充值时vip等级 | 2 | 用于统计付费点 |
onlineDurtAll | 充值时累计游戏时长(秒) | 2 | 统计对象是roleId,用于统计付费点 |
accountType | 账号类型 | 2 | 账号类型渠道(facebook、google、QQ、微信等),通过账号平台回调的logintype参数获取 |
payPoint1 | 预留付费点1 | 2 | 用于记录游戏想要记录的任意付费点信息,如指定货币的剩余 |
payPoint2 | 预留付费点2 | 2 | 用于记录游戏想要记录的任意付费点信息,如指定货币的剩余 |
payPoint3 | 预留付费点3 | 2 | 用于记录游戏想要记录的任意付费点信息,如指定货币的剩余 |
payMode | 支付方式标识 | 2 | 支付宝、微信等 |
payModeName | 支付方式名称 | 2 | base64格式,支付宝、微信等具体名称,目前仅适配游动项目 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
- 数据示例
[
{
"logType":"pay",
"sourceName":"dhOds",
"sdkName":"odsDhgs",
"productId":"123456789",
"areaId":"1",
"serverId":"1",
"roleId":"10000",
"recordTime":"2019-04-23 12:12:12",
"timezone":"8",
"userId":"123456",
"userIp":"110.10.10.1",
"beforeGmoney":"0",
"payGmoney":"30",
"payAmount":"600",
"currencyType":"CNY",
"currencyUnit":"100",
"freeAmt":"0",
"orderId":"19042864096259537721",
"isFirstpay":"1",
"itemId":"com.dianhun.xxxx.6rmb",
"roleLevel":"1",
"accountId":"172412345",
"fromCh":"1058",
"adChannel":"10066",
"adSubchannel":"10093",
"devUuid":"ab6c1f1abcfee233ad07aa3361314f50",
"devOs":"android",
"devImei":"863673044723658",
"devBrand":"vivo",
"devModel":"vivo z1i",
"networkType":"LTE",
"appVer":"21",
"pkgName":"com.dc01.vivo",
"vipLevel":"0",
"onlineDurtAll":"323",
"accountType":"1058",
"isTestorder":"0",
"recordId":"bce6226b40d619a31104376f0ecd5e51"
}
]
# >> 二级日志
# 1. 主货币变更 gmoney
Tips:本日志只记录==游戏主货币==的变更记录,其他货币的变更如有需要记录在【货币变更 property日志中】。
主货币定义 用现实货币直接兑换的游戏代币称为游戏主货币,通常只有一种。例如梦三国的主货币是梦三币(非绑定),梦塔防手游的主货币是钻石。
业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 格式如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID,便于将游戏内外数据结合及排查问题 |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
mnyType | 货币类型 | 1 | 建议使用枚举值枚举游戏货币类型,如: 1表示钻石 2表示金币。在本日志中的值是相同的,为方便OSS展示,故保留该字段 |
befGmny | 操作前金额 | 1 | 操作前金额 |
aftGmny | 操作后金额 | 1 | 操作后金额 |
chgeGmny | 财产变化值 | 1 | 负值代表消耗,否则是收入 |
chgeType | 变化类型 | 1 | 0:纯粹在玩家间流转,1:游戏内存量增加,2:游戏内存量减少 |
reasonType | 变更原因 | 1 | -----游戏存量增加(chgeType=1)----- 1:通过充值直接获得(商城内点击档位进行充值购买也算入充值,关键看是否和充值平台发生交互) 16:GM指令获得 -----游戏存量减少(chgeType=2)----- **2:商城购买道具 3:交易场出售道具消耗的佣金 17:GM指令减少 ** -----玩家间流传(chgeType=0)----- 4:交易场出售道具获得 5:交易场购买道具消耗 以上几种为固定枚举值,其他原因类型由游戏自定义,==自定义编号务必从100开始== |
reasonParam | 原因参数 | 2 | 与变更原因相对应(1:充值订单号 3、4、5:交易场交易订单号) |
itemTypeId | 物品类型ID | 2 | 购买物品时记录物品类型ID(对于充值记录(reasonType=1)这里填写档位ID) |
itemNum | 物品数量 | 2 | 购买物品时记录物品数量 |
orderNum | 订单流水号 | 2 | 订单流水号,在货币变更中如果涉及到物品变更,可用于关联物品变更的表tabitem,没有则为0 |
roleLevel | 玩家角色等级 | 2 | |
vipLevel | vip等级 | 2 | |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 2. 商城销售 mall
Tips:商城销售日志中不包含对游戏主货币的购买(就是用现实货币兑换游戏主货币的情况,这部分记录到主货币变更中(gmoney)),而是记录使用游戏主货币(或其他游戏代币)购买商城内道具的情况
- 通用字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 格式如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
mallType | 商城类型 | 1 | 部分游戏除了主商城之外还有PVP商城之类(可以用PVP代币进行购买),具体枚举值自定义(必须数字ID) |
mnyType | 游戏币类型 | 1 | 建议使用枚举值枚举游戏货币类型,如: 1表示钻石 2表示金币 |
itemTypeId | 物品类型ID | 1 | 购买的道具ID(也可能是礼包ID,亦有可能是体力这种非实体道具,均需要有唯一的道具ID) |
befNum | 购买前数量 | 1 | 指购买前道具拥有的数量(如果是直接兑换体力就填体力值) |
buyNum | 购买数量 | 1 | 本次购买道具的数量(如果是直接兑换体力就填体力值) |
costGmny | 消耗货币数量 | 1 | 消耗游戏币数量 |
firstCatalog | 一级栏目 | 2 | 对应商城的一级栏目,参考下方栏目示例 |
secondCatalog | 二级栏目 | 2 | 对应商城的二级栏目,参考下方栏目示例 |
itemClass | 物品分类 | 2 | 预留,道具的大分类ID,按需记录,如装备、武器、坐骑等等 |
roleLevel | 玩家角色等级 | 2 | 玩家角色等级 |
vipLevel | vip等级 | 2 | vip等级 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 3. PVP结算 mapPvp
Tips:建议玩家角色表中存储玩家每种地图累计参与次数,胜负基础信息。另外注意竞技比赛的人机匹配也是属于PVP结算,不要记录到PVE中去了。此外新手引导局亦不计入PVP结算
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 玩家所在大区,若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 在结算时记录 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
mapId | 地图ID | 1 | 人机、对战使用不同的地图ID |
raceId | 比赛ID | 1 | 每场比赛唯一,用于唯一标识一场比赛。建议在开局时使用md5(uuid)的方式生成比赛ID |
result | 比赛结果 | 1 | 0 失败,1 胜利,2 平局 ,3 无效局 |
raceTime | 比赛耗时 | 1 | 单位:秒 |
roleLevel | 玩家等级 | 2 | 玩家等级 |
vipLevel | 玩家vip等级 | 2 | 玩家vip等级 |
heroTypeId | 使用英雄ID | 2 | 可选,根据实际情况如果没有可以不需要 |
cmp | 所属阵营 | 2 | 可选,玩家属于哪方阵营,例如吴、魏 |
title | 获得称号 | 2 | 可选,可使用二进制位数表示各种称号 |
matchType | 开局模式 | 2 | 可选,如匹配模式、房间模式等 |
areaIdMatch | 匹配局所在大区 | 2 | 匹配局所在大区 |
equip | 比赛装备 | 2 | 可选,一般记录推荐装备组合套餐ID,若有多件散件装备可以记录装备ID使用":"分隔 |
score | 比赛评价 | 2 | 可选,一场比赛中获得的积分对应评价,如:S/A/B/C/D |
raceMny | 比赛金钱 | 2 | 可选,一场比赛累计获得金钱数 |
killHero | 击杀英雄数 | 2 | 可选,一场比赛累计杀死对方英雄数 |
ass | 助攻数 | 2 | 可选,一场比赛累计助攻数 |
death | 死亡数 | 2 | 可选,一场比赛累计死亡次数 |
kill | 正补数 | 2 | 可选,一场比赛累计正补兵次数 |
imkill | 反补数 | 2 | 可选,一场比赛累计反补兵次数 |
leagueGrade | 段位等级 | 2 | 联赛(天梯)段位等级,填1,2,3,4...这样的段位等级 |
fightValueDelta | 变化战力值 | 2 | 本次变化战力值 |
fightValue | 结算后战力值 | 2 | 用于统计战力分布 |
ctsWins | 连胜数 | 2 | 截止当前连胜数(若本局输掉或平局则变成0,胜利则在原来基础上+1,无效局不统计) |
difficulty | 地图难度 | 2 | 当地图设计有难度分层时,请记录难度值(如简单/中等/困难...) |
heroImage | 英雄形象 | 2 | 使用的英雄形象ID(皮肤) |
heroIdList | 英雄列表 | 2 | 若使用多个英雄,在此枚举,‘|’隔开,如'U001|U002|U003'。单个英雄的情况可以不填。 |
heroImageList | 英雄形象列表 | 2 | 若使用多个英雄形象,在此枚举,与heroIdList的位置顺序相对应 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 4. PVE结算 mapPve
Tips:新手引导局亦不计入PVE结算
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 在结算时记录 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
mapId | 地图ID | 1 | 关卡ID,有些游戏还有章节ID,建议合并输出,如:1-1,3-10 |
raceId | 单局比赛ID | 1 | 每场比赛唯一,用于唯一标识一场比赛。建议在开局时使用md5(uuid)的方式生成比赛ID |
result | 比赛结果 | 1 | 0失败 1 胜利 |
raceTime | 比赛耗时 | 1 | 单位:秒 |
matchType | 开局模式 | 2 | 可选,有些游戏关卡可以组队打,或者使用小助手来进行扫荡,可以用该字段来标识 |
isWipeout | 是否扫荡 | 2 | 0否,1扫荡一次,N表示扫荡N次(N>=2) |
score | 比赛评价 | 2 | 可选,一场比赛中获得的积分对应评价,如:S/A/B/C/D |
roleLevel | 玩家等级 | 2 | 玩家等级 |
vipLevel | 玩家vip等级 | 2 | 玩家vip等级 |
heroTypeId | 使用英雄ID | 2 | 可选,根据实际情况,如果没有可以不需要 |
difficulty | 地图难度 | 2 | 可选,当地图设计有难度分层时,请记录难度值(如简单/中等/困难...) |
heroImage | 英雄形象 | 2 | 可选,使用的英雄形象ID(皮肤) |
heroIdList | 英雄列表 | 2 | 若使用多个英雄,在此枚举,‘|’隔开,如'U001|U002|U003'。单个英雄的情况可以不填。 |
heroImageList | 英雄形象列表 | 2 | 若使用多个英雄形象,在此枚举,与heroIdList的位置顺序相对应 |
mapLevel | 通关层数 | 2 | 可选,当同一关卡中设计有不同层数时,可以记录在该参数 |
fightValuePve | 关卡战力 | 2 | 可选,体现玩家PVE战力的数值,部分游戏关卡和竞技功能共用一套战力,部分游戏PVE战力不带入PVP,故关卡结算单独设计此字段以作兼容 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 5. 新手引导 guidestep
Tips:用于统计玩家在新手引导过程中的流失节点,便于游戏优化
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
stepId | 步骤ID | 1 | 当表示新手引导任务时,ID建议顺序编号 |
stepState | 操作类型 | 1 | 步骤状态,1:进行中 2:已完成(不含跳过) 3:跳过 4(5,6...):游戏自定义 |
stepType | 步骤类型 | 2 | 枚举值如pvp、pve等(具体根据实际情况而定) |
roleLevel | 玩家等级 | 2 | 玩家等级 |
vipLevel | 玩家vip等级 | 2 | 玩家vip等级 |
onlineDurtAll | 历史累计游戏时长:秒 | 2 | 这里的时长指的是截止当前玩家的总游戏时长。OSS会根据这个总时长计算每一步的消耗/停留时长 |
stepParam | 步骤参数 | 2 | 预留统计维度,反应玩家参与引导时的重要统计维度,比如使用的英雄ID |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 6. 实时用户角色信息 charInfo
字段名称 | 字段说明 | 优先级 | 是否是查询键 | 是否是去重键 | 描述 |
---|---|---|---|---|---|
recordTime | 记录时间 | 1 | 否 | 否 | 走上报kafka时为上报方本地时间, http上报时服务器端自动获取 格式如2024-09-25 01:00:00 |
recordTs | 记录时间戳 | 1 | 否 | 否 | 事件发生时的时间, 16位微秒时间戳, 如 1727251866626000 |
timezone | 时区 | 1 | 否 | 否 | 以UTC时间为基准,如北京时间为UTC 8,此处填8,泰国是UTC 7,此处填7。一般是取游戏服务器的时区 |
areaId | 大区id | 1 | 是 | 是 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 服id | 1 | 是 | 是 | 游戏服ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到areaId去,不利于后续扩展 |
accountId | 账号id | 1 | 是 | 是 | 平台侧的账号id(电魂id) |
userId | 用户id | 1 | 是 | 是 | 游戏内用于唯一标识一个玩家的ID,一个userId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
roleId | 角色id | 1 | 是 | 是 | 整个游戏内唯一 |
event | 数据来源 | 1 | 否 | 是 | 数据上报时的数据触发标签, 如道具系统触发, pvp系统触发, pve系统触发, 尽量使用英文单词命名,如’levelUp’,‘joinCorp’ |
fromCh | 渠道id | 2 | 是 | 否 | 电魂中台设置的渠道数字id, 如果有上报, 则读取程序将改字段合并到属性中去 |
userIp | 上报来源IP | 2 | 否 | 否 | 用户ip地址 |
extendParamJson | JSON键值对 | 1 | 否 | 否 | 项目根据实际需要上报的用户信息参数。但需要上报 json格式的字符串 ,如"{\“role_name\”:\“5oiR5piv5aSn6a2U546L\”,\“level\”:\“3\”,\“assistant\”:\“0\”}",key命名尽量简短易懂 数据解析时会将该部分内容进行解析, 但是只解析第一层key, value, 再往下层级当成字符串来存储 |
# >> 三级日志
# 1. 货币变更 property
Tips:该日志==不包含主货币==的变更记录(主货币是gmoney日志)。游戏货币变更必须与道具物品变更区分开来,因为物品变更表通常比较大,会导致后期存储和处理货币信息的时候比较困难。同时建议游戏角色信息记录每玩家累计各种货币总量。
另外注意货币增加一般不涉及物品,故itemTypeId和itemNum可不填。而当货币消耗涉及实体道具时,需要填写物品类型ID和物品数量。若货币消耗不涉及实体道具,建议使用虚拟的物品类型ID替代(与实体道具ID不重复即可,可以直接填reasonType),如购买体力点数、购买战场次数等,此时itemNum填对应数量。订单号只有在涉及实体物品时需要填写,全局唯一即可,和tabitem的订单号保持一致。change_type字段,一般只有玩家之间交易才会填0,其余情况根据实际货币的增减来填即可。
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 格式如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID,便于将游戏内外数据结合及排查问题 |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
mnyType | 货币类型 | 1 | 建议使用枚举值枚举游戏货币类型,如: 1表示钻石 2表示金币 |
befGmny | 操作前金额 | 1 | 操作前金额 |
aftGmny | 操作后金额 | 1 | 操作后金额 |
chgeGmny | 财产变化值 | 1 | 负值代表消耗,否则是收入 |
chgeType | 变化类型 | 1 | 0:纯粹在玩家间流转,1:游戏内存量增加,2:游戏内存量减少 |
reasonType | 变更原因 | 1 | 1:通过充值直接获得 **2:商城购买消耗 3:交易场出售道具消耗佣金 ** 4:交易场出售道具获得 5:交易场购买道具消耗 6:商城购买获得 7:PVP结算获得 8:PVE结算获得 9:任务奖励获得 10:被赠送获得 11:赠送消耗 16:GM指令获得 17:GM指令减少 其他未列举出的请游戏自定义,==自定义编号务必从100开始== |
reasonParam | 原因参数 | 2 | 与变更原因相对应(具体定义: 1:充值订单号 2、6:商城类型 3、4、5:交易订单号 7:pvpRaceId 8:pve_raceId 9:taskId 10:赠送者accountId 11:被赠送者accountId) 其他未列举出的请游戏根据具体的reasonType自定义,自定义编号务必从100开始 |
itemTypeId | 物品类型ID | 2 | 购买物品时记录物品类型ID |
itemNum | 物品数量 | 2 | 购买物品时记录物品数量 |
orderNum | 订单流水号 | 2 | 订单流水号,在货币变更中如果涉及到物品变更,可用于关联物品变更的表tabitem,没有则为0 |
roleLevel | 玩家角色等级 | 2 | |
vipLevel | vip等级 | 2 | |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 2. 物品变更 item
!!国内项目必接!! Tips:==物品从游戏世界消失和从物品世界创造出来大分类区分:0只纯粹从玩家间流转,1增加,2减少。PVP单局内的物品变化不要记录**
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色ID | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 格式如:2016-07-01 00:00:00 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
itemTypeId | 物品类型ID | 1 | |
befNum | 变更前数量 | 1 | |
aftNum | 变更后数量 | 1 | |
chgeNum | 变更数量 | 1 | 负值代表减少,否则是增加 |
chgeType | 变化类型 | 1 | 0:纯粹在玩家间流转,不消失,1:游戏内存量增加,2:游戏内存量减少),一般只有玩家之间交易、拍卖行上架等才会填0,其余情况根据实际物品的增减来填 |
reasonType | 变更原因 | 1 | 1:通过充值直接获得 **2:商城购买消耗 3:交易场出售道具消耗佣金 ** 4:交易场出售道具获得 5:交易场购买道具消耗 6:商城购买获得 7:PVP结算获得 8:PVE结算获得 9:任务奖励获得 10:被赠送获得 11:赠送消耗 12:分解消耗 13:分解获得 14:合成消耗 15:合成获得 16:GM指令获得 17:GM指令减少 其他未列举出的请游戏自定义,==自定义编号务必从100开始== |
reasonParam | 原因参数 | 2 | 与变更原因相对应(具体定义: 1:充值订单号 2、6:商城类型 3、4、5:交易订单号 7:pvpRaceId 8:pve_raceId 9:taskId 10:赠送者accountId 11:被赠送者accountId) 其他未列举出的请游戏根据具体的reasonType自定义,自定义编号务必从100开始 |
orderNum | 订单流水号 | 2 | 在物品变更中如果涉及到货币变更,可用于关联物品变更的表tabproperty,没有则为0 |
itemClass | 物品分类 | 2 | 预留,按需记录,如装备、武器、坐骑等等 |
roleLevel | 玩家角色等级 | 2 | 玩家角色等级 |
vipLevel | vip等级 | 2 | vip等级 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 3. 游戏任务 task
Tips:不包含新手引导任务
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
taskType | 任务类型 | 1 | 枚举值自定义 |
taskId | 任务ID | 1 | 当表示新手引导任务时,ID建议顺序编号 |
optType | 操作类型 | 1 | 1:接受任务 2:完成任务 3:游戏自定义 |
roleLevel | 玩家等级 | 2 | 玩家等级 |
vipLevel | 玩家vip等级 | 2 | 玩家vip等级 |
activityId | 活动ID | 2 | 当任务对应相应活动时,可以在此记录活动ID |
onlineDurtAll | 历史累计游戏时长:秒 | 2 | 这里的时长指的是截止当前玩家的总游戏时长。OSS会根据这个总时长计算每一步的消耗/停留时长 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 5. 按钮点击 button
Tips:只需要监控几个重要按钮的点击行为即可,否则会导致数据量过大
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间(最近一次变动时间) |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
buttonId | 按钮ID | 1 | 按钮ID,由游戏自行设计和维护ID系统(保证每个按钮唯一) |
optValue | 操作值 | 1 | 按钮操作值,有些按钮有不同的操作状态,如点一下是匹配,再点一下是取消匹配。(按钮ID和按钮操作值唯一确定一次按钮操作) |
buttonType | 按钮类型 | 2 | 按钮分类 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 6. 玩家分群变动 userGroup
- 日志用途
专门用于记录游戏内**==指定用户群的分群变动==**日志,这部分用户通常是游戏比较关注的核心用户,如VIP、SVIP等(叫法可能各不一样)。OSS会跟根据日志更新每个玩家所属的分群,并统计其活跃、充值、留存等核心指标。
- 埋点方式
三种情况需要打点:玩家对指定分群的加入、退出和分群等级(或等级进度)变动行为**。**
特别说明:当玩家加入分群时,加入和分群等级(或等级进度)变动行为会各同时记一条记录。
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 服务器ID | 1 | 游戏服务器ID,游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 游戏记录的日志数据,格式:yyyy-mm-dd hh:mm:ss |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等 |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
optType | 日志操作类型 | 1 | ---------------类型定义开始(格式,ID:说明)-------------- 1:加入分群 2:退出分群 3:分群等级(或等级进度)变动 ---------------类型定义结束-------------- |
groupType | 分群类型 | 1 | ---------------类型定义开始(格式,ID:说明)-------------- 1:VIP 2:SVIP 3~9:预留 10~999:由游戏侧自定义 ---------------类型定义结束-------------- 特别说明:针对有赛季等周期性重置的情况,可以按照**==ID_<周期ID>==**的方式命名,如Genesis的GamePass第一赛季可以定义为10_1,第二赛季为10_2...类推 |
groupId | 分群ID | 1 | 对应的分群唯一ID,若没有,填默认值1 |
groupLevel | 分群等级 | 1 | 对应的分群等级,若没有等级概念,填默认值1 |
groupLevelScore | 分群等级进度 | 2 | 对应的分群等级进度,如有些VIP系统每升一级都需要有对应的充值金额,此时可以填写对应的充值金额进度(总进度),不涉及可不填 |
indate | 有效期 | 2 | 分群有效期,格式:YYYY-MM-DD HH:MM:SS,若永久有效,则填2999-12-31 23:59:59 |
payAmount | 消费金额 | 2 | 本次消耗的现实货币额度,与currencyType配合使用,不涉及可不填 |
currencyType | 货币类型 | 2 | 货币类型缩写,如CNY、USD、KRW,与payAmount配合使用,不涉及可不填 |
roleLevel | 玩家角色等级 | 2 | 玩家角色等级,可选项,方便统计玩家是在什么等级加入分群 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 7. 玩家互动行为 userInteraction
- 日志用途
用于记录玩家之间重要的互动行为,如:招募、关注、好友等。实际开发中按照运营统计需求按需埋点即可。
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 服务器ID | 1 | 游戏服务器ID,游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 游戏记录的日志数据,格式:yyyy-mm-dd hh:mm:ss |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 操作方用户ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 操作方账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等 |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
optType | 行为类型 | 1 | ---------------类型定义开始(格式,ID:说明)-------------- 1:招募好友 2:点击招募链接 3:添加好友 4:删除好友 5:关注好友 6:取消关注 7~99:预留 100~999:由游戏侧自定义 ---------------类型定义结束-------------- |
optAccountId | 目标账号ID | 1 | 当optType=2时,可不填写,其他情况需填写 |
optRoleId | 目标角色ID | 2 | 互动行为指向角色时填写,如添加角色为好友 |
tsId | 事务ID | 2 | 事务唯一ID,用于追踪招募等有延迟的互动事件,通常会包含在链接内 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 8. 匹配详情 matchDetail
- 日志用途
用于记录玩家PVP、PVE匹配成功局的详情信息、匹配耗时等。
- 埋点方式
仅输出匹配成功日志。
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 服务器ID | 1 | 游戏服务器ID,游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 游戏记录的日志数据,格式:yyyy-mm-dd hh:mm:ss |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 操作方用户ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 操作方账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等 |
devOs | 设备系统类型 | 1 | 取值范围:{'android','ios','windows','ps','xbox','switch'} |
matchResult | 匹配结果 | 1 | 枚举值 1:匹配成功 0:匹配失败 |
matchSession | 匹配成功session | 1 | 唯一标识一次匹配 |
mapId | 地图ID | 1 | 与mapPvp、mapPve中的mapId保持一致 |
matchTime | 匹配耗时 | 1 | 从点击开始匹配到匹配成功的耗时,单位:秒 |
teamId | 队伍ID | 1 | 用于区分组队匹配时不同的队伍,单人也算一个队伍,如5V5匹配时,其中有一方是3+1+1的队伍,即有三个队伍ID |
matchType | 开局模式 | 2 | 可选,如匹配模式、房间模式等 |
cmp | 所属阵营 | 2 | 单局内阵营 |
fightValue | 战力值 | 2 | 游戏==核心玩法水平衡量值== |
leagueGrade | 段位等级 | 2 | 联赛(或天梯)段位(或军衔)等级,填1,2,3,4...这样的段位等级==核心玩法水平衡量值== |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 9. 抽卡产出 draw
Tips:需要对抽卡系统进行专题分析时可以打点该日志
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:('android','ios','windows','ps','xbox','switch') |
drawType | 抽卡类型 | 1 | 枚举值自定义,示例: 1:金币单抽 2:金币10连抽 3:免费金币单抽 4:免费金币10连抽 5:钻石单抽 6:钻石10连抽 |
mnyType | 货币类型 | 1 | 抽卡使用的游戏币类型,枚举值请与货币变更日志保持一致(免费抽卡记为'free') |
costGmny | 消耗货币 | 1 | 消耗游戏币数量(免费抽卡记0) |
drawOutput | 抽卡产出 | 1 | 抽卡获得的卡牌(或其他道具)ID及数量,使用json格式,相同道具合并。格式如:{"item001":1,"item002":1,"item003":1,"item004":2} |
drawCnt | 抽卡次数 | 1 | 本次操作实际发生的抽卡次数,如10连抽就记10,单抽就记录1 |
param1 | 预留参数 | 2 | 其他需要记录的重要参数 |
roleLevel | 玩家等级 | 2 | 玩家快照信息,玩家等级 |
vipLevel | 玩家vip等级 | 2 | 玩家快照信息,玩家vip等级 |
pondId | 卡池(道具池)ID | 2 | 部分游戏有变化的卡池(卡池内道具组合或概率会调整),可以记录在该参数,和抽卡类型结合使用 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 10. 卡牌养成 cardDevelop
Tips:需要对卡牌培养系统进行专题分析时可以打点该日志
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服务器ID | 1 | 游戏服务器ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到serverId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC+8,此处填8,泰国是UTC+7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个accountId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 比如电魂官网、应用宝、华为、小米等, |
devOs | 设备系统类型 | 1 | 取值范围:('android','ios','windows','ps','xbox','switch') |
optType | 操作类型 | 1 | 卡牌操作类型,自定义。示例: 1:'升级' 2:'升星' 3:'觉醒' |
cardId | 卡牌ID | 1 | 即卡牌的道具ID,通常卡牌升级、升星、觉醒等操作不会引起卡牌ID变化 |
cardQuality | 操作后卡牌品质 | 1 | 卡牌快照信息,操作后的卡牌品质,可能与optValueAf重复,方便统计示例: 1:'绿色' 2:'蓝色' 3:'紫色' 4:'橙色' 5:'暗金色 |
cardLevel | 操作后卡牌等级 | 1 | 卡牌快照信息,操作后的卡牌等级,可能与optValueAf重复,方便统计 |
cardStar | 操作后卡牌星数 | 1 | 卡牌快照信息,操作后的卡牌星数,可能与optValueAf重复,方便统计 |
optValueBf | 操作前属性 | 1 | 值和操作类型相关,如升级操作则填升级前卡牌等级 |
optValueAf | 操作后属性 | 1 | 值和操作类型相关,如升级操作则填升级后卡牌等级 |
optCostItems | 操作消耗道具 | 2 | 本次操作消耗的道具ID及其数量,使用json格式,相同道具合并,格式如{"item001":1,"item002":1,"item003":1,"item004":2} |
optGmnyType | 操作消耗货币类型 | 2 | 本次操作使用的游戏币类型,枚举值请与货币变更日志保持一致(未使用则填空) |
optCostGmny | 操作消耗货币 | 2 | 本次操作消耗的游戏币数量(未使用则填空) |
param1 | 预留参数 | 2 | 其他需要记录的重要参数 |
roleLevel | 玩家等级 | 2 | 玩家快照信息,玩家等级 |
vipLevel | 玩家vip等级 | 2 | 玩家快照信息,玩家vip等级 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 11. 聊天 chat
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服ID | 1 | 游戏服ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到areaId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC 8,此处填8,泰国是UTC 7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个userId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等。电魂SDK(安卓/iOS)获取:String from_ch = DHSDKHelper.query(“dh_channelId”); 微信小游戏SDK获取:console.log(sdk.channel); |
devOs | 设备系统类型 | 1 | 取值范围:(‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’)。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
sceneId | 场景ID | 1 | 枚举值需自定义,比如 1:城镇 2:房间等 |
chatChannel | 聊天频道 | 1 | 枚举值需自定义,比如 1:私聊 2:队伍频道 3:世界频道等 |
chatSession | 聊天会话 | 1 | 区分玩家是否在一个聊天环境中,例如 队伍ID、私聊ID |
chatContent | 聊天内容 | 1 | 聊天内容必须base64处理 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 12. 自定义 custom
Tips:以上日志格式未覆盖到的可以根据此日志格式进行自定义上报
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 游戏服ID | 1 | 游戏服ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到areaId去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 记录时间 |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC 8,此处填8,泰国是UTC 7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个userId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
fromCh | 应用包渠道 | 1 | 填渠道编号,比如1058(电魂官网)、1029(小米)、1013(电魂IOS)等。电魂SDK(安卓/iOS)获取:String from_ch = DHSDKHelper.query(“dh_channelId”); 微信小游戏SDK获取:console.log(sdk.channel); |
adChannel | cps主渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_channel = DHSDKHelper.query(“dh_mainchannel”); 微信小游戏SDK获取:console.log(sdk.mainChannel); |
adSubchannel | cps次渠道 | 1 | 玩家广告来源渠道,直接调用电魂SDK获取,非cps包填0。电魂SDK(安卓/iOS)获取:String ad_subchannel = DHSDKHelper.query(“dh_secochannel”); 微信小游戏SDK获取:console.log(sdk.secondChannel); |
devOs | 设备系统类型 | 1 | 取值范围:(‘android’,‘ios’,‘windows’,‘ps’,‘xbox’,‘switch’)。电魂SDK(安卓/iOS)获取:String dev_os = DHSDKHelper.query(“dev_os”); 微信小游戏SDK获取:console.log(sdk.deviceOS); |
eventType | 自定义事件类型 | 1 | 尽量使用英文单词命名,如’levelUp’,‘joinCorp’ |
optObj | 事件操作对象 | 2 | 如果是按钮点击事件,则对应按钮ID |
optRes | 事件操作结果 | 2 | 如果是按钮点击事件,则返回按钮点击的结果,比如是调整到另外一个页面,就填写结果页ID |
optReason | 事件操作原因 | 2 | 事件原因code,不要直接传中文 |
statMode | 数据统计方式 | 2 | 1:按event opt_obj opt_reason聚合后统计人数次数 2:按event opt_obj opt_reason取每个用户最新记录,然后统计人数次数 |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |
# 13. 排行榜 rankList
- 日志用途
专门用于记录游戏内各种榜单列表,方便头部玩家的维护。
为降低数据存储和上报压力,只上报榜单内top20玩家。
- 埋点方式
两种情况需要打点:定时记录(每天凌晨输出一次当日榜单)、榜单玩家排名发生变动。
- 业务字段
字段名称 | 字段注释 | 优先级 | 描述 |
---|---|---|---|
areaId | 大区ID | 1 | 若游戏无大区概念,则填1作为初始大区编号 |
serverId | 服ID | 1 | 游戏服ID,游戏服ID,大区的下一级,若游戏无服概念,则填1作为初始服编号,频繁开服(滚服)游戏,滚服ID请记录在serverId,不要记录到areaId去,不利于后续扩展,频繁开服(滚服)游戏,滚服ID请记录在sid,不要记录到zid去,不利于后续扩展 |
roleId | 角色id | 1 | 整个游戏内唯一 |
recordTime | 记录时间 | 1 | 游戏记录的日志数据,格式:yyyy-mm-dd hh:mm:ss |
timezone | 时区 | 1 | 以UTC时间为基准,如北京时间为UTC 8,此处填8,泰国是UTC 7,此处填7。一般是取游戏服务器的时区 |
userId | 用户唯一ID | 1 | 游戏内用于唯一标识一个玩家的ID,一个userId可能对应多个roleId(角色ID),若游戏无此概念,此处可以填accountId相同值 |
userIp | 用户IP | 1 | 玩家设备IP,海外分国家统计需要用到 |
accountId | 账号ID | 1 | 电魂ID |
roleLevel | 玩家角色等级 | 1 | 此处等级积分、经验等需要转换成等级 |
rankType | 排行榜类别 | 1 | 比如 人才榜、商战、战力榜 |
rankFrq | 榜单频率 | 1 | realtime 实时、minute 分钟榜、hour 小时榜、day 日榜、week 周榜、month 月榜 |
rankNum | 榜单排名 | 1 | 玩家在本次输出的榜单中的排名 |
rankValue | 榜单值 | 1 | 榜单排名对应的数值,如果涉及多个值,只记录核心数值,其他部分记录在扩展字段中 |
vipLevel | 玩家vip等级 | 2 | |
extendParamJson | 扩展参数 | 2 | 项目根据实际需要自定义规范中未定义到的其他参数。但需要上报json格式的字符串,如"{\“kills\”:\“0\”,\“deaths\”:\“0\”,\“assistant\”:\“0\”}",key命名尽量简短易懂,自定义参数最多20个 |