资产差异日志
- 资产分为可兑现和不可兑现,以分别发送到指定类别。 例如,Tiny Farm有两个类别;可现金类型(铃铛)和不可现金类型(金币)
- 从游戏服务器收集资产(现金、游戏货币等)差异日志,旨在分析每个用户的游戏模式,以提供更好的服务。
类别¶
常见服务器 172.19.1.10 | noncash_var_log, cash_var_log |
---|---|
测试服务器 222.112.182.65 | test_noncash_var_log, test_cash_var_log |
日志规范¶
Note
蛇形命名的字段,如 server_id
,在最终存储(BigQuery)时会转换为驼峰命名,如 serverId
,而以未指定形式发送的日志,例如 serverid
,不会保存在其列中。
字段名称 | 描述 | 类型 | 必需 |
---|---|---|---|
date | 存储日志的时间,格式:yyyy-mm-dd hhss 例如:2012-01-19 16:24:00 | string | Y |
channel | C2S: HIVE, KAK: Kakao, LIN: LINE, WEI: Weibo | string(3) | Y |
user_id | 从客户端发送的Hub uid(在其他渠道中,指每个渠道上使用的user_id) | bigint | Y |
user_seq | 游戏服务器使用的用户账户的序列号(PK) | bigint | N |
lang | 从客户端发送的语言代码 ISO 639-2(3字节语言代码) 例如:KOR | string(3) | Y |
game | 使用游戏的品牌名称 (例如:derbydays)。 app_id的第三项 例如:com.com2us.littlelegends.kakao.freefull.apple.global.ios.universal → littlelegends | string(50) | Y |
market | 市场信息 "TS": SKT Tstore "OL": KT OllehMarket "OZ": LGU+ OzStore "AP": Apple Appstore "GO": Google Play "SA": Samsung Apps "LE": Com2us Lebi | string(2) | Y |
level | 游戏中的用户等级 | int | Y |
action_id | 与游戏中唯一游戏货币变化相关的用户操作ID 范围:[1–(2^31−1)] API或协议区分游戏中的操作,因此游戏服务器应定义每个操作的ID 一旦定义,不要更改。需要测试 | int | Y |
action_name | 与action_id一对一映射的值。如果action_id不同,则action_name也不同 例如:喂养、收获等。 实际数据是基于action_id堆叠的。 如果更改,元表会自动更新 | string(50) | Y |
item_id | 导致资产变化的物品标识符。如果资产变化操作与物品无关,则将此值设置为0。 范围:[1–(2^31−1)] 当操作与物品相关时需要此参数。每个游戏应定义物品ID 一旦定义,不要更改。需要测试 | int | Y |
item_name | 与item_id一对一映射的值。 除非item_id为0,否则所有值都应有解释。 当item_id为0时输入0 关于item_id的简要说明 | string(50) | Y |
asset_id | 对于可兑现资产/社交媒体积分,将此值设置为1到100,对于不可兑现资产,从101及更高的值开始 一旦定义,不要更改。需要测试 (例如:如果可兑现资产是用户通常在游戏中获得而不是购买的,则从101及更高的数字开始设置) | int | Y |
asset_name | 关于asset_id的简要说明 (例如:铃铛、星星、金球、金币) | string(50) | Y |
amount_prev | 与asset_id相关的资产在资产变化之前的数量 | bigint | Y |
amount_var | 与asset_id相关的资产变化数量。 资产减少:负数,资产增加:正数 | bigint | Y |
amount_curr | 与asset_id相关的资产在资产变化之后的数量。 amount_curr = amount_prev + amount_var | int | Y |
amount_free_prev | 与asset_id相关的免费资产在资产变化之前的数量 (由于日本资金结算法修正而增加) | bigint | Y(于2018年1月18日增加) |
amount_free_var | 与asset_id相关的免费资产变化数量 资产减少:负数,资产增加:正数(由于日本资金结算法修正而增加) | bigint | Y(于2018年1月18日增加) |
amount_free_curr | 与asset_id相关的免费资产在免费资产变化之后的数量 (由于日本资金结算法修正而增加) amount_free_curr = amount_free_prev + amount_free_var | int | Y(于2018年1月18日增加) |
amount_paid_prev | 资产变动前支付的资产金额,相关于 asset_id (因日本资金结算法修正而增加) | bigint | Y (于2018年1月18日增加) |
amount_paid_var | 资产变动相关的支付资产金额 资产减少:负数,资产增加:正数(因日本资金结算法修正而增加) | bigint | Y (于2018年1月18日增加) |
amount_paid_curr | 资产变动后支付的资产金额,相关于 asset_id (因日本资金结算法修正而增加) amount_paid_curr = amount_paid_prev + amount_paid_var | int | Y (于2018年1月18日增加) |
client_ip | 客户端IP。此值从GeoIP提取国家值 | string(32) | Y |
country | 如果未提供client_ip,请直接输入国家代码 例如:KR | string(2) | N |
server_ip | 服务器IP | string(32) | Y |
company | 游戏发行公司,日志的目标: 例如,“C2S”:Com2uS,“GVI”:Com2uS Holdings | string(3) | Y |
server_id | 服务器代码 请参考服务器代码表输入服务器代码(JSON输入代码) | string | Y |
is_emulator | 如果通过PC模拟器(如BlueStacks)连接,返回 1;否则,返回0 对于PC版本,返回2 | tinyint(1) | 不要求,但建议。 |
game_language | 游戏中的语言,使用两个小写字母 例如:ko 参考:标识符政策 | varchar | 不要求,但建议。(于2018年1月18日增加) |
account_id | 服务器中唯一的账户标识符(主键) | bigint | N (于2018年1月18日增加) |
deviceid | HIVE上的设备ID。抽象广告标识符的标识符(Android:AdvertisingID;iOS:IDFA) | bigint | N (于2018年1月18日增加) |
guid | 每个日志生成的唯一键 推荐使用随机格式,如uuid | varchar(64) | N |
real_count | 用户获得的资产实际数量 例如,当用户一次获得十个资产时,只有一个日志保留,但资产的实际数量是十 | int | Y (于2019年9月4日增加) |
记录者类型¶
<?php
$GLOBALS['THRIFT_ROOT'] = '/dev/scribe-php'; // The route is an example. Modify it in accordance with the development environment.
include_once $GLOBALS['THRIFT_ROOT'].'/scribe.php';
include_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';
include_once $GLOBALS['THRIFT_ROOT'].'/transport/TFramedTransport.php';
include_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
…
public function writeCashVarLog(.....params.....) // Function is an example as well. Modify it in accordance with the development environment. (Category, however, should be fixed as ‘cash_var_log’)
{
$msg['category'] = 'cash_var_log';
$msg['message'] = array();
$msg['message']['date'] = date('Y-m-d H:i:s', time());
$msg['message']['channel'] = $channel;
$msg['message']['user_id'] = $uid;
$msg['message']['country'] = $country;
$msg['message']['lang'] = $lang;
$msg['message']['game'] = $game;
$msg['message']['market'] = $market;
$msg['message']['level'] = $level;
$msg['message']['action_id'] = $action_id; // Once you define, change is unavailable.
$msg['message']['action_name'] = $action_name;
$msg['message']['item_id'] = $item_id; // Once you define, change is unavailable.
$msg['message']['item_name'] = $item_name;
$msg['message']['asset_id'] = $asset_id; // Use the value between 1 and 100 for each game.
$msg['message']['asset_name'] = $asset_name;
$msg['message']['amount_prev'] = $amount_prev;
$msg['message']['amount_var'] = $amount_var;
$msg['message']['amount_curr'] = $amount_curr;
$msg['message'] = json_encode($msg['message']);
$entry = new LogEntry($msg);
$messages = array($entry);
//var_dump($messages);
$socket = new TSocket('localhost', 1463, TRUE); // the target host to send logs(fixed port)
$transport = new TFramedTransport($socket);
$protocol = new TBinaryProtocol($transport, FALSE, FALSE);
$scribe_client = new scribeClient($protocol, $protocol);
$transport->open();
$scribe_client->Log($messages);
$transport->close();
}
public function writeNonCashVarLog(.....params.....) // Function is an example as well. Modify it in accordance with the development environment. (Category, however, should be fixed as ‘noncash_var_log’)
{
$msg['category'] = 'noncash_var_log';
$msg['message'] = array();
$msg['message']['date'] = date('Y-m-d H:i:s', time());
$msg['message']['channel'] = $channel;
$msg['message']['user_id'] = $uid;
$msg['message']['country'] = $country;
$msg['message']['lang'] = $lang;
$msg['message']['game'] = $game;
$msg['message']['market'] = $market;
$msg['message']['level'] = $level;
$msg['message']['action_id'] = $action_id; // Once you define, change is unavailable.
$msg['message']['action_name'] = $action_name;
$msg['message']['item_id'] = $item_id; // Once you define, change is unavailable.
$msg['message']['item_name'] = $item_name;
$msg['message']['asset_id'] = $asset_id; // Use the value between 1 and 100 for each game.
$msg['message']['asset_name'] = $asset_name;
$msg['message']['amount_prev'] = $amount_prev;
$msg['message']['amount_var'] = $amount_var;
$msg['message']['amount_curr'] = $amount_curr;
$msg['message'] = json_encode($msg['message']);
$entry = new LogEntry($msg);
$messages = array($entry);
//var_dump($messages);
$socket = new TSocket('localhost', 1463, TRUE); // the target host to send logs(fixed port)
$transport = new TFramedTransport($socket);
$protocol = new TBinaryProtocol($transport, FALSE, FALSE);
$scribe_client = new scribeClient($protocol, $protocol);
$transport->open();
$scribe_client->Log($messages);
$transport->close();
}
?>
如何使用¶
- 资产差异日志有助于检查资产的物品交付/回收状态,并检查回收率。销售额取决于回收率。
- 游戏中可区分的物品类型和用户行为显示了物品交付/回收的活跃执行位置。
- 可以通过各种类型的事件检查额外物品销售或免费资产的详细信息。
- 在使用日志之前,请确保与游戏项目经理、平台规划团队的负责人和BI规划团队讨论如何区分资产/动作/物品。