前 言

友盟(Umeng),2010年4月在北京成立,是中国最专业、最有数据凝聚力的移动开发者服务平台。友盟以移动应用统计分析为产品起点,发展成为提供从基础设置搭建-开发-运营服务的整合服务平台,致力于为移动开发者提供专业的数据统计分析、开发和运营组件及推广服务。2013年10月推出“一站式“解决方案,服务包含移动应用统计分析以及细分行业的移动游戏统计分析、社会化分享组件、消息推送、自动更新、用户反馈、错误分析等产品。
友盟提供iOS、Android和Windows Phone等多平台服务。目前,国内主流开发者大多是友盟的用户,已有超34万计的移动应用从友盟服务中获益。
——来自百度百科

友盟对移动APP统计原理

  • 新增用户统计原理
    Android系统根据IMEI号+MAC地址标识设备(独立用户)的唯一性;iOS系统根据OpenUDID标识设备(用户)的唯一性;WP系统根据ANID标识设备(用户)的唯一性,用户联网启动应用之后才能统计到。

  • 友盟启动次数的统计原理
    在每个Activity的开始和结束时分别调用onResume和onPause方法.
    当一个onResume方法与上一个Activity的onPause方法相差30秒,标志新session的开始;当一个onPause方法发生后30秒内没有再触发任何一个Activity的onResume方法,标志该session结束。
    如果应用Crash, Android平台处理成onPause, 照例通过30秒规则来判断是否是session的终止.
    即Android平台一次完整的启动包括如下三种情况:
    1.从启动应用到关闭应用
    2.从启动应用到应用退至后台,且在后台运行时间超过30s
    3.启动应用后设备黑屏,黑屏时间超过30s
    符合以上三种情况的前提下,Android启动次数+1.

  • 友盟单次使用时长的统计原理
    app的单次使用时长=本次启动的结束时间减去本次启动的开始时间,即end_time减去start_time。
    如果在本次启动过程中,应用退到后台运行(例如启动应用的过程中接了个电话,接电话的时候应用会退到后台运行),后台运行时间不超过30s,则此时间会被计算到应用的单次使用时长中;后台运行时间超过30s,则视为本次使用结束,运行到后台的时间不会被计入单次使用时长中。

开发环境

Android Studio 3.1.2
JDK 1.8

开发前准备

集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得AppKey。(友盟官网)

Android Studio集成模式

  • 添加统计SDK在maven中心库的线上依赖
    通过在Android Studio工程build.gradle配置脚本中添加maven线上依赖,导入最新版本组件化统计SDK。
注意:统计SDK必须依赖基础组件库。所以需要加入对应依赖:
implementation 'com.umeng.sdk:common:latest.integration'
dependencies {...implementation 'com.umeng.sdk:common:latest.integration'implementation'com.umeng.sdk:analytics:latest.integration'
}
  • 如果无法正常集成请添加如下配置:
allprojects {repositories {mavenCentral()     }
}
  • 在Android Studio 3.1及以上版本中添加maven依赖
    在Android Studio 3.1及以上版本开发环境下,指定引用最新版本依赖写法”latest.integration”可能导致下载库超时,此时需要指定具体版本号。
dependencies {...implementation 'com.umeng.sdk:common:1.5.0'implementation  'com.umeng.sdk:analytics:7.5.0'
}

在AndroidManifest.xml清单文件里授权相应的权限

    <!-- 必须的权限 --><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.INTERNET" /><!-- 添加如下权限,以便使用更多的第三方SDK和更精准的统计数据 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 权限说明:
权限 用途
ACCESS_NETWORK_STATE(必须) 检测联网方式,区分用户设备使用的是2G、3G或是WiFi。
READ_PHONE_STATE(必须) 获取用户设备的IMEI,通过IMEI来唯一的标识用户。
ACCESS_WIFI_STATE(必须) 获取用户设备的mac地址,在平板设备或电视盒子上,无法通过IMEI标示设备,我们会将mac地址作为用户的唯一标识。
INTERNET(必须) 允许应用程序联网,以便向我们的服务器端发送数据。

