資産変動ログ
- 資産は、指定されたカテゴリにそれぞれ送信するために、現金化可能なものと現金化不可能なものに分けられます。 例:Tiny Farmには、現金タイプ(ベル)と現金化不可能タイプ(ゴールド)の2つのカテゴリがあります。
- ゲームサーバーからの資産(現金、ゲームマネーなど)の変動ログを収集することは、より良いサービスのために各ユーザーのプレイパターンを分析することを目的としています。
カテゴリー¶
共通サーバー 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の3番目の項目 例: 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も異なります 例: Feeding, Harvestingなど 実際のデータは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についての簡単な説明 (例: bell, star, goldball, gold) | 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 | 資産_id に関連する資産の変動前に支払われた金額 (日本の資金決済に関する法律の改正により追加) | bigint | Y (2018年1月18日追加) |
amount_paid_var | 資産_id に関連する資産の変動に支払われた金額 資産減少: 負の数, 資産増加: 正の数 (日本の資金決済に関する法律の改正により追加) | bigint | Y (2018年1月18日追加) |
amount_paid_curr | 資産_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 | ゲーム内の言語を2文字で 例: 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 | ユーザーが取得した資産の実際の数 例: ユーザーが一度に10個の資産を取得した場合、ログは1つだけ残りますが、資産の実際の数は10です | 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();
}
?>
使い方¶
- アセットバリアンスログは、アセットによるアイテムの配信/回収の状態を調査し、回収率を確認するのに役立ちます。売上の額は回収率に依存します。
- ゲーム内の区別可能なアイテムタイプとユーザーアクションは、アイテムの配信/回収が積極的に行われている場所を示します。
- 様々なタイプのイベントによる追加アイテムの販売や無料アセットの詳細を確認することができます。
- ログを使用する前に、ゲームプロジェクトマネージャー、プラットフォーム計画チームのPIC、BI計画チームとアセット/アクション/アイテムを区別する方法について話し合うことを確認してください。