APP统计
APP統(tǒng)計(jì)就是統(tǒng)計(jì)用戶(hù)使用app的各項(xiàng)指標(biāo),比如說(shuō)日活躍量,頁(yè)面打開(kāi)次數(shù),新增用戶(hù)數(shù)量,用戶(hù)年齡分布,用戶(hù)地區(qū)分布,用戶(hù)性別分布以及用戶(hù)使用時(shí)間段等等。將統(tǒng)計(jì)出來(lái)的用戶(hù)信息進(jìn)行比對(duì)分析,可以服務(wù)公司的營(yíng)銷(xiāo)策略和投資策略。
目前做應(yīng)用統(tǒng)計(jì)的公司很多,比較好的有友盟統(tǒng)計(jì),它的主要功能有這些:
統(tǒng)計(jì)新增用戶(hù)和啟動(dòng)次數(shù)
統(tǒng)計(jì)頁(yè)面停留時(shí)間
統(tǒng)計(jì)崩潰日志
統(tǒng)計(jì)行為和事件
統(tǒng)計(jì)終端信息,比如用戶(hù)區(qū)域,手機(jī)品牌,網(wǎng)絡(luò)狀態(tài)等。
友盟統(tǒng)計(jì)SDK開(kāi)發(fā)環(huán)境的準(zhǔn)備:
首先,獲取appKey,在管理后臺(tái)主頁(yè)創(chuàng)建應(yīng)用,填寫(xiě)信息,系統(tǒng)會(huì)自動(dòng)生成appKey
其次,對(duì)于AndroidStudio環(huán)境,則添加gradle依賴(lài):
dependencies {compile 'com.umeng.analytics:analytics:latest.integration' }然后,在manifest文件中配置appKey,以及添加相關(guān)權(quán)限
<manifest……><uses-sdk android:minSdkVersion="8"></uses-sdk><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><application ……><activity ……/><meta-data android:value="58b7fe1aae1bf82ad4001a1d" android:name="UMENG_APPKEY"/><meta-data android:value="heima_store" android:name="UMENG_CHANNEL"/></application> </manifest>環(huán)境搭建完畢之后,現(xiàn)在開(kāi)始幾個(gè)常用統(tǒng)計(jì)的使用
1、使用MobclickAgent統(tǒng)計(jì)App的新增用戶(hù),并且啟用debug模式,便于觀察日志。由于MobclickAgent統(tǒng)計(jì)新增用戶(hù)的原理是依據(jù)于安裝app設(shè)備的設(shè)備id,所以我們嘗試修改設(shè)備id,重新安裝,然后查看結(jié)果。
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//開(kāi)啟debug模式,會(huì)打印emeng的操作日志MobclickAgent.setDebugMode(true);}@Overrideprotected void onResume() {super.onResume();MobclickAgent.onResume(this);}@Overrideprotected void onPause() {super.onStop();MobclickAgent.onPause(this);}2、使用MobclickAgent統(tǒng)計(jì)app啟動(dòng)次數(shù),分析友盟統(tǒng)計(jì)啟動(dòng)次數(shù)的原理,嘗試修改后并進(jìn)行驗(yàn)證,然后,自定義MobclickAgemnt記錄app啟動(dòng)的時(shí)間周期,然后進(jìn)行驗(yàn)證。
//自定義啟動(dòng)會(huì)話時(shí)間周期 MobclickAgent.setSessionContinueMillis(2000);3、統(tǒng)計(jì)頁(yè)面停留時(shí)間,有兩種情況:統(tǒng)計(jì)Activity停留的事件和Fragment停留的時(shí)間
@Override protected void onResume() {super.onResume();//記錄頁(yè)面啟動(dòng)時(shí)間點(diǎn) MobclickAgent.onPageStart(getClass().getSimpleName());MobclickAgent.onResume(this); } @Override protected void onPause() {super.onStop();//記錄頁(yè)面退出時(shí)間點(diǎn) MobclickAgent.onPageEnd(getClass().getSimpleName());MobclickAgent.onPause(this); }注意:如果需要對(duì)多個(gè)Activity統(tǒng)計(jì)停留時(shí)間,那么應(yīng)該將上面的代碼寫(xiě)到基類(lèi)中。
!!!!!!!!!!!
注意:如果想統(tǒng)計(jì)Fragment的停留時(shí)間,這個(gè)由于友盟自身的原因,我么需要首先禁止Activity的追蹤統(tǒng)計(jì)功能,代碼乳腺下:
//設(shè)置禁用只統(tǒng)計(jì)Activity的停留時(shí)長(zhǎng) MobclickAgent.openActivityDurationTrack(false);并且需要去掉BaseActivity中統(tǒng)計(jì)Activity的代碼:
@Override protected void onResume() {super.onResume(); // MobclickAgent.onPageStart(getClass().getSimpleName());MobclickAgent.onResume(this); } @Override protected void onPause() {super.onPause(); // MobclickAgent.onPageEnd(getClass().getSimpleName());MobclickAgent.onPause(this); }然后在Fragment界面中,添加相同的統(tǒng)計(jì)代碼,同樣的如果多個(gè)和Fragment需要統(tǒng)計(jì)功能,那么應(yīng)該將下面的代碼添加到BaseFragment中。
public class MyFragment extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {TextView textView = new TextView(getContext());textView.setText("我是Fragment");textView.setTextSize(25);textView.setTextColor(Color.GREEN);return textView;}@Overridepublic void onResume() {super.onResume();MobclickAgent.onPageStart(getClass().getSimpleName());}@Overridepublic void onPause() {super.onPause();MobclickAgent.onPageEnd(getClass().getSimpleName());} }4、統(tǒng)計(jì)崩潰錯(cuò)誤日志
友盟會(huì)自動(dòng)統(tǒng)計(jì)app中的崩潰日志,這個(gè)功能可以讓我們及時(shí)發(fā)現(xiàn)錯(cuò)誤和定位錯(cuò)誤,及時(shí)修復(fù)bug,提示app的穩(wěn)定性和用戶(hù)體驗(yàn)。如果想關(guān)閉統(tǒng)計(jì)崩潰日志功能,可以這樣做:
MobclickAgent.setCatchUncaughtExceptions(false);另外,我們也將自己捕獲的錯(cuò)誤上傳到Umeng進(jìn)行統(tǒng)計(jì)分析:
public static void reportError(Context context, String error) //或 public static void reportError(Context context, Throwable e)5、統(tǒng)計(jì)行為和事件 !!!!!
在app使用行為中,有些細(xì)節(jié)的行為和事件可能需要統(tǒng)計(jì),比如當(dāng)發(fā)紅包按鈕被點(diǎn)擊了,我們就認(rèn)為這是一個(gè)發(fā)紅包事件;比如當(dāng)發(fā)語(yǔ)音按鈕被點(diǎn)擊了,我們就認(rèn)為這是一個(gè)發(fā)語(yǔ)音的事件;再比如用戶(hù)更換了頭像,我們則認(rèn)為這是一個(gè)換頭像的行為事件。通過(guò)這些用戶(hù)的使用行為分析,可以讓我們更懂用戶(hù),更好地為用戶(hù)服務(wù)。比如統(tǒng)計(jì)數(shù)據(jù)顯示,用戶(hù)發(fā)語(yǔ)音的行為非常多,那么在下一個(gè)版本中,我們可以將發(fā)語(yǔ)音的功能做的更易用更炫酷。
由于這些事件和行為是和我們app的業(yè)務(wù)邏輯相關(guān)聯(lián)的,所以沒(méi)有通用的事件行為。在我們自己的app中,我們需要自己定義需要統(tǒng)計(jì)的事件和行為。
Umeng提供了2種類(lèi)型的事件統(tǒng)計(jì):
- 計(jì)數(shù)事件,我們只關(guān)心該事件行為的數(shù)量,比如統(tǒng)計(jì)一首歌被播放了多少次;
- 計(jì)算事件,我們關(guān)心該事件行為的持續(xù)時(shí)間,比如統(tǒng)計(jì)一個(gè)人聽(tīng)某首歌聽(tīng)了多久;
比如,我們想統(tǒng)計(jì)一個(gè)發(fā)紅包的按鈕被點(diǎn)擊的事件行為,并且,這是一個(gè)計(jì)數(shù)事件,我們需要在后臺(tái)添加這個(gè)id為fahongbao的計(jì)數(shù)事件,就可以查看統(tǒng)計(jì)的數(shù)據(jù)了。代碼如下:
//當(dāng)按鈕點(diǎn)擊的時(shí)候,說(shuō)明用戶(hù)想發(fā)紅包,那么則記錄此行為 MobclickAgent.onEvent(getContext(),"fahongbao");比如,我們想統(tǒng)計(jì)林俊杰的<<江南>>被用戶(hù)聽(tīng)了多久,那么這就是一個(gè)計(jì)算事件。代碼如下:
//我們計(jì)算好的播放時(shí)間 int duration = 500000; String eventId = "hotsong";//熱歌榜 //事件描述信息,比如歌手是誰(shuí),歌曲名稱(chēng) Map<String,String> eventDesc = new HashMap<String, String>(); eventDesc.put("singer","JJLin"); eventDesc.put("song","江南"); MobclickAgent.onEventValue(getContext(),eventId,eventDesc,duration);?
轉(zhuǎn)載于:https://www.cnblogs.com/yegong0214/p/6502467.html
總結(jié)
- 上一篇: c3p0获取连接Connection后的
- 下一篇: apache工作模式