友盟 U-App 应用统计 Android SDK的使用说明

官方文档:http://dev.umeng.com/analytics/android-doc/integration?spm=0.0.0.0.r2QOVx

1.下载sdk,导lib,申请key不详描述


2.Mainfest配置

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

<activity ……/>
    <meta-data
            android:name="UMENG_APPKEY"
            android:value="57664895e0f55aea2300558a" >
    meta-data>
    <meta-data
            android:name="UMENG_CHANNEL"
            android:value="Umeng" >
    meta-data>
application>  

一个包中只能添加一个渠道,多个渠道需要打多个包。开发者新增渠道需要在工程manifest中或者activity中调用接口添加我们的渠道信息,友盟后台没有添加渠道的地方。您可以使用Gradle实现多渠道打包。
详见:http://bbs.umeng.com/thread-9119-1-1.html


3.场景类型设置接口(onCreate方法,反正必须得有这个)

MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);


4.session的统计(这里的session是启动的意思,以下接口用来统计应用时长)

 @Override
    public void onResume() {
        super.onResume();
        MobclickAgent.onResume(mContext);
    }

    @Override
    public void onPause() {
        super.onPause();
        MobclickAgent.onPause(mContext);
    }

**注意:
1.确保在所有的Activity中都调用且仅调用一次 MobclickAgent.onResume() 和MobclickAgent.onPause()方法
2.当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口:MobclickAgent.setSessionContinueMillis(long interval) 来自定义这个间隔(参数单位为毫秒)。
3.如果开发者调用Process.kill或者System.exit之类的方法杀死进程,请务必在此之前调用MobclickAgent.onKillProcess(Context context)方法,用来保存统计数据。**


5.账号的统计

默认一个设备一个账号,如果需要统计应用自身的账号,请使用以下接口:

//自有账号登录
MobclickAgent.onProfileSignIn("userID");
//第三方账号(如新浪微博)登录
MobclickAgent.onProfileSignIn("WB""userID");
//注销
public static void onProfileSignOff();


6.统计页面跳转

在仅有Activity的应用中,SDK 自动统计跳转页面并把Activity 类名作为页面名称统计。但是在包含fragment的程序中我们希望统计更详细的页面,所以需要自己调用方法做更详细的统计。此时需要调用MobclickAgent.openActivityDurationTrack(false);来禁止默认的页面统计方式。

6.1Activity统计:

@Override
public void onCreate() {
    //禁止默认的页面统计方式,这样将不会再自动统计Activity,下面一行代码只需要写到程序入口处的Activity 就好啦不用每个Activity都写的。
    MobclickAgent.openActivityDurationTrack(false);
}

@Override
public void onResume() {
    super.onResume();
    MobclickAgent.onPageStart("MainActivity");
}

@Override
public void onPause() {
    super.onPause();
    MobclickAgent.onPageEnd("MainActivity");
}

Fragment统计:

public void onResume() {
    super.onResume();
    MobclickAgent.onPageStart("MainScreen"); 
    //统计页面,"MainScreen"为页面名称,可自定义
}
public void onPause() {
    super.onPause();
    MobclickAgent.onPageEnd("MainScreen"); 
}

如果页面是使用FragmentActivity + Fragment实现的,需要在 FragmentActivity 中统计时长:

public void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);       //统计时长
}
public void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}


7.自定义事件的统计(分为计数事件和计算事件)

7.1计数事件(计数事件统计事件的发生次数、独立用户数、事件时长及事件各参数的发生次数、时长。)

7.1.1统计发生次数(例如统计分享次数)
友盟 U-App 应用统计 Android SDK的使用说明_第1张图片

MobclickAgent.onEvent(mContext,"Share");

7.1.2统计点击行为各属性被触发的次数(例如统计电商应用中“购买”事件发生的次数,以及购买的商品类型及数量)

HashMap<String,String> map = new HashMap<String,String>();
map.put("type","book");
map.put("quantity","3"); 
MobclickAgent.onEvent(mContext, "purchase", map);

7.2计算事件(对应的统计项是数值类型且开发者需要查看这些事件的数值分布特征,就需要使用计算事件。例如统计一次音乐播放,包括音乐类型,作者和播放时长)

int duration = 12000; //音乐播放时长
Map<String, String> map_value = new HashMap<String, String>();
map_value.put("type" , "popular" );
map_value.put("artist" , "JJLin" ); 
MobclickAgent.onEventValue(this, "music" , map_value, duration);

注意:event 的 key不能超过10个

8.错误统计

SDK从V4.6版本开始内建错误统计,不需要开发者再手动集成。如果开发者自己捕获了错误,需要上传到友盟服务器可以调用下面方法。

public static void reportError(Context context, String error)   
//或  
public static void reportError(Context context, Throwable e)


8.社交统计(统计程序调用社交软件时用这个)

UMPlatformData platform = new UMPlatformData(UMedia.SINA_WEIBO, "user_id"); 
platform.setGender(GENDER.MALE); //optional   
platform.setWeiboId("weiboId");  //optional   
MobclickAgent.onSocialEvent(this, platform);

UMeida meida 平台枚举类型(必填)
String user_id 用户的id(必填)
String weiboId 微博id
String name 用户姓名
GENDER gender 用户性别

