开发者(KaiFaX)

面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区

作者 | 钱魏Way

来源 | https://www.biaodianfu.com/app-uninstall.html

APP统计过程中看的最多的要属激活,但随着运营成本的不断上升,一定程度上我们期望获得有多少用户卸载了APP。分析App卸载情况是刚需,但如何对卸载情况进行统计却没有非常成熟的解决方案。以下整理的是一些实现方案:

目录

  • 基于系统底层的卸载统计

  • 基于推送的卸载统计

  • 通过Linux fork()进程进行监控

  • 相关文章:

基于系统底层的卸载统计

华为分析服务的统计逻辑

华为分析服务中包含了卸载分析服务。具体实现方案为通过分析服务系统的广播行为,准确捕捉App卸载事件。当用户卸载App之后,将卸载信息上报到云端。

需要注意的是华为分析服务中的卸载分析需要预装HMS Core的华为终端设备才支持。

此方案获取数据准确但只支持特定平台。

基于推送的卸载统计

友盟推送是如何统计卸载

如果一个设备上有多个集成友盟推送SDK的App的话(注意,必须是集成了友盟推送SDK的App),我们把这些个App称为一个群组或者联盟,同一个群组内的App在推送的通道上是做了很多互保和优化工作的,比如长连接通道就是在这多个App之间共享的。

同一个群组里面的App,如果有某个App发生卸载行为的话,那么这个卸载事件就可以被群组里其它没有卸载的App所知晓,该卸载事件就可以上报给服务器端,服务器端就可以知道哪台设备上哪个App被卸载了。同一个群组内的App之间互相检测卸载是一种常用的手段,但是这个要依赖于设备上集成友盟推送SDK的App有很多个,形成一个群组,如果只有1个App集成了友盟推送的话,那么这种手段是无法捕获到卸载的。群组内的App越多,卸载统计收集的效果越好。如果设备上只有1个集成友盟推送SDK的App的话,那么如何统计到这个App是否被卸载了呢?这种情况下,我们只能判断到一部分卸载的情况,外加一些其它的辅助判断信息。

那么哪部分可以统计其实还是要依赖于App群组了,假设之前这个设备上只有App A集成了友盟推送,并且A被卸载了,假设后续又安装了集成友盟推送SDK的App B,那么如果给App A发消息,消息送达设备后(因为App B在,所以消息走的是B建立长连通道), 会尝试投递给App A,因为A已经被卸载了,所以投递是不成功的,App B就能感知到这一事件,因此也可以把该卸载信息上报回友盟服务器,服务器也就知道该设备上A App已经被卸载了,其实还是要依赖于设备上的App群组功能。

如果该台设备上后续一直没能有集成友盟推送SDK的App被安装,那么我们只能通过粗糙的看多少天不活跃,比如180天不活跃的App,我们认为这台设备上App已经被卸载了(有一定的偏差,比如某些工具类App,有可能打开频率就非常低),这个不一定准确,但是根据活跃度做用户分层多少也能看出来App的健康度。

该方案核心逻辑是每天使用一次无声推送通知来验证仍在用户设备上安装了应用程序,难点是需要独立的APP很难实现,类似第三方的PUSH服务是最合适的。

通过Linux fork()进程进行监控

具体实现方案:

  • App第一次安装启动时,加载一个可执行Bin文件,在Bin文件中 fork 出一个子进程,然后让父进程先退出,子进程变为僵尸进程继续在后台监控

  • 由于App被卸载的时候,其/data/data/$PkgName/ 下面的所有文件及目录都会被移除,因此可以在该目录下放一个文件,通过监控该文件是否被移除来感知App是否被卸载了。例如:/data/data/$PkgName/feedback,监控文件被移除可以用C函数:inotify_init, inotify_add_watch, inotify_rm_watch (这三个标准C函数的用法,自行脑补吧)

  • 当监控到/data/data/$PkgName/feedback 被移除后,有两种可能:(1)App的确被卸载了;(2)用户在应用管理里面,手动执行了“clear data” 操作;需要对这两个情况进行判断

  • 当判断App的确被卸载之后,可以直接在C层执行 “am” 命令弹出卸载反馈页面,例如 “am start -a android.intent.action.VIEW -d 卸载反馈的url”

  • 下面是可执行Bin文件C代码, 编译完后命名为so,之所以后缀为.so,是为了方便APK打包,将其放到Android工程目录libs/armeabi/libfeedback.so下面,这样当APK打包之后,安装的时候会自动释放到 “/data/data/com.test.app/lib/” 目录。

即启用c语言的fork()进程,使用jni技术,监听data/data/包名 是否存在。在android5.0更新以后,这种方法失效,c语言启用的fork()进程同样被杀死,其版本做到了“同包名杀”,“同task杀”,“同进程组杀”,所以无法实现。

