Android 集成百度统计
在这里简单的介绍下怎么统计自己研发的APP 的用户活跃度,和使用量,以此来展示自己APP的用户使用量!
我们的APP都需要注入数据分析,以供我们实时的了解APP的下载和使用量提供了依据!
不过我还是更多的偏好使用Umeng 统计,但因为项目要求,需要集成百度统计,为此简单的介绍下使用!
集成开发步骤:
在百度统计Web网站https://mtj.baidu.com/web/welcome/login申请百度统计的AppKey
点击SDK下载 https://mtj.baidu.com/web/sdk/index 下载SDK 当中包括先关的jar 包
在自己的基类中添加统计的相关API
import com.baidu.mobstat.StatService; import com.wly.frame.utils.AppManager; import android.app.Activity; public class BaseActivity extends Activity { @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); AppManager.getAppManager().addActivity(this); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); StatService.onResume(this); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); StatService.onPause(this); } @Override protected void onDestroy() { super.onDestroy(); AppManager.getAppManager().finishActivity(this); } }
在AndroidManifest.xml 清单文件中声明相关权限 渠道号,Appkey 等
<!-- Baidu --> <!-- 需要申明的权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
在 meta-data 中声明相关的AppKey
<!-- Baidu meta-data --> <!-- 您从百度网站获取的APP KEY --> <meta-data android:name="BaiduMobAd_STAT_ID" android:value="7c0c6c6015" /> <!-- abcd1234 --> <!-- 渠道商编号 --> <meta-data android:name="BaiduMobAd_CHANNEL" android:value="Your Appkey Value " /><!--自己的AppKey值 --> <!-- 是否开启错误日志统计,默认为false --> <meta-data android:name="BaiduMobAd_EXCEPTION_LOG" android:value="true" /> <!-- 日志发送策略,可选值:APP_START、ONCE_A_DAY、SET_TIME_INTERVAL,默认为APP_START --> <meta-data android:name="BaiduMobAd_SEND_STRATEGY" android:value="APP_START" /> <!-- 日志发送策略 为SET_TIME_INTERVAL时,需设定时间间隔(取消下行注释)。取值为1-24的整数,默认为1 --> <!-- <meta-data android:name="BaiduMobAd_TIME_INTERVAL" android:value="2" /> --> <!-- 日志仅在wifi网络下发送,默认为false --> <meta-data android:name="BaiduMobAd_ONLY_WIFI" android:value="false" /> <!-- 是否获取基站位置信息 ,默认为true --> <meta-data android:name="BaiduMobAd_CELL_LOCATION" android:value="true" /> <!-- 是否获取GPS位置信息,默认为true --> <meta-data android:name="BaiduMobAd_GPS_LOCATION" android:value="true" /> <!-- 是否获取WIFI位置信息,默认为true --> <meta-data android:name="BaiduMobAd_WIFI_LOCATION" android:value="true" />
Application 的声明设置
让自己的Application extends FrontiaApplication
public class DemoApplication extends FrontiaApplication{ @Override public void onCreate(){ super.onCreate(); } }
在百度统计集成的SDK 文档中并没有阐述这点,本人是抱着试试的态度,然后就没有 继承 FrontiaApplication 这个东西!而是直接使用 DemoApplication extends Application 然后再清单文件中进行声明
<application android:name="com.wly.frame.DemoApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/App_name" android:theme="@style/AppTheme" >
经过测试也是可以统计的!不知是否是因为 百度统计的更新!还是什么,在此也没有做更多的了解!如果读者发现有什么问题可以告知?
统计示例:
统计Activity 界面
如果我们没有需求需要统计到具体的详细的界面我们可以直接在基类中声明统计的方法,需要注意的是,如果你在BaseClass 中声明了,切记在子类中不要声明相关统计API。
public class BaseActivity extends Activity { @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); AppManager.getAppManager().addActivity(this); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); StatService.onResume(this); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); StatService.onPause(this); } @Override protected void onDestroy() { super.onDestroy(); AppManager.getAppManager().finishActivity(this); } }
StatService.onResume(this); StatService.onPause(this); 统计的是具体的包名。在Web网站观看的效果如下图
- 统计具体的界面
当然统计所有的界面不太满足我们的需求,我们有时候需要具体分析,和了解某个具体的界面的访问量这是为了方便我们会更多的依赖于自定义页面统计以下的书写方式!
StatService.onPageStart(Context context, Sring pageName); StatService.onPageEnd(Context context, Sring pageName);
public class FounActivity extends Activity implements OnClickListener{ private TextView tv_back; private TextView tv_title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fount); initView(); } private void initView() { tv_back = (TextView) findViewById(R.id.tv_back); tv_back.setOnClickListener(this); tv_title = (TextView) findViewById(R.id.tv_title); tv_title.setText("发现"); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_back: finish(); break; default: break; } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); StatService.onPageStart(this, "发现界面"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); StatService.onPageEnd(this, "发现界面"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } }
public class FounActivity extends Activity implements OnClickListener{ private TextView tv_back; private TextView tv_title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fount); initView(); } private void initView() { tv_back = (TextView) findViewById(R.id.tv_back); tv_back.setOnClickListener(this); tv_title = (TextView) findViewById(R.id.tv_title); tv_title.setText("发现"); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_back: finish(); break; default: break; } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); StatService.onPageStart(this, "发现界面"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); StatService.onPageEnd(this, "发现界面"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } }
这样的话就是统计的具体界面在Web网站看到的效果就是这样!
-
统计Fragment界面
因为项目之前的版本问题都是使用 在BaseFragment 添加StatService.onRsume(this),StatService.onPasuse(this)API,由于生命周期的原因,造成有的界面没有统计。
解决方式:根据百度统计的SDK 文档,使用自定义界面进行统计,即可解决该问题,所以再统计Fragment的时候我们还是注入自定义统计界面的API。public class SportFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_contact_list, container, false); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); StatService.onPageStart(getActivity, "运动界面"); } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); StatService.onPageEnd(getActivity, "运动界面"); } }
这样就可以统计每个预览的Fragment 界面了。
-
自定义事件
统计某个按钮的热度,我们可以使用自定义事件,首先我们需要在Web 网站中注册并添加自定义事件,具体的操作就不在过多的赘述了,如果还有什么不了解可以参考百度 统计的SDK文档
API:
-
-
@params event_id 为在网站注册的点击事件id,二者必须对应 StatService.onEvent(Context context, String event_id, String label, int acc)
实例:
button.setOnClickListener(new View.onClickListener(){ @Override public void onClick(View v) { StatService.onEvent(MainActivity.this,"buildRequest","update",1) } });
截图就不在上传了!
其实吧,在统计数据方面我还是喜欢使用UMeng统计,不知你们觉得的呢?但是毕竟是由于项目的要求,为此在简单的使用下!