Cobub Razor
Cobub Toaster
其它鏈接
Cobub Razor
Cobub Toaster
其它鏈接
該文檔適用于Cobub Razor 0.7版本。
登陸賬號(hào)后,到管理后臺(tái)注冊(cè)應(yīng)用,填寫(xiě)Android應(yīng)用的相關(guān)信息。App建立成功后,可獲得該App的AppKey以及最新的開(kāi)發(fā)文檔。
打開(kāi)下載文件中的sdk\android_sdk目錄, 導(dǎo)入SDK項(xiàng)目到eclipse(或其它IDE),打包生成jar包。
Eclipse用戶右鍵工程根目錄,選擇Properties —>Java Build Path —>libraries,然后點(diǎn)擊Add External JARs…選擇指向上述生成的jar包文件的路徑,點(diǎn)擊OK,即導(dǎo)入成功。
添加應(yīng)用程序的AppKey(必須) 需要先添加應(yīng)用程序獲得的AppKey,將AppKey添加到AndroidManifest.xml的meta-data里。
(注意:字符串必須為’UMS_APPKEY’)
向服務(wù)器發(fā)送用戶的統(tǒng)計(jì)分析數(shù)據(jù)。
獲取手機(jī)的相關(guān)狀態(tài)信息
獲取當(dāng)前用戶的位置信息
訪問(wèn)Wi-Fi網(wǎng)絡(luò)狀態(tài)信息
獲取最近運(yùn)行任務(wù)信息
向sdcard讀寫(xiě)文件
讀取程序產(chǎn)生的錯(cuò)誤日志
訪問(wèn)GSM網(wǎng)絡(luò)信息 AndroidManifest.xml 文件詳細(xì)如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sdktest" android:versionCode="4" android:versionName="4.0.2" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.GET_TASKS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.sdktest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="UMS_APPKEY" android:value="填寫(xiě)獲取到的key"/> </application> </manifest>
添加引用 import com.wbtech.ums.UmsAgent;
在Android應(yīng)用的入口Activity的onCreate()方法中調(diào)用UmsAgent.init(Context context, String url)方法,注意這個(gè)方法應(yīng)置于所有其他的方法之前。url為自行安裝的Cobub Razor服務(wù)端地址,注意地址以index.php?結(jié)束,如“http://demo.cobub.com/razor/index.php?”。
在可以獲得用戶唯一標(biāo)識(shí)符的地方(如登錄界面)調(diào)用UmsAgent.bindUserid(Context context, String userID)方法,該方法會(huì)記錄下該標(biāo)示符(如app應(yīng)用的用戶名,手機(jī)號(hào)或郵箱等標(biāo)識(shí)用戶唯一性的id),該函數(shù)會(huì)將設(shè)備與用戶id的關(guān)系發(fā)至服務(wù)端保存。
在可以獲得用戶tag的地方調(diào)用postTags(final Context context, final String tags),將tag數(shù)據(jù)傳至后臺(tái),以后可用來(lái)對(duì)用戶進(jìn)行分類。
在Android應(yīng)用的每個(gè)Activity的onResume方法中調(diào)用UmsAgent.onResume(Context),傳入的參數(shù)為當(dāng)前的context引用,這個(gè)方法將會(huì)自動(dòng)地從AndroidManifest.xml文件里讀取AppKey,并記錄下用戶進(jìn)入該頁(yè)面的時(shí)間。不要傳遞全局的application context。
protect void onResume(){ super.onResume(); UmsAgent.onResume(this); }
在Android應(yīng)用的每個(gè)Activity的onPause方法中調(diào)用UmsAgent.onPause(Context),參數(shù)為當(dāng)前activity的context,該方法會(huì)記錄下用戶離開(kāi)該頁(yè)面的時(shí)間。
protected void onPause(){ super.onPause(); UmsAgent.onPause(this); }
在onCreate()調(diào)用UmsAgent.postClientData(Context con)方法,參數(shù)為當(dāng)前上下文對(duì)象,這樣,客戶端數(shù)據(jù)就可以上傳數(shù)據(jù)到服務(wù)器了。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UmsAgent.postClientData(this); }
代碼樣例:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); UmsAgent.init(context,"http://192.168.1.204/UMS/index.php?"); UmsAgent.update(this); UmsAgent.setDefaultReportPolicy(this, SendPolicy.REALTIME); UmsAgent.bindUserid(this, "cobub"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub UmsAgent.onEvent(MainActivity.this, "eventid"); UmsAgent.onEvent(MainActivity.this, "event_id", "label", 30.0); } }); }
1.2.4 集成說(shuō)明
建議在Android應(yīng)用的所有的activity中都調(diào)用UmsAgent.onResume()和UmsAgent.onPause()方法。如果在某些activity中不添加也可以,但會(huì)造成相應(yīng)Activity的使用時(shí)間等相關(guān)信息統(tǒng)計(jì)不到。
確認(rèn)AppKey已經(jīng)正確的寫(xiě)入Androidmanifest.xml
確認(rèn)所需的權(quán)限都已經(jīng)添加
確認(rèn)所有的Activity中都調(diào)用了onResume和onPause方法
確認(rèn)測(cè)試手機(jī)或者模擬器已成功連入網(wǎng)絡(luò)
SDK可以幫您捕捉用戶在使用應(yīng)用過(guò)程中出現(xiàn)的異常退出(FC),并將錯(cuò)誤報(bào)告發(fā)送給服務(wù)器,錯(cuò)誤報(bào)告包含應(yīng)用程序版本、操作系統(tǒng)版本和設(shè)備型號(hào)以及程序出現(xiàn)異常時(shí)的Stacktrace,這些數(shù)據(jù)將幫助您調(diào)試應(yīng)用程序的錯(cuò)誤。我們提供兩種方式報(bào)告錯(cuò)誤信息,一種是我們自動(dòng)捕獲的錯(cuò)誤信息,一種是開(kāi)發(fā)者自己傳遞的錯(cuò)誤
前者,您需要在AndroidManifest.xml里面添加權(quán)限android.permission.READ_LOGS,并且在程序的Main Activity(應(yīng)用程序入口)的onCreate方法里調(diào)用UmsAgent.onError(Context)
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UmsAgent.onError(this);
后者需要開(kāi)發(fā)者調(diào)用UmsAgent.onError(Context,String)方法,在第二個(gè)參數(shù)中傳入自己捕獲的錯(cuò)誤信息。
除了基本統(tǒng)計(jì)分析功能外,SDK還支持您自定義的事件的統(tǒng)計(jì)分析,例如您可以統(tǒng)計(jì)廣告點(diǎn)擊次數(shù)或者視頻被播放的次數(shù)等等,這里我們將提供幾個(gè)簡(jiǎn)單而通用的接口:
UmsAgent.onEvent(Context context,String event_id)
在您需要發(fā)送事件報(bào)告的代碼段,調(diào)用如下方法就可以向服務(wù)器發(fā)送事件記錄,將統(tǒng)計(jì)event_id對(duì)應(yīng)事件發(fā)送次數(shù),變化趨勢(shì),例如廣告點(diǎn)擊,短信發(fā)送量等等。參數(shù)context為當(dāng)前context的引用,event_id為當(dāng)前統(tǒng)計(jì)事件的ID。
比如,監(jiān)測(cè)應(yīng)用程序里廣告的點(diǎn)擊次數(shù),事件ID為“ad_click”。那么需要在程序里每次廣告點(diǎn)擊時(shí)調(diào)用UmsAgent.onEvent(this,“ad_click“)通知服務(wù)器一個(gè)廣告點(diǎn)擊事件發(fā)生。
UmsAgent.onEvent(Context context,String event_id,String label)
除了能夠統(tǒng)計(jì)event_id所對(duì)應(yīng)事件的發(fā)生次數(shù),變化趨勢(shì)外,還能統(tǒng)計(jì)事件中具體標(biāo)簽所占的比例,label為當(dāng)前標(biāo)簽,同樣這里的event_id字符串中也不能有空格。
例如:在應(yīng)用程序中省份對(duì)應(yīng)一個(gè)event_id,每個(gè)城市對(duì)應(yīng)一個(gè)label,這樣我們可以再生成的統(tǒng)計(jì)表中看到不同城市的比例。
對(duì)于程序中的某些可能被頻繁觸發(fā)的事件,開(kāi)發(fā)者可以再程序中維護(hù)一個(gè)計(jì)數(shù)器,這樣事件被多次觸發(fā)只需要生成一個(gè)消息,這個(gè)消息包括該事件被觸發(fā)的次數(shù),這里我們重載了之前的兩個(gè)接口:
UmsAgent.onEvent(Context context,String event_id,int acc)
UmsAgent.onEvent(Context context,String event_id,String label,int acc)
acc:對(duì)應(yīng)事件被觸發(fā)的次數(shù)。
這里我們除了可以對(duì)某個(gè)事件的發(fā)生次數(shù)統(tǒng)計(jì)外,增加了一個(gè)針對(duì)事件下某一標(biāo)簽的價(jià)值的保存和統(tǒng)計(jì)。重載方法如下:
UmsAgent.onEvent(Context context,String event_id,String label,double value)
例如 event_id代表一個(gè)“下單”事件,那么label可以標(biāo)記為某個(gè)“訂單號(hào)”,而value就為該“訂單號(hào)”的金額(即價(jià)值)。
Cobub Android SDK提供了調(diào)試的功能,提供盡可能多的日志信息,以確定可能出現(xiàn)的問(wèn)題。 調(diào)用以下函數(shù),可以打開(kāi)調(diào)試功能,sdk所有上報(bào)的數(shù)據(jù)可以在logcat中顯示。注意:請(qǐng)?jiān)诋a(chǎn)品正式發(fā)布時(shí),關(guān)閉該功能。
UmsAgent.setDebugEnabled(true);
Log的不同等級(jí),可以通過(guò)以下函數(shù)設(shè)置:
UmsAgent.setDebugLevel(UmsAgent.LogLevel);
LogLevel分為Info,Debug,Warn,Error和Verbose。
這個(gè)功能將幫助您把新版的Android應(yīng)用程序推送給用戶,您只需修改AndroidManifest.xml中的VersionCode,并把應(yīng)用程序的apk文件上傳到服務(wù)器。
android.permission.WRITE_EXTERNAL_STORAGE
在Android應(yīng)用程序的入口Activity的onCreate()方法中調(diào)用UmsAgent.update(this),應(yīng)用程序?qū)⒆詣?dòng)檢測(cè)服務(wù)端是否有新的版本。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UmsAgent.update(this); }
考慮到用戶流量的限制,目前我們默認(rèn)在Wi-Fi介入情況下才進(jìn)行自動(dòng)提醒。
每次更新Android應(yīng)用程序,您只需要修改VersionCode,把Android應(yīng)用程序的apk文件上傳到服務(wù)器。UmsAgent.update()方法會(huì)判斷是否有新版應(yīng)用程序,如果發(fā)現(xiàn)可更新的應(yīng)用程序安裝包,會(huì)提示用戶是否更新。用戶選擇更新后,安裝包會(huì)下載安裝更新。(按照version code來(lái)檢測(cè)是否需要更新)
應(yīng)用程序每次只會(huì)在啟動(dòng)時(shí)向服務(wù)器發(fā)送一次消息,在應(yīng)用程序過(guò)程中產(chǎn)生的所有消息都會(huì)在下次啟動(dòng)時(shí)候發(fā)送。如果應(yīng)用程序啟動(dòng)時(shí)處在不聯(lián)網(wǎng)狀態(tài),那么消息將會(huì)緩存在本地,下次再嘗試發(fā)送。
應(yīng)用程序每產(chǎn)生條消息時(shí),就立即發(fā)送到服務(wù)器。這種方式使得計(jì)算更及時(shí)
在Android應(yīng)用程序的入口Activity中調(diào)用UmsAgent.setDefaultReportPolicy(Context,int),參數(shù)int可取值0或者1,其中1表示實(shí)時(shí)發(fā)送,0表示啟動(dòng)時(shí)發(fā)送。
UmsAgent.updateOnlineConfig(Context)
在Android應(yīng)用程序的入口Activity的onCreate()方法中調(diào)用。SDK將聯(lián)網(wǎng)檢測(cè)您的在線配置,將這些信息保存在本地。你也可以通過(guò)下面的方法讀取您的自定義參數(shù)。