9. 杀死进程

如果开发者调用 Process.kill 或者 System.exit 之类的方法杀死进程,请务必在此之前调用此方法,用来保存统计数据。

MobclickAgent.onKillProcess(Context context)


10.我没有写到的东西(也是并没有仔细看也看不懂的东西阿鲁)

10.1在webview中统计自定义事件
如果你的页面中使用了WebView 嵌入HTML,js 的代码,并且希望统计HTML中的点击事件,比如点击了某个链接的次数, 这时你需要阅读下面的文档,通过友盟的 js 接口来统计相关的事件。注意如果你的HTML是运行在浏览器的,那么还 是无法统计的,下文仅针对使用WebView 加载 网页的情况。

1.java代码集成 首先要找到你的WebView对象,并做下面的初始化工作。

WebView webview = (WebView) findViewById(R.id.webview); new MobclickAgentJSInterface(Context, webview);

public MobclickAgentJSInterface(Context context, WebView webview, WebChromeClient client) 

context 当前Activity引用
webview 当前的WebView对象
client WebChromeClient 实例,如果开发者实现了自己的WebChromeClient,那么请传入这个实例

public MobclickAgentJSInterface(Context context, WebView webview)

context 当前Activity引用
webview 当前的WebView对象

2.集成了上面的代码后,我们将会监听友盟的 js 代码调用。js 代码集成在网页端,请添加如下的 js 代码:

<script type="text/javascript">

function onEvent(tag, label, duration) {
    prompt("event", JSON.stringify({tag:tag,label:label, duration:duration}));
}

function onKVEvent(tag, map, duration) {
    map.id = tag;
    map.duration = duration;

    prompt("ekv", JSON.stringify( map ));
}

</script>  

这里面提供了两个js接口,分别用来统计自定义事件和K-V对形式的KV事件,并且和Java接口有如下的映射:

onEvent(tag) -> MobclickAgent.onEvent(Context context, String tag); 
//tag 传入字符串
onEvent(tag, label)-> MobclickAgent.onEvent(Context context, String tag, String label);
// tag ,label 传入字符串
onEvent(tag, '',  du) -> MobclickAgent.onEvent(Context context, long duration);
// tag 传入字符串, 第二个变量 传入空字符串, du 传入 数值类型
onEvent(tag, label, du) -> MobclickAgent.onEvent(Context context, String tag, String label, long du);
// tag, label 传入字符串, du 传入数值类型
onKVEvent(id, {} ) -> MobclickAgent.onEvent(Context context, HashMap map);
// id 传入字符串, 第二个参数传入 js 对象eg:{'item':'gun','type':'weapon'}
onKVEvent(id, {} , du) -> MobclickAgent.onEvent(Context context, HashMap map, long du);
// id 传入字符串, 第二个参数传入 js 对象eg:{'item':'gun','type':'weapon'}, du 传入 数值类型

示例:

<a onClick="onEvent('click')"> SimpleEventa>
<a onClick="onEvent('click','button')"> EventWithLabel a>
<a onClick="onEvent('play','music',123)"> EventWithLabelAndDuration a>
<a onClick="onEvent('play','',123)"> EventWithDuration a>

<a onClick="onKVEvent('buy',{'item':'gun'})"> KVEvent a>
<a onClick="onKVEvent('play',{'music':'blue'}, 123)"> KVEventWithDuration a>

实现原理:
如您所见,我们提供的 js 接口,最后都会调用一个 prompt(…) 方法, 然后我们通过拦截 prompt 接口的事件,得到 js 代码中的参数,然后再映射到 Java 代码上的指定方法。所以我们在第一步初始化的时候,实现了自己的WebChromeClient 然后覆盖其中的方法来完成 prompt 事件的拦截,如果您的代码中同样实现了自己的 WebChromeClient 请务必在初始化的时候,调用以下代码,并传入相应的 WebChromeClient 。

public *MobclickAgentJSInterface*(Context context, WebView webview, WebChromeClient client)

10.2日志加密设置

/** 设置是否对日志信息进行加密, 默认false(不加密). */
AnalyticsConfig.enableEncrypt(boolean enable);//6.0.0版本以前
MobclickAgent.enableEncrypt(boolean enable);//6.0.0版本及以后

10.3发送策略
发送策略设定了用户产生的数据发送回友盟服务器的频率。

Android平台的数据发送策略有两种方式:

  1. 启动时发送:新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有消息数据都在下次启动应用时发送。如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。

  2. 按间隔发送:按特定间隔发送数据,间隔时长介于90秒与1天之间。新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有数据都按间隔发送,如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。

您可以在后台 统计分析->设置->发送策略 页面自定义发送间隔,如图:

10.4代码混淆
如果您的应用使用了混淆, 请添加

-keepclassmembers class * {
   public  (org.json.JSONObject);
}

这是由于SDK中的部分代码使用反射来调用构造函数, 如果被混淆掉, 在运行时会提示”NoSuchMethod”错误。 另外,由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:

-keep public class [您的应用包名].R$*{
public static final int *;
}

把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。如果您使用5.0.0及以上版本的SDK,请添加如下命令:

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

你可能感兴趣的:(Android开发)