Android 学习之追踪应用的安装情况

先上结论,急用的话直接看结论

  • 结论
    • 一、借助 API 读取安装信息,然后上报
    • 二、借助手动埋点,然后上报
    • 三、对比
  • 前提
  • 过程

结论

一、借助 API 读取安装信息,然后上报

通过 PackageManagerAPI,我们可以得知自身应用安装相关的信息(甚至特定条件下其他应用安装相关的信息也可以!!!),如哪个应用启动的安装请求,安装请求经过哪个应用执行的安装操作,正在安装的目标应用是哪个,是通过应用市场安装的还是下载安装的等等。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    // 返回值为安装相关的信息
    // mInitiatingPackageName
    // mInitiatingPackageSigningInfo
    // mOriginatingPackageName
    // mInstallingPackageName
    // mUpdateOwnerPackageName
    // mPackageSource
	packageManager.getInstallSourceInfo(packageName)
} else {
    // 返回值为唤起安装的应用包名
	packageManager.getInstallerPackageName(packageName)
}

二、借助手动埋点,然后上报

给不同的渠道包,设置同一个字段但是不同的值,应用启动后上报这个值,借此来标记不同的来源,如友盟UMENG_CHANNEL

三、对比

  1. 借助 API :
  • 可以知道包最终被谁安装,但是不知道最初分发的来源。可以相对准确的知道应用在各大市场的安装情况,不会因为其他推广方式而导致数据异常,比如某个博主向他的私域流量发送了他从市场 A 下载的应用。
  • 可以不用为每个渠道单独埋点
  • 可以明确知道哪些市场或者应用在帮助你推广你的应用
  1. 借助手动埋点:
  • 可以知道最初分发的来源,但是不知道最终被谁安装。相比 API 更加适用于只在意结果,不论过程的运营,比如给应用市场 B 的包,不管他是在市场上推广下载,还是说市场交给第三方进行代运营,只要最终达到推广效果。
  • 可以获取特定的运营手段带来的效果
  1. 如果用实体物品的销售来比喻,那么借助 API 就是可以清楚每个零售商的销售情况,借助手动埋点可以清楚每个经销商的销售情况。

前提

了解过移动端应用运营的同学,一定接触过 “渠道” 这个概念。
所谓的 “渠道” 简单的理解一下,从用户角度来说就是他获得我们应用包的 “方式” ,从运营方角度来说就是推广应用包的 “方式”

这个 “方式” 可以是通过应用市场推广,可以是通过应用内推广,也可以是用户之间的分享推广等。
推广
这个渠道是数量众多且方式多变的,放到应用上面来说,比如现在有个应用 A,你可以上架到各大应用市场,可以在应用 B 里面去引导用户下载应用 A,当然也可以在 QQ 群或者微信群里面发给网友使用。

既然渠道是数量众多且方式多变,那么我们如何去确保我们的推广渠道是有效的,甚至是高效的,第一想法应该就是看我们的应用通过哪种渠道被安装的数量,数量越大,说明推广效果越好,那我们就应该越重视这个渠道!

那么如何去追踪我们应用的安装情况就至关重要了,这里我们把情况简化,从技术的角度来看待和研究以下两个情况:

  • 用户从应用市场上安装我们应用的情况(API 和手动埋点)
  • 用户通过哪些手段安装我们应用的情况(API)

过程

秉承着不要重复造轮子,除非轮子不能满足你需求的原则,一直以来我都是借助第三方统计平台进行统计,使用最多的是 “友盟” 平台,使用简单就没有考虑其他的方案。每次有新应用要接入渠道统计的时候就接入友盟,简单的修改一下 Manifest 文件的 meta-data。然后上线后,后台就可以看到数据了,私以为统计平台都是通过这样的方案来统计渠道。

后来有一些应用,接入了其他的统计平台,一开始渠道统计的需求很低,也就没有注意是否支持此类信息的统计,直到有一天,需求的优先级高了,所以着手去看,发现它竟然是支持的,而且可以统计各个应用市场的实际安装情况,这就让人疑惑,自己没有写入特定信息,包也没有差异化处理,甚至一些市场都没有上架,是被市场自己爬取的,为什么统计平台可以区分呢!