参考链接:

  • Android监听自身卸载,弹出用户反馈调查(https://blog.csdn.net/xiangzhihong8/article/details/49703611)


1. 回复“m”可以查看历史记录;

2. 回复“h”或者“帮助”,查看帮助;

开发者已开通多个技术群交流学习,请加若飞微信:1321113940  (暗号k)进开发群学习交流

说明:我们都是开发者。视频或文章来源于网络,如涉及版权或有误,请您与若飞(1321113940)联系,将在第一时间删除或者修改,谢谢!

开发者:KaiFaX

面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区

APP卸载量统计方案相关推荐

  1. App刷量刷友盟方案

    App刷量刷友盟方案 其他缘由就不再说了, 能点进这篇文章,就说明也是无奈. 现在创业公司的艰难也是很无奈, 为了给投资人一个美好的数据报表与愿景,而现实又是如此的残酷. 这件事是如此的违背职业道德, ...

  2. App全渠道推广统计方案解析

    在移动端,渠道推广的形式有多复杂?你可以在微信.抖音.微博等第三方App投放线上广告,也可以通过地推.地铁.公交车等线下渠道引流,还可以与其他App换量.鼓励用户邀请好友.短信邮件推广等,甚至可以跟专 ...

  3. App全渠道推广统计方案

    做过 App 运营岗位,肯定提过类似的需求: 自然新增渠道:自然新增的用户,想知道他们都是从哪下载了 App,以为初步分析下载原因,好在后续提供个性化推荐等服务. H5 推广渠道:开展活动需要分发大量 ...

  4. App地推数据统计方案:解决业绩结算、渠道归因难题

    地推是当下App获客的最有效手段之一,相较于线上推广和渠道买量,有效的地推不仅能更精准的定位目标用户,还可以在短时间内快速起量,尤其适合O2O产品和冷启动时期推广. 作为地推活动开展的重要一环,地推数 ...

  5. App渠道推广统计:安卓渠道分析和渠道效果统计方法

    随着移动互联网的飞速发展,移动端入口的碎片化时代已经到来,只有掌握用户的内容渠道,就有了移动端入口的能力.APP想要获取用户,就需要借助渠道的力量.下面介绍一些主流的推广渠道和统计方法. 常见的App ...

  6. 移动App多渠道推广统计

    "我在广告上的投资有一半是无用的,但是问题是我不知道是哪一半."这是百货商店之父约翰.沃纳梅克一百多年前提出的广告界"哥德巴赫猜想". 放在今天也是同样的道理, ...

  7. 友盟页面访问路径全量统计功能上线啦!

    友盟友都知道,页面访问路径,不仅能够帮助开发者了解 App 各个页面的访问和跳转数据情况,也能对用户的行为做一个好的数据追踪. 友盟页面访问路径针对用户在具体操作过程中的行为,将已有的页面访问路径改版 ...

  8. 和无用代码说再见!阿里文娱无损代码覆盖率统计方案

    作者 | 阿里巴巴文娱高级无线开发工程师 孙珑达 责编 | 屠敏 背景 为了适应产品的快速迭代,通常大量的研发资源会投入在新功能的开发上,而针对无用功能的治理却很少被关注.随着时间的推移,线上应用会积 ...

  9. APP开发技术架构方案

    近日,小程序百度搜索指数在7000左右,而APP搜索指数在12000左右,单从搜索指数看,APP的搜索量是小程序搜索量的1.7倍左右.虽然小程序开发目前比较火爆,但是APP开发需求量依然比较大,APP ...

最新文章

  1. Python外壳:代码结构!(IF WHILE FOR RANGE...)
  2. 每日一皮:我们最要避开的山寨产品...
  3. python简单代码 春节集五福-新年福利来一波之Python轻松集齐五福(demo)
  4. 自学python要下载什么软件-Python学习需要安装的工具
  5. 深度学习数据集+模型说明
  6. 企业架构(四)——联邦企业架构(FEA)
  7. Github怎么删除之前的项目
  8. 4018-基于非递归的二叉排序树的结点的查找和插入(C++,附思路)
  9. ASP.NET MVC路由扩展:路由映射
  10. 机器人分拣技术与产品提供商“三维通”获2000万元Pre-A轮融资...
  11. Leaning perl 第2章练习题答案
  12. 方差、标准差(均方差),均方误差、均方根误差
  13. webstorm 配置webserver选项,让其他ip设备可访问(如手机等测试效果) ...
  14. 记第一次自己组装台式机
  15. 一题多解×2(流的概念+递归)
  16. [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
  17. 开发者必读的十大经典书籍
  18. SOFR, So Far ... So Good?
  19. java面试题 sql_SQL 面试题目及答案 | java面试题
  20. JS监听页面元素删除子节点、增加子节点、修改子节点的内容

热门文章

  1. 荐书 | 当我们在谈论死亡时,应该说些什么?
  2. IntelliJ IDEA编译项目报错 xxx包不存在 或 找不到符号
  3. excel2003 颜色筛选问题
  4. 什么是ROC与AUC以及如何使用
  5. Unable to allocate 129792KB bitmaps for parallel garbage collection for the requested 4153344KB heap
  6. 什么是深度学习?45分钟理解深度神经网络和深度学习 刘利刚教授
  7. 初次登录Ubuntu20.04 server如何连接WIFI
  8. 庄子 内篇 齐物论第二
  9. 在App Inventor中实例:画画(Canvas组件)
  10. pyecharts:雷达图