跳轉至

资产差异日志

  • 資產分為可現金化和不可現金化,以分別發送到指定類別。 例如,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 hh🇲🇲ss
例如: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規劃團隊討論如何區分資產/行動/物品。