一个App发布到各个渠道之后,我们需要采集不同渠道的一些信息,比如app在运行过程中产生的一些异常信息,app在各个android版本的分布,以及各个app版本的分布,各渠道的用户数,用户忠诚度等等信息。这一切,我们可以使用百度移动统计来实现。

首先,你必须有百度开发者的账号,之后到http://developer.baidu.com/console#app/project创建一个工程,如图我们创建了一个test工程

之后点击test工程,记录api key

然后点击左边菜单的端服务Frontia,设置移动统计的功能

添加移动统计后悔出现如下界面

复制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文件里的jar

添加程序运行的权限

        <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" />        <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([email protected]) * 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生成渠道包,将对应包发布到指定渠道,后续用户安装后,就可以进行一些统计工作,比如程序异常日志,自定义事件触发次数,持续时间,各版本分布情况等等信息。如图

更多统计信息请至后台查看。

相关的源码下载
http://download.csdn.net/detail/sbsujjbcy/8869821

更多相关文章

  1. Android(安卓)自定义View的监听事件
  2. Android(安卓)ANR 问题第二弹------Input事件是如何超时导致ANR
  3. 事件处理机制之基于监听的事件处理机制
  4. launcher源码分析
  5. Android输入系统(一)输入事件传递流程和InputManagerService的诞生
  6. Android批量打包-如何一秒内打几十个apk渠道包
  7. Android(安卓)View使用详解
  8. 关于Android全埋点方案
  9. 你真的了解android中的SAX解析吗?

随机推荐

  1. Android项目开发,不能不了解的第三方库!(齐
  2. android实现观察者模式的几种方法
  3. Android的内存机制和常见泄漏情形
  4. Android(安卓)APN的设置问题--进一步讨论
  5. android工程下运行main方法的配置方法
  6. 史上最全的Android开发学习教程集锦【初
  7. Android工程 引用另外一个Android工程
  8. J2me游戏如何快速移植到Android(安卓)(2)
  9. Android引入广播机制的用意。单线程模型M
  10. Android(安卓)App 启动流程梳理(基于 Andr