void init ( ... );
確保在調(diào)用其他接口之前正確調(diào)用 AppLogger::init 接口,僅在第一次調(diào)用時(shí)有效;
Android 下通常在 第一個(gè) Activity 的 onCreate() 中調(diào)用初始化接口;
onStart // 應(yīng)用啟動(dòng)
onSubStart // 關(guān)卡或頁(yè)面的開始
// 關(guān)卡中發(fā)生的事件
onBuy, onUse, onEvent … 等事件接口
onPassFail 關(guān)卡成功或失敗
onSubEnd // 關(guān)卡或頁(yè)面的結(jié)束
// 關(guān)卡外發(fā)生的事件
onEnd // 應(yīng)用退出,Back按鍵強(qiáng)制退出調(diào)用onExit
onStart, onEnd 在 iOS 版本的SDK中自動(dòng)調(diào)用;Android 版本通常在 Activity::onResume, Activity::onPause 中由開發(fā)者調(diào)用。
onSubStart, onSubEnd 表示一個(gè)關(guān)卡/頁(yè)面的開始與結(jié)束,可以嵌套,但不能交叉。
onSubStart 的第一個(gè)參數(shù)stage是關(guān)卡名稱,用版本號(hào)的形式,例如 “1”, “2”, “2.1”, “2.2”, … 。如果是字母開始,作為頁(yè)面。
如果通過 System.KillProcess 函數(shù)退出應(yīng)用(雙擊Back按鍵退出應(yīng)用),確保調(diào)用 onExit 接口。
1,登錄 天梯游戲統(tǒng)計(jì) 后臺(tái),進(jìn)入我的應(yīng)用界面,在應(yīng)用匯總窗口點(diǎn)擊 “創(chuàng)建新應(yīng)用”。如圖:
2,輸入應(yīng)用的相關(guān)信息后,點(diǎn)擊 “提交應(yīng)用”,即可。如圖:
3,得到唯一的 APPKEY,接入 SDK 時(shí)使用。如圖:
在 Unity 編譯器中選擇 Assets -> Import Package -> Custom Package 找到本地目錄下的 AppLogger_c11_XXX.unitypackage 文件
(或:AppLogger_c99_XXX.unitypackage 兩者區(qū)別見下文),點(diǎn)擊 Open 按鈕,然后 Import 即可導(dǎo)入成功。
如果調(diào)整 /Assets/Plugins/ 目錄,請(qǐng)確保 AndroidManifest.xml 文件在 /Assets/Plugins/Android/ 目錄下。
由于開發(fā)者選用的 c++ 標(biāo)準(zhǔn)庫(kù)可能有所不同(是否支持 C++0x),所以我們對(duì) liblogger 也做了對(duì)應(yīng)的區(qū)分,分別為:
1,如果使用LLVM C++ standard library with C++11 support (如下圖) 或者 Complier Default,使用 AppLogger_c11.unitypackage
2,如果使用GNU C++ standard library (如下圖),使用 AppLogger_c99.unitypackage
void init (const char* appId, const char* appChannel=NULL);
在初始化游戲的 MonoBehaviour 子類中添加如下代碼,Awake()和 Start() 中均可以添加:
using Tianti;
void Awake() {
...
AppLogger.init ("appId", "appChannel");
}
appId: 應(yīng)用的唯一標(biāo)識(shí),在天梯游戲統(tǒng)計(jì)后臺(tái)創(chuàng)建應(yīng)用時(shí)自動(dòng)生成。具體詳見:獲取 APPKEY
appChannel: 應(yīng)用分發(fā)渠道名 (iOS 版本通常指定為 "AppStore")
Android和iOS的appkey不一樣,注意做好區(qū)分
// 宏判斷 IPHONE || ANDROID
#if UNITY_IPHONE
AppLogger.init ("iOS 版本的 appID", "App Store");
#elif UNITY_ANDROID
AppLogger.init ("Android 版本的 appID", "appChannel");
#endif
初始化數(shù)據(jù)統(tǒng)計(jì)服務(wù)
必須指定 appId 和 appChannel,通常指定 appChannel 為"AppStore"
在程序啟動(dòng)的時(shí)候調(diào)用初始化接口,僅在第一次調(diào)用時(shí)有效,確保在調(diào)用其他接口之前正確調(diào)用 init 接口
如果需要臨時(shí)禁用天梯游戲統(tǒng)計(jì)相關(guān)服務(wù),不需要逐一注釋相關(guān)代碼,只需要注釋掉 init 函數(shù)調(diào)用,天梯游戲統(tǒng)計(jì) 將不會(huì)記錄,保存,傳輸任何數(shù)據(jù),所有接口調(diào)用直接忽略
現(xiàn)在可以登錄 天梯游戲統(tǒng)計(jì) 后臺(tái),然后運(yùn)行您的游戲,即可實(shí)時(shí)看到當(dāng)前啟動(dòng)游戲的記錄。實(shí)時(shí)心跳數(shù)據(jù),如圖:
如果您的項(xiàng)目是關(guān)卡類型游戲或者需要統(tǒng)計(jì)分析移動(dòng)應(yīng)用的具體頁(yè)面數(shù)據(jù),您可以繼續(xù)接入 “關(guān)卡與頁(yè)面”。
void onSubStart (const char* name);
進(jìn)入一個(gè)關(guān)卡或頁(yè)面
在進(jìn)入一個(gè)關(guān)卡或頁(yè)面時(shí),調(diào)用 onSubStart 接口
onSubStart 事件接口可以幫助統(tǒng)計(jì)系統(tǒng)獲得關(guān)卡 新增用戶,活躍用戶,啟動(dòng)次數(shù),進(jìn)入次數(shù),離開次數(shù),滯留人數(shù),最大關(guān)卡,最后關(guān)卡 等各種指標(biāo)數(shù)據(jù)。如圖:
關(guān)卡/頁(yè)面可以嵌套,但不可以交叉。
onSubStart 的第一個(gè)參數(shù) stage 是關(guān)卡的名稱, 用版本號(hào)的形式,例如 “1”, “2”, “2.1”, “2.2”, … 。如果是字母開始的名稱(例如:“MainScene”),將作為頁(yè)面統(tǒng)計(jì)。
void onSubEnd (const char* name);
退出指定關(guān)卡或頁(yè)面
在退出一個(gè)關(guān)卡或頁(yè)面時(shí),調(diào)用 onSubEnd 接口
onSubEnd 必須與 onSubStart 匹配
onSubEnd 不能用 STAGE_LAST 參數(shù),必須指定和對(duì)應(yīng) onSubStart 一樣的關(guān)卡名稱
void onPassFail (bool bPass);
過關(guān)或失敗
關(guān)卡過關(guān)或失敗時(shí),立即調(diào)用 onPassFail 接口
onPassFail 在 onSubStart 與 onSubEnd 之間調(diào)用
onPassFail 事件接口可以幫助統(tǒng)計(jì)系統(tǒng)獲得關(guān)卡的難度等各種細(xì)節(jié)信息,例如,過關(guān)時(shí)間,失敗時(shí)間,難度 等數(shù)據(jù)
關(guān)卡過關(guān)失敗數(shù)據(jù)對(duì)于分析關(guān)卡數(shù)據(jù)非常有意義,強(qiáng)烈建議開發(fā)者及時(shí)并正確調(diào)用 onPassFail 接口
所有子事件缺省都算在最后關(guān)卡中(STAGE_LAST)
如果需要把子事件計(jì)算到特定關(guān)卡或頁(yè)面,請(qǐng)指定子事件中的 stage 參數(shù)
void onBuy (const char* payService, const char* item, int count, float value, const char* stage = STAGE_LAST);
現(xiàn)金購(gòu)買虛擬幣, onBuy 事件接口提交的數(shù)據(jù),將作為收入數(shù)據(jù),在后端報(bào)表中用各種收入圖表展現(xiàn)。
當(dāng)用現(xiàn)金進(jìn)行購(gòu)買時(shí),請(qǐng)調(diào)用 onBuy 事件接口
onBuy 事件缺省統(tǒng)計(jì)到最后關(guān)卡中,所以你可以看到各個(gè)關(guān)卡的各種與收入相關(guān)的數(shù)據(jù),如,收入,新增付費(fèi)用戶,活躍付費(fèi)用戶,當(dāng)天購(gòu)買用戶
payService: 支付服務(wù)類型,例如:支付寶, paypal, appstore, …
item: 購(gòu)買的項(xiàng)目
count: 購(gòu)買數(shù)量,通常是1
value: 購(gòu)買總價(jià)
stage: 發(fā)生事件時(shí)的關(guān)卡位置,缺省為最后關(guān)卡(STAGE_LAST)
void onExchange (const char* item, int count, const char* stage = STAGE_LAST);
虛擬幣兌換為道具
數(shù)據(jù)分析人員可以觀察到各個(gè)關(guān)卡的兌換次數(shù),兌換項(xiàng)目等詳細(xì)數(shù)據(jù),以及各個(gè)數(shù)據(jù)的分布狀況
item: 兌換的項(xiàng)目
count: 兌換數(shù)量,通常是1
stage: 發(fā)生事件時(shí)的關(guān)卡位置,缺省為最后關(guān)卡(STAGE_LAST)
void onUse (const char* item, int count, const char* stage = STAGE_LAST);
使用道具或點(diǎn)數(shù)
item: 使用的物品(或點(diǎn)數(shù))名稱,例如道具名稱
count: 使用的物品的數(shù)量
stage: 使用的位置,關(guān)卡或頁(yè)面名稱
void onCollect (const char* item, int count, const char* stage = STAGE_LAST);
收集點(diǎn)數(shù)/道具
item: 收集的物品(或點(diǎn)數(shù))名稱,例如道具名稱
count: 收集的物品的數(shù)量
stage: 收集的位置,關(guān)卡或頁(yè)面名稱
void onReward (const char* item, int count, const char* stage = STAGE_LAST);
獎(jiǎng)勵(lì)虛擬幣或道具
發(fā)生獎(jiǎng)勵(lì)行為時(shí),立即調(diào)用 onReward 接口
item: 獎(jiǎng)勵(lì)的物品(或點(diǎn)數(shù))名稱,例如道具名稱
count: 獎(jiǎng)勵(lì)的物品的數(shù)量
stage: 獎(jiǎng)勵(lì)的位置,關(guān)卡或頁(yè)面名稱
void onShare (const char* service, const char* item, const char* stage = STAGE_LAST);
分享到社交服務(wù)上
當(dāng)用戶進(jìn)行分享操作時(shí),立即調(diào)用 onShare 事件接口
service: 分享服務(wù)的名稱,例如,weibo, qq, weixin, …
item: 分享的項(xiàng)目名稱
stage: 分享的位置,關(guān)卡或頁(yè)面名稱
void onBalance (const char* name, const char* item, int value, const char* stage = STAGE_LAST);
游戲內(nèi)虛擬貨幣的產(chǎn)出與消耗數(shù)據(jù)分析,通過產(chǎn)出與消耗可以觀察游戲平衡情況。
name 用 +,- 符號(hào)前綴,聲明是產(chǎn)出或消耗。
玩家分享獎(jiǎng)勵(lì): onBalance ("+寶石", "獎(jiǎng)勵(lì)", 100);
玩家購(gòu)買時(shí)裝: onBalance ("-寶石", "時(shí)裝A", 200);
void onLevelUp (const char* name, const char* oldLevel, const char* newLevel, const char* stage = STAGE_LAST);
玩家/角色/寵物的等級(jí)變化事件,統(tǒng)計(jì)玩家等級(jí)分布
級(jí)別(oldLevel, newLevel)建議用版本號(hào)形式
void onEvent (const char* name, const char* stage = STAGE_LAST);
用戶自定義事件
自定義事件將以列表形式羅列出來,并顯示最近幾天的自定義事件變化
自定義事件可以是一個(gè)簡(jiǎn)單的名稱,例如 dm_show,也可以是包含 / 的多級(jí)名稱,例如 main/dm_show, main/dm_close, …
對(duì)于 main/dm_show 形式的事件,在統(tǒng)計(jì)報(bào)表中將把所有 main/ 開頭的時(shí)間一起對(duì)比顯示。
所以如果想對(duì)比觀察一組事件,可以給這些事件一個(gè)一樣的分組名稱作為前綴,并用 / 分隔。
事件列表:
相同前綴的事件之間對(duì)比:
void enableOnlineConfig ();
啟用在線參數(shù)同步功能,缺省不啟用在線參數(shù)功能
在 init 接口后調(diào)用 enableOnlineConfig
在線參數(shù)在應(yīng)用統(tǒng)計(jì)的后臺(tái)管理,添加參數(shù)時(shí)可以指定當(dāng)前參數(shù)的有效期。
客戶端每次啟動(dòng)或者從后臺(tái)切換到前臺(tái)時(shí)自動(dòng)更新在線參數(shù),并且最小更新間隔為15分鐘。
string getOnlineConfig (string key, string defaultValue="");
獲得某個(gè)在線參數(shù)的具體數(shù)據(jù),如果沒有指定,返回 defaultValue
先調(diào)用 enableOnlineConfig,然后可以任意多次調(diào)用 getOnlineConfig
服務(wù)器可以指定在線參數(shù)的 key 和 數(shù)據(jù),類型由客戶端自己處理
服務(wù)器端可以指定在線參數(shù)的有效期,如果在有效期之外,相當(dāng)于服務(wù)器沒有定義該參數(shù),返回缺省值
void clearStatus();
清除所有存量數(shù)據(jù)
void setStatus(const char* key, int value, bool bAutoConvert = true);
設(shè)置存量數(shù)據(jù),服務(wù)器端將對(duì)存量數(shù)據(jù)自動(dòng)分區(qū)間統(tǒng)計(jì),或根據(jù)指定的區(qū)間統(tǒng)計(jì)
例如:玩家當(dāng)前有多少寶石,用了多少寶石,收集了多少寶石等等這類長(zhǎng)期累積的數(shù)據(jù)可以通過 setStatus 的接口統(tǒng)計(jì)。
通常在 init 之后盡快調(diào)用 setStatus 接口,把客戶端的累計(jì)存量數(shù)據(jù)匯報(bào)給服務(wù)器
存量數(shù)據(jù)每天第一次啟動(dòng)的時(shí)候提交到服務(wù)器
通常在應(yīng)用啟動(dòng)后,客戶端持續(xù)存量數(shù)據(jù)加載后立即調(diào)用 AppLogger::setStatus 接口
持續(xù)狀態(tài)變更時(shí)也立即調(diào)用 AppLogger::setStatus 接口
SDK 在每天第一次啟動(dòng)時(shí)自動(dòng)同步數(shù)據(jù)到服務(wù)器,不會(huì)導(dǎo)致數(shù)據(jù)重復(fù)統(tǒng)計(jì)
void enableCrashReport();
啟用錯(cuò)誤統(tǒng)計(jì),捕捉應(yīng)用中發(fā)生崩潰時(shí)的堆棧信息,用于定位程序中引起錯(cuò)誤的代碼,缺省為不啟用崩潰統(tǒng)計(jì)
在 init 接口之后調(diào)用 enableCrashReport
需要把其他統(tǒng)計(jì)服務(wù)的錯(cuò)誤收集功能關(guān)閉,例如:
友盟:setCrashReportEnabled
TalkingData:setExceptionReportEnabled
void setDebugLog (int mode, int level);
調(diào)試信息輸出控制
mode 與 level 具體定義:
#define DEBUG_OFF 0 //不輸出調(diào)試信息
#define DEBUG_LOGCAT 1 //輸出到 logcat(用于聯(lián)機(jī)調(diào)試)
#define DEBUG_LOGFILE 2 //輸出到 文件(applogger.log), 用于脫機(jī)調(diào)試
#define DEBUG_LOGALL 3 //輸出到 logcat 和 文件(applogger.log)
#define DEBUG_LEVEL_VERBOSE 0 //輸出所有級(jí)別調(diào)試信息
#define DEBUG_LEVEL_INFO 1 //輸出INFO級(jí)別以上調(diào)試信息
#define DEBUG_LEVEL_WARN 2 //輸出WARN級(jí)別以上調(diào)試信息
#define DEBUG_LEVEL_ERROR 3 //輸出ERROR級(jí)別以上調(diào)試信息
void setSessionInterval (int v);
設(shè)置合并間隔,當(dāng)上次退出時(shí)間與本次啟動(dòng)時(shí)間間隔小于該參數(shù)所指定的值時(shí),合并上次與本次啟動(dòng)
void setOnline (bool online);
一般僅用于小范圍測(cè)試時(shí)(如,玩家輸入邀請(qǐng)碼才能進(jìn)入游戲)。邀請(qǐng)碼驗(yàn)證通過后,才算正常初始化 SDK
setOnline 接口應(yīng)在初始化(init)之前調(diào)用。
啟動(dòng)時(shí),調(diào)用 setOnline 接口設(shè)為 false,邀請(qǐng)碼驗(yàn)證通過后,setOnline 設(shè)為 true。
void setUser (const char* level, int age = -1, const char* gender = NULL, const char* userId = NULL, const char* userService = NULL);
設(shè)置用戶信息,包括用戶級(jí)別,年齡,性別, …
onStart // 應(yīng)用啟動(dòng)
onSubStart // 關(guān)卡或頁(yè)面的開始
// 關(guān)卡中發(fā)生的事件
onBuy, onUse, onEvent … 等事件接口
onPassFail 關(guān)卡成功或失敗
onSubEnd // 關(guān)卡或頁(yè)面的結(jié)束
// 關(guān)卡外發(fā)生的事件
onEnd // 應(yīng)用退出,Back按鍵強(qiáng)制退出調(diào)用onExit
onStart, onEnd 在 iOS 版本的SDK中自動(dòng)調(diào)用;Android 版本通常在 Activity::onResume, Activity::onPause 中由開發(fā)者調(diào)用。
onSubStart, onSubEnd 表示一個(gè)關(guān)卡/頁(yè)面的開始與結(jié)束,可以嵌套,但不能交叉。
onSubStart 的第一個(gè)參數(shù)stage是關(guān)卡名稱,用版本號(hào)的形式,例如 “1”, “2”, “2.1”, “2.2”, … 。如果是字母開始,作為頁(yè)面。