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

Android应用发布后的统计——百度移动统计的应用的更多相关文章

  1. Android应用公布后的统计——百度移动统计的应用

    一个App公布到各个渠道之后,我们须要採集不同渠道的一些信息,比方app在执行过程中产生的一些异常信息,app在各个android版本号的分布,以及各个app版本号的分布,各渠道的用户数,用户忠诚度等 ...

  2. Android之友盟多渠道打包与数据统计

    文章大纲 一.多渠道打包与数据统计介绍二.友盟实现多渠道打包实战三.友盟数据统计实战四.项目源码下载五.参考文章   一.多渠道打包与数据统计介绍   多渠道打包,相信很多同学都知道.在Android ...

  3. 微信支付 发布后显示 System:access_denied

    微信支付发布后显示 System:access_denied (android)或 System:not_allow(IOS) 我们项目用的是.NET MVC3 授权目录是:http://mynetd ...

  4. α发布后的感想(组长作业)

    今天α发布后,组长作业,谈谈心得体会,谈谈哪些做的好的地方,哪些做的不好.耐撕团队组长因有事缺席,耐撕团队的α发布由齐同学来主持,所以这个作业由齐同学代理. 先谈谈耐撕团队在α发布会中齐同学认为做的好 ...

  5. 在android market发布个人免费应用的步骤

    写了一段时间的android应用了,只是在自己手机上面安装. 上周申请了android developer,需要一次性25美元的程序开发注册费用.费用需要用google checkout,所以还要先申 ...

  6. 百度统计&友盟统计

    一.百度统计 登录百度站长统计账号-->管理 --->代码获取-->复制代码,如 <script> var _hmt = _hmt || []; (function() ...

  7. iis发布后模板字体不能加载的解决方案

    在使用ace模板的过程中就曾遇到过图标不显示的情况, 1.在iis和vs运行都不能显示图标,添加缺失的字体库后可以访问 2.把项目签入到阿里云时再一次失效,解决方法是添加Mime类型 .woff  a ...

  8. Asp.Net Core IIS发布后PUT、DELETE请求错误405.0 - Method Not Allowed 因为使用了无效方法(HTTP 谓词)

    一.在使用Asp.net WebAPI 或Asp.Net Core WebAPI 时 ,如果使用了Delete请求谓词,本地生产环境正常,线上发布环境报错. 服务器返回405,请求谓词无效. 二.问题 ...

  9. Android Studio最新稳定版下载 - 百度网盘(更新于2017年7月14日)

    Android Studio是一个为Android平台开发程序的集成开发环境,其包含用于构建Android应用所需的所有工具.Android Studio 2.3.3为最新稳定版(截止到2017年7月 ...

随机推荐

  1. jquery GET POST

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <head> ...

  2. js共享onload事件

    问题:通过js进行事件绑定,必须在HTML文档加载完成后再执行js脚本,否则可能因DOM不完整导致无法完成预计的效果,但对于不同的需求如何选用最佳的实现方式呢,这里做了整理,可以做参考. 一.对于小型 ...

  3. 从内部剖析C# 集合之---- HashTable

    这是我在博客园的第一篇文章,写的不好或有错误的地方,望各位大牛指出,不甚感激. 计划写几篇文章专门介绍HashTable,Dictionary,HashSet,SortedList,List 等集合对 ...

  4. Hadoop 学习笔记 (十一) MapReduce 求平均成绩

    china:张三 78李四 89王五 96赵六 67english张三 80李四 82王五    84赵六 86math张三 88李四 99王五 66赵六 77 import java.io.IOEx ...

  5. bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度

    1223: [HNOI2002]Kathy函数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 207  Solved: 90[Submit][Stat ...

  6. HNOI2015滚粗记

    HNOI2015滚粗记 经过两天的苦战,艰难的HNOI终于结束了.感觉这次HNOI自己还是收获了许多. \(Day1\)打的很是艰难,题目一下就有种晕头转向的感觉.开场\(20min\)自己还在读题时 ...

  7. Java学习IO篇

            来吧,同志们,为复习网络编程做准备-- 一.理论准备         流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流" ...

  8. Musical Theme

    poj1743:http://poj.org/problem?id=1743 题意:题意抽象出来就是给你一个序列,然后找一个长度不少于5的没有重复的等差数列. 题解:每相邻的两个数做差,然后转化成求字 ...

  9. JSP页面间传递参数的5种方法

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  10. Android开源项目发现--- 传感器篇(持续更新)

    Great Android Sensing Toolkit Android感应器工具包,包含示例及使用过程中可能需要的算法 项目地址:https://github.com/gast-lib/gast- ...