仔细研究了后台给到的数据,可以看出,统计出的分类大多是包名,也有个别是单纯的英文单词,检索发现这些包名,一些是应用市场,一些是特定软件,而英文单词指的是网页和手动。相比于认为这是市场渠道的安装信息,更准确的说是不同手段的安装信息,市场只是其中的一种。

刚看到数据的时候,有两个想法:

  • 每个应用市场都接入了这个统计平台,市场给的数据
  • 安装包被市场写入了信息,统计平台读取了这个信息

但是很快就被自己否定了,毕竟有些异想天开,不切实际。最有力的证据就是分类信息当中不全是市场,还有特定软件,市场也不是铁板一块,非要安装这个统计平台。

后来灵光一闪,有没有可能是 Android 系统提供给统计平台的呢,毕竟应用最终都安装在了系统上,应用的情况系统应该是最清楚的才是,于是从系统提供的 API 入手,最终发现 PackageManager 竟然有 API 提供应用安装相关的来源信息。(推测是应用执行安装相关的流程时,系统在各环节记录下来的)

⚠️⚠️⚠️注意,提供的是应用安装相关的来源信息,而不是应用的来源信息,毕竟你这个应用的安装包是从哪里获得的,系统又怎么会知道呢,或许是朋友推荐给你的,或许是你从哪个论坛下载的,或许是应用市场上面下载的,系统无从得知,但是哪个程序唤起系统进行安装的,系统是一清二楚。就好像,你去驾校报名考驾照,报名费怎么来的,可能是你父母给的,也可能是你自己挣的,甚至是你捡到的,驾校不知道也不感兴趣,但是是谁来报名考试的,驾校就会接触到并且知道。
安装来源
那么根据谁唤起系统进行安装,就可以反过来推测包的来源,这个结论严格意义来说是不准确的,但是却很有参考价值,毕竟现在的应用分发交互流程,基本上都是下载后直接唤起安装,提高安装率,大多数的用户也不会闲的下载完,关闭唤起的安装程序,然后去文件夹里面找到这个程序,然后再点击安装!(不过也存在不直接安装的场景和可能性,所以说不准确,但是有参考价值


本文只是自己的一些拙见!具体的应用场景和优缺点还有很多,并非只有文中提到的几点,这里抛砖引玉,欢迎相互讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/456169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS中position的属性有哪些,区别是什么

position有以下属性值: 属性值概述absolute生成绝对定位的元素,相对于static定位以外的一个父元素进行定位。元素的位置通过left、top、right、bottom属性进行规定。relative生成相对定位的元素,相对于其原来的位置进行定位。元素的位置通过…

Python docx学习笔记

个人学习笔记。 1 工具介绍 python-docx 是用于创建可修改 微软 Word 的一个 python 库,提供全套的 Word 操作,是最常用的 Word 工具。 1.1 基本概念 Document:是一个 Word 文档 对象,不同于 VBA 中 Worksheet 的概念&#xf…

基于HttpClient实现的微信用户登陆微信小程序

目录 HttpClient介绍 微信小程序登陆 代码编写 导入HttpClient的Maven坐标 微信小程序获得临时Code并将其传至开发者服务器 开发者服务器构建url,并获取openid,并传给微信小程序 HttpClientUtil的封装的doGet方法 参考链接 HttpClient介绍 httpC…

【Java - 框架 - Mybatis】(02) SpringBoot整合Mybatis操作Mysql - 快速上手

“SpringBoot"整合"Mybatis"操作"Mysql” - 快速上手; 环境 Java版本"1.8.0_202";Spring Boot版本"2.5.9";Windows 11 专业版_22621.2428;IntelliJ IDEA 2021.1.3(Ultimate Edition)&a…

[Java并发编程] Java开发必须知道的synchronized关键字

前言 在Java后台开发或者Android开发中,synchronized出现的频率并不算低。本文就什么是synchronized,如何使用synchronized以及synchronized的实现原理做深入的讲解,揭开synchronized神秘面纱,有助于大家掌握synchronized的用法并…

生成式AI来袭,FOSS全闪对象存储应时而生

AI大模型正飞速跃进,从引领文本生成革命的ChatGPT到开创文生视频新纪元的Sora,多模态交互技术连续迭代,促进了智算中心的快速落地。在这一过程中,算力的迅猛增长对存储系统提出了更高的要求和挑战。为满足这些日益增长的需求&…

校园生活信息平台:Java+Vue+MySQL全栈实践

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

机界先锋:Figure 01实现全面沟通与AGI通用人工智能的征途

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

idea安装了某个插件之后启动报错打不开怎么办

刚才安装了个这个插件 然后重启的时候就报错了 如下 不用慌,看一下报错日志,找到插件的位置给他删了就行了,往下拉一点 找到这个文件给他删了,再启动就好了。记得删之前先把上面这个报错弹框关了,不然会提示文件占用不…

阿里云第一次面试记录

java多态? 多态表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例 Fu f Zi z(); 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作 特点: 对象类型和引用类型…

wordpress博客趣主题个人静态网页模板

博客趣页面模板适合个人博客,个人模板等内容分享。喜欢的可以下载套用自己熟悉的开源程序建站。 博客趣主题具有最小和清洁的设计,易于使用,并具有有趣的功能。bokequ主题简约干净的设计、在明暗风格之间进行现场切换。 下载地址 清新个人…

未来已来:科技驱动的教育变革

我们的基础教育数百年来一成不变。学生们齐聚在一个物理空间,听老师现场授课。每节课时长和节奏几乎一致,严格按照课表进行。老师就像“讲台上的圣人”。这种模式千篇一律,并不适用于所有人。学生遇到不懂的问题,只能自己摸索或者…

ctf_show笔记篇(web入门---代码审计)

301:多种方式进入 从index.php页面来看 只需要访问index.php时session[login]不为空就能访问 那么就在访问index.php的时候上传login 随机一个东西就能进去从checklogin页面来看sql注入没有任何过滤 直接联合绕过 密码随意 还有多种方式可以自己去看代码分析 30…

【OpenCV实战】基于OpenCV中DNN(深度神经网络)使用OpenPose模型实现手势识别详解

一、手部关键点检测 如图所示,为我们的手部关键点所在位置。第一步,我们需要检测手部21个关键点。我们使用深度神经网络DNN模块来完成这件事。通过使用DNN模块可以检测出手部21个关键点作为结果输出,具体请看源码。 二,openpose手势识别模型 OpenPose的原理基于卷积神经网…

购物平台为何要添增短视频部件?是应时代发展还是别有用心?

每天五分钟讲解一个商业模式,大家好我是模式设计啊浩。 不知道大家有在购物商城平台刷过短视频吗,不管怎么说啊浩是有这样做过的,甚至一度觉得还挺有意思的。有时候本来只是想去买件衣服,结果商城刷了五分钟,短视频就刷…

SpringBoot配置达梦数据库依赖(达梦8)

maven配置 <!-- 达梦数据库 --><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version></dependency><dependency><groupId>com.alibaba&l…

利用位运算符设置标志位

在写程序的过程中&#xff0c;会碰到需要修改标志位的情况。比如需要设置一个文件标识符可读或可写&#xff0c;首先想到的是利用int变量&#xff08;1表示不可读不可写 &#xff0c;2表示不可读可写&#xff0c;3表示可读不可写&#xff0c;4表示可读可写&#xff09;。但是这…

ChatGPT提问技巧——对话提示

ChatGPT提问技巧——对话提示 对话提示是一种允许模型生成模拟两个或多个实体之间对话的文本的技术。 通过向模型提供上下文和一组角色或实体&#xff0c;以及他们的角色和背景&#xff0c;并要求模型生成他们之间的对话。 因此&#xff0c;应向模型提供一个上下文和一组角色…

中国工程精英智创数字工厂——2023纵览基础设施大会暨光辉大奖赛观察 (下)

中国工程精英智创数字工厂 ——2023纵览基础设施大会暨光辉大奖赛观察 &#xff08;下&#xff09; 吴付标 中国制造的尽头是智能化、智慧化&#xff0c;这一趋势正在加速前进。2022年&#xff0c;中国以50座达沃斯论坛盖章认证的“灯塔工厂”数量冠绝全球&#xff0c;而“数…

Javascript的Execution Context

概要 本文主要通过一个实例&#xff0c;来理解什么是Javascript中的Execution Context&#xff0c;以及在JavaScript执行过程中&#xff0c;Execution Context是如何工作的。 基本概念 事实上&#xff0c;我们可以理解为JavaScript代码在一个盒子中执行&#xff0c;而这个盒…