资产差异日志
- 資產分為可現金化和不可現金化,以分別發送到指定類別。 例如,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 1:1映射的值。如果action_id不同,action_name也不同 例如:喂养、收获等。 实际数据是基于action_id堆叠的。 如果更改,元表会自动更新 | string(50) | Y |
item_id | 导致资产变化的物品标识符。如果资产变化操作与物品无关,请将此值设置为0。 范围:[1–(2^31−1)] 当操作与物品相关时,此参数是必需的。每个游戏应定义物品ID 一旦定义,请勿更改。需要测试 | int | Y |
item_name | 与item_id 1:1映射的值。 除非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 | 資產變動前已支付的資產金額 (因日本資金結算法修訂而新增) | bigint | Y (於2018年1月18日新增) |
amount_paid_var | 與 asset_id 相關的已支付資產變動金額 資產減少:負數,資產增加:正數(因日本資金結算法修訂而新增) | 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 | 如果使用 BlueStacks 等 PC 模擬器連接,則返回 1;否則返回 0 對於 PC 版本,返回 2 | tinyint(1) | 不要求,但建議。 |
game_language | 遊戲中的語言,使用兩個小寫字母 例如:ko 參考:標識符政策 | varchar | 不要求,但建議。(於2018年1月18日新增) |
account_id | 伺服器中唯一的帳戶標識符(PK) | 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規劃團隊討論如何區分資產/行動/物品。