初始化及通用接口

  • 添加初始化方法
    在项目工程的自定义application中的onCreate方法中添加以下两个方法之一。
    注意:一定要在主进程进行该项操作,如果您使用到PUSH,还需在推送进程(channel进程)同样进行该项操作`
  • 方法一:
/**- 初始化common库- 参数1:上下文,不能为空- 参数2:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机- 参数3:Push推送业务的secret
*/
UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "1fe6a20054bcef865eeb0991ee84525b");
  • 注意:如果项目的Manifest文件中已经配置【友盟+】的AppKey和Channel,则使用该方法初始化,同时不必再次传入AppKey和Channel两个参数。
    参数1:上下文,必须的参数,不能为空。
    参数2:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机。
    参数3:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空。
  • 方法二:
/**- 初始化common库- 参数1:上下文,不能为空- 参数2:【友盟+】 AppKey- 参数3:【友盟+】 Channel- 参数4:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机- 参数5:Push推送业务的secret
*/
UMConfigure.init(this, "58edcfeb310c93091c000be2", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "1fe6a20054bcef865eeb0991ee84525b");
  • 注意:
    参数1:上下文,必须的参数,不能为空。
    参数2:【友盟+】 AppKey,非必须参数,如果Manifest文件中已配置AppKey,该参数可以传空,则使用Manifest中配置的AppKey,否则该参数必须传入。
    参数3:【友盟+】 Channel,非必须参数,如果Manifest文件中已配置Channel,该参数可以传空,则使用Manifest中配置的Channel,否则该参数必须传入,Channel命名请详见Channel渠道命名规范。
    参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机。
    参数5:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空。
  • AndroidManifest清单配置文件方式初始化AppKey和channel
    为了兼容老版本的SDK,本版本中仍然支持Manifest配置文件方式设置AppKey和Channel,内容如下:
<manifest><application ……>……<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/> <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/> </application>
</manifest>
  • 完成上述步骤,【友盟+】产品的初始化就完成了,对于各组件产品的其它设置或高级功能请查看具体组件详细内容。
    注意:即使用户已经在项目AndroidManifest.xml清单配置中设置了AppKey和Channel, 新版组件化SDK还是要求必须在项目工程的自定义application中的onCreate方法中调用初始化函数UMConfigure.init,已经在AndroidManifest.xml清单配置中设置了AppKey和Channel参数的用户,初始化函数中AppKey和Channel参数可以传入null。
    Channel渠道的使用规范
    每台设备仅记录首次安装激活的渠道,在其他渠道再次安装不会重复计量。 所以在测试不同的渠道的时候,请使用不同的设备来分别测试不要改变’UMENG_CHANNEL’。
    Channel渠道的命名规范
    1.可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。
    2.首尾字符不可以为空格。
    3.不要使用纯数字作为渠道ID。
    4.最多256个字符。
    5.”unknown” 及其各种大小写形式,作为【友盟+】保留的字段,不可以作为渠道名。

通用接口

  • 设置Log开关
    初始化时(一般在MainActivity主页面文件中初始化时,下同)可以通过该方法设置组件化的Log是否输出,默认关闭Log输出。
/*** 设置组件化的Log开关* 参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(true);
  • 设置日志加密
    初始化时可以通过该方法设置日志加密。
/*** 设置日志加密* 参数:boolean 默认为false(不加密)
*/
UMConfigure.setEncryptEnabled(true);
  • 如果参数为true,SDK会对日志进行加密。加密模式可以有效防止网络攻击,提高数据安全性。
    如果参数为false,SDK将按照非加密的方式来传输日志。
    如果您没有设置加密模式,SDK的加密模式为false(不加密)。

场景类型设置接口

MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);
参数 含义
(mContext 当前宿主进程的ApplicationContext上下文。
EScenarioType.E_UM_NORMAL EScenarioType.E_UM_NORMAL 普通统计场景,如果您在埋点过程中没有使用到U-Game统计接口,请使用普通统计场景。 EScenarioType.E_UM_GAME 游戏场景 ,如果您在埋点过程中需要使用到U-Game统计接口,则必须设置游戏场景,否则所有的U-Game统计接口不会生效。

Session启动、App使用时长等基础数据统计接口API

  • 在App中每个Activity的onResume方法中调用 MobclickAgent.onResume(context),onPause方法中调用 MobclickAgent.onPause(context)。
@Override
public void onResume() {super.onResume();MobclickAgent.onResume(this);
}@Override
public void onPause() {super.onPause();MobclickAgent.onPause(this);
}
  • 注意:确保在所有的Activity中都调用 MobclickAgent.onResume() 和onPause()方法,这两个调用不会阻塞应用程序的主线程,也不会影响应用程序的性能。
    如果您的Activity之间有继承或者控制关系,请不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计,导致启动次数异常增高。(例如:使用TabHost、TabActivity、ActivityGroup时)。
    当应用在后台运行超过30秒(默认)再回到前台,将被认为是两次独立的Session(启动),例如:用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。即被认为是两个独立的Session。

Session间隔时长设置接口(一般情况下不用修改此值)

// 将默认Session间隔时长改为1秒。
MobclickAgent.setSessionContinueMillis(1000);
  • Session统计的相关问题请参见【友盟+】开发者社区:启动次数的统计原理,单次使用时长的统计原理。
    至此,基本功能集成已经结束。
    非常重要: 必须确保在所有页面对应Activity中调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,才能够保证获取正确的新增用户、活跃用户、启动次数、使用时长等基本数据。

统计结果


Android开发-在Android项目里集成友盟统计SDK进行对移动APP统计的实现相关推荐

  1. Android开发之带你轻松集成友盟统计

    友盟统计是什么呢?为什么要集成他呢? 当我们需要获取自己写的软件的装机量和用户使用信息时,这时我们可以集成友盟统计. 首先到友盟统计中注册账号什么的就不废话了,直接看创建项目: 在个人中心中的管理里面 ...

  2. 【无限互联】集成友盟分享SDK

    集成友盟分享SDK: 友盟注册:http://www.umeng.com/users/sign_up 注册之后登陆账号,点击"添加新应用"完成新应用填写之后,将进入应用管理页面.在 ...

  3. Flutter集成友盟的SDK

    集成的是友盟最新的SDK:umeng_common_sdk 1.2.3. SDK的地址: umeng_common_sdk | Flutter Package友盟+组件化基础库:Common Flut ...

  4. Android开发和測试实践 - 接入友盟统计

    这两年一直在做无线的測试,兴许还会继续去做无线的測试,可是之前由于时间的原因一直都没有非常细致的了解到代码层面. 最近抽出时间自己做了些app的开发,决定假设想把移动的測试做好做深入.有一定的app开 ...

  5. java服务器端集成友盟,Android友盟推送集成

    第一次认真集成推送,碰到了一些问题,记录一下. 首先讲一下实现原理,我们用的是友盟.Android比iOS要麻烦很多. 友盟集成是需要后端配合的,具体就是后端调用友盟的接口,向友盟推送一条消息,然后友 ...

  6. 友盟U-share sdk 分享的接入(支持Android及IOS)

    导读:公司的原生开发的APP有块功能原来需要分享小程序到微信,现在改成分享成H5的形式,携带的参数不讨论,这里记录一下. 官方文档:https://developer.umeng.com/docs/1 ...

  7. iOS开发集成友盟,腾讯QQ登录授权失败

    在项目中集成友盟,腾讯QQ登录,登录授权失败110406. 原因: app在测试阶段(未上线),授权的QQ账号和腾讯开放平台的QQ账号不是同一账号. 解决办法: 在腾讯开放平台中,应用接入--应用管理 ...

  8. php upush 友盟 推送_react-native集成友盟推送

    react-native-upush 近期由于产品需求,需要在react-native项目上集成友盟推送,笔者翻阅各种这方面资料后,看到RN论坛上面有位大神给出了具体的集成方案,请参考:react-n ...

  9. Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件,2021最新Android框架体系架构面试题

    下面是详细的集成过程: 首先来到官网:http://www.umeng.com/ 选择社会化分享,进入查看这个产品的介绍,下载对应平台的SDK,笔者这里自然是选择Android平台: 笔者集成友盟社会 ...

最新文章

  1. Mr. Process的一生-Linux内核的社会视角 (2)启动
  2. R语言学习笔记之——数据处理神器data.table
  3. STL源码剖析 heap堆结构
  4. Cloud一分钟 | 谷歌投资的AR云平台开发商Blue Vision Labs,将由美版滴滴Lyft收购
  5. 阿里云上遇到: virtual memory exhausted: Cannot allocate memory
  6. 1.2 Enterprise Library 应用程序块
  7. 如何让你的Android SDK下载或者升级快如闪电
  8. 基于linux嵌入式的开发,基于Linux的嵌入式GUI的研究与开发
  9. centos8终端fish安装
  10. 小米蓝牙音箱驱动_新品频发,小米 Air2 SE真无线蓝牙耳机即将开售
  11. 小米路由插件二维码2020_入门级Mesh首选?华来小方Mesh路由深度解析
  12. python支持arcpy的版本_ArcPy开发IDE
  13. 利用python构建马科维茨_如何用python实现Markowitz投资组合优化
  14. 高薪物联网职业生涯所需的十大技能(转)
  15. Doclist压缩方法简介
  16. 淘宝客是鸡肋还是熊掌
  17. 【书虫录】富爸爸穷爸爸
  18. php九宫格图片合成,多宫格图片合成
  19. mysql5.7.118安装_MySQL 5.7.XX zip 安装
  20. 关于用同一个Form写编辑和添加的VUE报错

热门文章

  1. 光环国际PMP:看项目经理与程序猿都是怎么吐槽绩效考核的(好文)
  2. Map对象转化为JavaBean
  3. ssdb mysql_SSDB高性能NoSQL数据库
  4. java 包装数据类型_java中的基本数据类型和包装类型
  5. 达观数据:文档智能审阅系统
  6. 阿里巴巴JAVA岗发布+内部面试题(含P5-P7)
  7. “缺位”已久的欧洲,正在补齐自动驾驶这门课
  8. 上架apple ios app 被拒绝,上架苹果应用被拒,拒绝原因2.1.0 Performance: App Completeness
  9. “禁飞令”致使无人机销售下滑,AOPA培训依旧火爆
  10. Optimized GameObject时到底发生了什么