• Android应用发布后的统计——百度移动统计的应用


    一个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

    添加程序运行的权限

     
        <!-- 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    实现一个Application的子类完成初始化

     
    public class App extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            FrontiaApplication.initFrontiaApplication(getApplicationContext());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在manifest文件里指定我们的application,包名改成自己项目的包名

     android:name=".app.App"
    • 1

    编写一个配置类,将配置用到的一些值声明在里面

    public class Config {
    
        public final static String APIKEY = "7jmaDS9xP0C56d44g0LLXCap";
        public static final String REPORT_ID = "70f9ea11c5";
        public static final String EVENT_ID = "1";//事件
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    编写一个基类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());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    编写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);
                }
            });
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    到统计后台添加我们的自定义事件的id和名称 
    这里写图片描述

    添加完成后就是这样子的

    这里写图片描述

    完成之后就可以生成渠道包并进行相应的统计功能了。生成渠道包见上一篇博文Android应用发布的准备——生成渠道包以及渠道的申请Android应用发布的准备——渠道注册与认证

    完成之后就可以使用android studio生成渠道包,将对应包发布到指定渠道,后续用户安装后,就可以进行一些统计工作,比如程序异常日志,自定义事件触发次数,持续时间,各版本分布情况等等信息。如图 
    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

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

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

  • 相关阅读:
    nginx实现请求的负载均衡 + keepalived实现nginx的高可用
    nginx的location配置详解
    nginx负载均衡算法
    nginx实现集群高可用
    Nginx:承受3万并发连接数,胜过Apache 10倍
    编程高手与调试高手
    Android 中调试手段 打印函数调用栈信息
    android 中打 Log 的一些技巧
    Java程序员应该知道的10个调试技巧
    Camera中对焦模式总结
  • 原文地址:https://www.cnblogs.com/dongweiq/p/5057567.html
Copyright © 2020-2023  润新知