一個App發佈到各個渠道以後,咱們須要採集不一樣渠道的一些信息,好比app在運行過程當中產生的一些異常信息,app在各個android版本的分佈,以及各個app版本的分佈,各渠道的用戶數,用戶忠誠度等等信息。這一切,咱們可使用百度移動統計來實現。java
首先,你必須有百度開發者的帳號,以後到http://developer.baidu.com/console#app/project建立一個工程,如圖咱們建立了一個test工程
android
以後點擊test工程,記錄api key
api
而後點擊左邊菜單的端服務Frontia,設置移動統計的功能session
添加移動統計後悔出現以下界面
app
複製ReportID做爲後續調用該功能使用的一個值。點擊查看統計,便可查看一些統計信息,固然此時裏面什麼信息都沒有,咱們添加了統計功能後這裏便會有信息框架
而後去下載sdk,http://developer.baidu.com/frontia/sdk,選擇移動統計-Android點擊下載sdk,將下載的文件裏的FrontiaDemo/libs下的Baidu-Frontia-Android-2.0.7.jar拷到項目libs目錄下,不要拷貝libs/Baidu-Frontia-Android-2.0.8.jar,測試過,該jar有問題,運行的時候會找不到一個類,因此咱們拷demo文件裏的jarasync
添加程序運行的權限ide
<!-- Frontia框架的公共權限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <!-- FrontiaPush 和FrontiaStatistics 須要的權限 --> <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
實現一個Application的子類完成初始化函數
public class App extends Application { @Override public void onCreate() { super.onCreate(); FrontiaApplication.initFrontiaApplication(getApplicationContext()); } }
在manifest文件裏指定咱們的application,包名改爲本身項目的包名測試
android:name=".app.App"
編寫一個配置類,將配置用到的一些值聲明在裏面
public class Config { public final static String APIKEY = "7jmaDS9xP0C56d44g0LLXCap"; public static final String REPORT_ID = "70f9ea11c5"; public static final String EVENT_ID = "1";//事件 }
編寫一個基類activity,爲了完成全部activity的一些UI統計功能,複用代碼。
package cn.edu.zafu.channeldemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.baidu.frontia.Frontia; import com.baidu.frontia.api.FrontiaStatistics; import cn.edu.zafu.channeldemo.config.Config; /** * User:lizhangqu(513163535@qq.com) * Date:2015-07-04 * Time: 20:40 */ public class BaseActivity extends AppCompatActivity { private FrontiaStatistics mFrontiaStatistics; private static final String TAG = "BaseActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); boolean isInit=Frontia.init(this.getApplicationContext(), Config.APIKEY); Log.d(TAG, "是否初始化成功:"+isInit); mFrontiaStatistics = Frontia.getStatistics(); } public void onResume() { Log.w(TAG, "BaseActivity.OnResume()"); super.onResume(); /** * 頁面起始(每一個Activity中都須要添加,若是有繼承的父Activity中已經添加了該調用,那麼子Activity中務必不能添加) * 不能與StatService.onPageStart一級onPageEnd函數交叉使用 */ mFrontiaStatistics.pageviewStart(this, this.getClass().getName()); } public void onPause() { super.onPause(); Log.w(TAG, "BaseActivity.onPause()"); /** * 頁面結束(每一個Activity中都須要添加,若是有繼承的父Activity中已經添加了該調用,那麼子Activity中務必不能添加) * 不能與StatService.onPageStart一級onPageEnd函數交叉使用 */ mFrontiaStatistics.pageviewEnd(this, this.getClass().getName()); } }
編寫Activity繼承這個基類Activity,並使用一些統計功能,好比異常統計,自定義事件的統計,以及日誌發送策略的設置等等,詳細見註釋。
package cn.edu.zafu.channeldemo; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import com.baidu.frontia.Frontia; import com.baidu.frontia.api.FrontiaStatistics; import cn.edu.zafu.channeldemo.config.Config; import cn.edu.zafu.channeldemo.util.AppUtil; public class MainActivity extends BaseActivity { private FrontiaStatistics mFrontiaStatistics; private Button btnException; private Button btnEvent; private Button btnEventDuration; private Button btnEventStart; private Button btnEventEnd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFrontiaStatistics = Frontia.getStatistics(); String channel=AppUtil.getMetaValue(this,"CHANNEL_NAME"); Log.d("TAG",channel); mFrontiaStatistics.setAppDistributionChannel(channel, true);//設置應用發佈渠道 mFrontiaStatistics.setSessionTimeout(50);//測試時,可使用1秒鐘session過時,這樣不斷的啓動退出會產生大量日誌。 mFrontiaStatistics.enableExceptionLog();//開啓異常日誌 mFrontiaStatistics.setReportId(Config.REPORT_ID);//reportId必須在mtj網站上註冊生成,該設置也能夠在AndroidManifest.xml中填寫 //第一個參數爲日誌發送策略 //第二個參數爲日誌發送策略設備週期性發送 //第三個參數爲日誌發送間隔 //第四個參數爲是否只在wifi狀況下發送日誌 btnException = (Button) findViewById(R.id.btn_excep); btnEvent = (Button) findViewById(R.id.btn_event); btnEventDuration = (Button) findViewById(R.id.btn_event_duration); btnEventStart = (Button) findViewById(R.id.btn_event_start); btnEventEnd = (Button) findViewById(R.id.btn_event_end); btnException.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //此處10/0,會發生異常,用來驗證上傳異常日誌 Log.d("TAG", 10 / 0 + ""); } }); btnEvent.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { FrontiaStatistics.Event event = new FrontiaStatistics.Event(Config.EVENT_ID, "事件1"); mFrontiaStatistics.logEvent(event); } }); /** * 自定義事件的第一種方法,寫入某個事件的持續時長 */ btnEventDuration.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { FrontiaStatistics.Event event = new FrontiaStatistics.Event(Config.EVENT_ID, "事件1"); event.setDuration(100); // 事件時長100毫秒 mFrontiaStatistics.logEventDuration(event); } }); //自定義事件的第二種方法:事件的時長由Frontia統計,而不是開發者統計。 final FrontiaStatistics.Event asyncEvent = new FrontiaStatistics.Event(Config.EVENT_ID, "事件1"); btnEventStart.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mFrontiaStatistics.eventStart(asyncEvent); } }); //自定義事件的第二種方法,本身定義該事件的起始時間和結束時間 btnEventEnd.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mFrontiaStatistics.eventEnd(asyncEvent); } }); } }
到統計後臺添加咱們的自定義事件的id和名稱
添加完成後就是這樣子的
完成以後就能夠生成渠道包並進行相應的統計功能了。生成渠道包見上一篇博文Android應用發佈的準備——生成渠道包以及渠道的申請Android應用發佈的準備——渠道註冊與認證
完成以後就可使用android studio生成渠道包,將對應包發佈到指定渠道,後續用戶安裝後,就能夠進行一些統計工做,好比程序異常日誌,自定義事件觸發次數,持續時間,各版本分佈狀況等等信息。如圖
更多統計信息請至後臺查看。