APP统计分析
用户画像
对程序员来说,用户画像就是用户的属性和行为;通俗地说,用户画像是包括了个人信息、兴趣爱好、日常行为等血肉丰满的客户实体。用户画像是精准营销的产物,企业通过收集用户的行为,然后分析出用户的特征与偏好,进而挖掘潜在的商业价值,实现企业效益的最大化。用户画像的一个具体应用是电商app的“猜你喜欢”栏目,电商平台通过对用户购买过的商品进行统计,可以分析用户日常生活用的是什么物品;电商平台还可以对用户的搜索行为、浏览行为进行统计,从中分析用户感兴趣的商品,或者说考虑购买的商品。电商平台得到包括日常生活、兴趣爱好、购买意向在内的用户画像后,自然就能有针对性的向用户推荐合适的商品,从而扩大销量、增加营业额。
下图是用户画像的一个具体例子
统计分析的内容
app进行统计分析,主要有两方面的内容:一、用户行为统计,包括
1、用户打开和关闭页面,以及在页面的停留时长;
2、用户点击行为的分布与频率;
3、用户输入的文字和图片,如搜索时的关键词、二维码的扫描信息、分享的图文内容等等;
4、用户对多媒体信息的接受程序,如听音乐的时长、看视频的时长等等;
二、运行情况分析,包括
1、app的启动时间;
2、app崩溃的日志信息;
3、app杀死进程;
友盟统计
集成步骤
1、在libs目录加入下面sdk包:umeng-analytics-v6.0.1.jar
utdid4all-1.0.4.jar
2、在AndroidManifest.xml中补充权限定义,以及meta-data参数定义,包括UMENG_APPKEY、UMENG_CHANNEL等等,其中UMENG_APPKEY需要到友盟网站上注册申请;
3、代码里先设置采集参数,然后开始采集行为事件;
MobclickAgent
友盟统计分析主要用到MobclickAgent类。下面是MobclickAgent类与设置有关的方法说明:setDebugMode : 设置是否开启调试模式。true为开启调试,false为关闭调试。
setSessionContinueMillis : 设置session的持续时间,单位毫秒。
startWithConfigure : 设置友盟的统计分析配置。该方法的参数是UMAnalyticsConfig对象,包含了appkey、渠道号、是否启用崩溃采集等等信息。
openActivityDurationTrack : 设置是否开启默认的Activity页面统计方式。true为开启,false为关闭。
setAutoLocation : 设置是否自动定位。
注意,友盟sdk的发送策略不在代码中设置,要在友盟的后台管理页面中设置。具体步骤为:点击应用名称->设置->发送策略,目前有两种:启动时发送(默认)、按间隔发送。
友盟sdk的老版本还提供了实时发送与仅在wifi下发送两种策略,但在新版本中取消了,原因如下:
1、实时发送会存在大量冗余字段的重复发送的现象,造成终端用户不必要的流量消耗;
2、仅在wifi下发送,数据的延迟会非常严重,造成数据统计结果的失真;
下面是MobclickAgent类与事件有关的方法说明:
onPageStart : 页面启动事件。
onPageEnd : 页面结束事件。
onResume : 恢复统计。
onPause : 暂停统计。
onEvent : 普通事件,一般是点击事件。
onEventValue : 复杂事件,比如说音乐播放事件。
onSocialEvent : 社会化分享事件。
onProfileSignIn : 登录事件。
onProfileSignOff : 注销事件。
onKillProcess : 杀死进程事件。
下面是友盟统计分析的代码例子:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import com.example.exmanalysis.umeng.analytics.FragmentStack;
import com.example.exmanalysis.umeng.analytics.FragmentTabs;
import com.example.exmanalysis.umeng.analytics.WebviewAnalytic;
import com.umeng.analytics.MobclickAgent;
import com.umeng.analytics.MobclickAgent.EScenarioType;
import com.umeng.analytics.social.UMPlatformData;
import com.umeng.analytics.social.UMPlatformData.GENDER;
import com.umeng.analytics.social.UMPlatformData.UMedia;
public class UmengActivity extends Activity {
private final static String TAG = "UmengActivity";
private Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_umeng);
mContext = this;
MobclickAgent.setDebugMode(true);
// SDK在统计Fragment时,需要关闭Activity自带的页面统计,
// 然后在每个页面中重新集成页面统计的代码(包括调用了 onResume 和 onPause 的Activity)。
MobclickAgent.openActivityDurationTrack(false);
// MobclickAgent.setAutoLocation(true);
// MobclickAgent.setSessionContinueMillis(1000);
// MobclickAgent.startWithConfigure(
// new UMAnalyticsConfig(mContext, "4f83c5d852701564c0000011", "Umeng", EScenarioType.E_UM_NORMAL));
MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);
}
@Override
public void onResume() {
super.onResume();
MobclickAgent.onPageStart(TAG);
MobclickAgent.onResume(mContext);
}
@Override
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd(TAG);
MobclickAgent.onPause(mContext);
}
public void onButtonClick(View view) {
int id = view.getId();
switch (id) {
case R.id.umeng_example_analytics_event_cc:
List<String> keyPath = new ArrayList<String>();
keyPath.add("one");
keyPath.add("two");
keyPath.add("tree");
MobclickAgent.onEvent(mContext, keyPath, 20, "label");
break;
case R.id.umeng_example_analytics_event:
MobclickAgent.onEvent(mContext, "click");
MobclickAgent.onEvent(mContext, "click", "button");
break;
case R.id.umeng_example_analytics_ekv:
Map<String, String> map_ekv = new HashMap<String, String>();
map_ekv.put("type", "popular");
map_ekv.put("artist", "JJLin");
MobclickAgent.onEvent(mContext, "music", map_ekv);
break;
case R.id.umeng_example_analytics_duration:
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, 12000);
break;
case R.id.umeng_example_analytics_make_crash:
"123".substring(10)