Home

Awesome

Sky Monitoring 天眼

Android StaticFrameWork

自定义统计SDK, 完全放弃第三方平台,让app拥有自主的数据统计功能

支持Activity统计

自定义事件统计

APP启动退出唤醒自动统计

crsah日志统计

客户端SDK功能概述

在使用统计服务前,开发者先要拿到本身APPID。其中AppId是客户端的身份标识,在客户端SDK初始化时使用。然后下载最新Library的SDK压缩包,其中包括了Android SDK和AndroidDemo。Android版SDK以Module形式提供, 你的APP只需要添加少量代码和配置,即可完成接入TcInterface统计服务。

统计服务Android

SDK所有的接口都封装在TcStatInterface抽象类的静态方法中,主要功能接口请参考第3节API说明。应用在启动时,需要调用initialize方法来初始化统计服务,之后便可按照统计的业务需求,调用统计数据上报接口上报统计打点。 SDK提供了接口给开发者来设置向统计统计服务器上报统计数据的策略,开发者可以在任意时候调用修改策略。客户端SDK上报的数据包括默认事件统计、应用全局(AppAction)统计(用于统计app的唤醒、打开关闭频率、使用时长等)、页面访问统计(Page)和自定义事件统计(Event)。 统计SDK提供app的崩溃日志收集功能(统计SDK2.0 将会新增)。功能开启后,对于app在使用过程中的崩溃,SDK将自动采集崩溃日志,并上传到统计后台;统计后台会根据app版本,对崩溃进行聚合、展示。

SDK使用配置

本节主要介绍使用统计SDK前的准备工作,开发者也可以参照SDK中的demo来配置。

2.1. 配置AndroidManifest.xml文件 SDK支持的最低安卓版本为2.2。

     <uses-sdk  android:minSdkVersion="8"/>

统计服务需要的权限列表 权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

对应的5种权限,用途如下:

网络访问权限,需要联网以便于向小米统计服务端上报统计数据。 查看网络状态,用于根据不同的网络环境,选择相应的上报策略。同时也需要上报当前的网络环境用于后台统计展示。 读取手机状态和身份,用于获取设备的唯一标识,为当前设备生成一个唯一设备ID。 查看Wifi状态权限,用于获取mac地址,生成设备唯一标示。 获取用户地理位置信息,用于获取精准确的地理位置,变于统计用户分布情况。

2.2. 初始化统计服务 应用启动时,需要调用统计SDK中的初始化方法,传入appID(目前已定义好相关APPID,参见下表)等身份验证参数和应用对应的渠道号。在调用其他统计服务相关API前,必须调用本方法初始化统计服务, 建议您在程序的Application的onCreate中初始化Tamic统计服务。传入即可。

APP常规数据统计

本节主要介绍如何设置数据上报策略,如何记录页面访问行为和用户自定义事件。本节也介绍了通过集成测试模块验证SDK是否集成成功的方法。

3.1. 数据上报策略

统计服务SDK会先把数据记录缓存在本地,然后根据开发者设定的数据上报策略,触发上报流程。SDK中提供了一系列数据上报策略供开发者选择,这些策略包括:

UPLOAD_POLICY_REALTIME 实时上报。每当有一条新的记录,就会激发一次上报。

UPLOAD_POLICY_WIFI_ONLY 只在WIFI下上报。当设备处于WIFI连接时实时上报,否则不上报记录。

UPLOAD_POLICY_BATCH 批量上报。当记录在本地累积超过一个固定值时(100条),会触发一次上报。

UPLOAD_POLICY_WHILE_INITIALIZE 启动时候上报。每次应用启动(调用initialize方法)时候,会将上一次应用使用产生的数据记录打包上报。 UPLOAD_POLICY_INTERVAL 指定时间间隔上报。开发者可以指定从1分钟-60天之间的任意时间间隔上报数据记录。需要注意,由于SDK并没有使用安卓的实时唤醒机制,采用Handler,因此采用此策略上报,SDK做不到严格的遵守开发者设定的间隔,而会根据应用数据采集的频率和设备休眠策略,会有一定的偏差。

UPLOAD_POLICY_DEVELOPMENT 调试模式。使用此策略,只有开发者手动调用一个接口才会触发上报,否则在任何情况下都不上报。SDK中提供了一个reportData()方法用于手动触发。这种策略主要用于开发者调试时候可手动控制上报时机,便于做数据对比。

统计服务的本地缓存最长会永久保存,只要在数据有效期内上报流程被触发,就会将本地之前没上报成功的所有数据打包ZIP格式上报。如果数据上报成功,则会把已经成功的数据从本地删除。 默认的数据上报策略是UPLOAD_POLICY_INTERVAL,默认的上报时间间隔是三分钟(非wifi是30分钟) 现在也只有默认策略有效。

设置上报策略的代码示例如下:

    // 设置策略模式  第一个是策略模式   ,第二是是时间(单位/分)
   TcStatInterface.setUploadPolicy(TcStatInterface.UploadPolicy.UPLOAD_POLICY_INTERVA, 3);


   

API说明

--

4.1. API细节

请具体看demo 注释

集成步骤

5.1 依赖项目

Gradle:

root:

  repositories {
      maven { url "https://jitpack.io" }
      jcenter()
  }

Module:

     dependencies {
      compile 'com.tamic:StatInterface:2.1'

    }

5.3 加入权限

见2.1的说明。

5.4 初始化

Application的onCreate():

     // assets
    String fileName = "stat_id.json";

    String url = "http://www.baidu.com";
    
    // init statSdk
    TcStatInterface.initialize(this, appId, "you app chanel", fileName);
    // set upload url
    TcStatInterface.setUrl(url);
       

  见Wiki说明 参见demo

5.5 AppAction

此统计包含是三个类型

  1. App启动

    TcStatInterface.recordAppStart();
    
  2. App退出

    TcStatInterface.recordAppEnd();
    
  3. APP唤醒

无需开发者上层使用,sdk会自动打点记录

5.6 事件统计

  记录某个动作,并包含事件参数时,

            findViewById(R.id.id_button).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                            TcStatInterface.onEvent("main", "onlick", "send data");
                            //reportData
                            TcStatInterface.reportData();

                    }

            });


            findViewById(R.id.id_button2).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                            // test
                            HashMap<String, String> map = new HashMap<>();
                            map.put("id1", "xxx");
                            map.put("id2", "yyy");

                            TcStatInterface.onEvent("openNext", map);

                            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                            startActivity(intent);

                    }

            });
     

5.7 Activity统计

 统计activity启动时间,从哪个地方跳过来,业务开发者可以自己写一个base,让其他activity继承Base就行,就可完成自动搜集功能        

   public class BaseActivity extends Activity {

    @override
    protected void onResume() {
      super.onResume();
      //可以直接传this
      TcStatInterface.recordPageStart(“ID”);
    }

     protected void onPause() {
       super.onPause();
        TcStatInterface.recordPageEnd();
     }
   }
 
 

注意

目前服务端代码需要你自我实现,数据结结构按客户端数据Model实现即可。收到数据落地到数据库,需要查看的时候即可查看,如果后端有可视化界面,那么更好不过。

 客户端:搜集,存储,上报。  服务端:接受数据,落地数据库,最后做大数据处理。

作者:  FrameWork @Tamic : http://www.jianshu.com/p/cd83e81b78aa

crash:@jianglei0716