Flurry是一家专门为移动应用提供数据统计和分析的公司。他们的数据统计分析SDK支持的平台包括iPhone, iPad, Android, Windows Phone, Java ME和BlackBerry。使用Flurry服务的公司包括eBay、Yahoo、Hulu和Skype等超过11万家公司,涉及的应用超过54万个,目前有17万名开发者使用名为“Flurry-Analytics”的分析工具。Flurry每个月监控着全球14亿个设备上的移动应用使用情况。在每一个智能设备上,Flurry平均可以获取七个应用的数据。
利用Flurry提供的分析平台,我们可以很容易地自动统计出应用的使用情况,例如:
- 每天(每周或每月)登录用户数,应用使用次数
- 每天(每周或每月)新用户数,活跃用户数
- 用户的所在地、年龄、性别的分布情况
Flurry也可以自动统计出移动设备的分类情况,例如:
- 使用3G,Wifi的会话比例
- 使用Android系统各版本(例如android 4.4, android 5.0等)的比例
- 使用Android各种设备(例如华为, 三星,小米等)的比例
除了上面介绍的自动统计项目,Flurry SDK也提供了统计用的相关API,便于我们针对自己产品的特点,做针对性的统计。例如统计应用中某个按钮的按下次数,或者网络请求的平均响应时间等。
在使用Flurry之前需要登录到Flurry进行注册。
然后登录到Flurry后台,依次选择 “Applications” -> “Add a New Application” ,增加一个需要统计分析的应用。
然后,在接下来的界面之后根据你的应用类型,Android或者IOS。在这里我选择的是Android版本。
接着,填入应用的名字和分类(名字仅用作在Flurry后台和自己的其它应用区分,不需要和应用的真实名字相同),之后点击”Create App”,如下所示:
到此,我们就成功在后台创建了一个新的应用系统和分析项目。点击下图中的”Download”,就可以下载需要继承在应用中的SDK。而下图中的提示2中的Key:SQFTCCWCCP6YVSKCQY6W则是我们在集成时用于标识自己应用的ID。
我们将下载后的SDK解压,可以看到文件列表如下。列表中对我们最重要的文件是Flurry目录下的FlurryAnalytics-6.2.0.jar文件。这个文件需要复制到android studio的工程中去。
FlurryAndroidAnalyticsReadmev6.2.0.pdf这个文件中是官方的英文文档。
ProjectApiKey.txt文件中记录了我们之前创建的应用ID,在在代码中调用SDK初使化时需要使用。
接着我们打开Android studio工程,将之前下载解压的Flurry目录拖动添加到工程的libs中,同时在工程的build.gradle文件中的dependencies代码块中加上 compile fileTree(dir: ‘libs’, include: ‘*.jar’),除此之外还需要添加谷歌服务,才能使用Flurry,如下图所示:
最后,你需要在AndroidManifest.xml中添加3个权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
首先,在MyApplication的中调用FlurryAgent.init(Context, String),初始化Flurry。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 是否打印本地的Flurry Log
FlurryAgent.setLogEnabled(true);
// 打印Log的级别
FlurryAgent.setLogLevel(Log.ERROR);
FlurryAgent.init(this, Global.FLURRY_APP_KEY);
}
}
把Flurry的使用封装到一个自定义类中,使用起来方便。
public class FlurryUtil {
public static void onStartSession(Context context) {
if (Global.ENABLE) {
try {
FlurryAgent.setLogEvents(true);
FlurryAgent.onStartSession(context);
} catch (Throwable t) {
}
}
}
public static void onEndSession(Context context) {
if (Global.ENABLE) {
try {
FlurryAgent.onEndSession(context);
} catch (Throwable t) {
}
}
}
public static void onEvent(String eventId) {
if (Global.ENABLE) {
try {
Map params = new HashMap();
FlurryAgent.onEvent(eventId, params);
} catch (Throwable t) {
}
}
}
public static void onEventUseMap(String eventId, Map map) {
if (Global.ENABLE) {
try {
FlurryAgent.onEvent(eventId, map);
} catch (Throwable t) {
}
}
}
public static void onEvent(String eventId, String paramValue) {
if (Global.ENABLE) {
try {
HashMap params = new HashMap();
params.put(eventId, paramValue);
FlurryAgent.onEvent(eventId, params);
} catch (Throwable t) {
}
}
}
public static void onEvent(String eventId, String paramKey, String paramValue) {
if (Global.ENABLE) {
long currentTime = SystemClock.elapsedRealtime();
try {
Map params = new HashMap();
params.put(paramKey, paramValue);
FlurryAgent.onEvent(eventId, params);
} catch (Throwable t) {
}
}
}
}
特别的,如果需要检测具体事件的响应时间(比如某个按钮事件),需要注意logEvent (String eventId, boolean timed),将timed参数设为true就可以记录这个event的开始执行时间,然后在你的代码中你认为事件完成的地方再调用endTimedEvent (String eventId)。这样会记录事件的整个执行时间。不过需要注意,经过我到目前的研究,不管是通过查看Analytics的分析页面,还是通过API直接获取数据。都得不到单个事件每一次执行的时间。只能得到平均(average),总体(total)。就是你这个事件执行了N次,它算N次的平均执行时间和N次相加的全部执行时间。
完成上面的自定义统计的代码并运行程序后,我们就可以从后台的Events栏中看到相应的统计结果了。
和著名的统计工具Google Analytics相比,Flurry的优点是:
Flurry缺点是:
和国内的分析平台友盟相比,Flurry的优点是:
Flurry的缺点是: