一、监管要求
1.1 监管条例
164号文(《工业和信息化部关于开展纵深推进APP侵害用户权益专项整治行动的通知》)中有提到,App在无合理场景、且未经用户明示告知和同意的情况下,禁止频繁自启动和关联启动:
《工业和信息化部关于进一步提升移动互联网应用服务能力的通知》
1.2 被通报案例
二、什么是自启动和关联启动
2.1 自启动
自启动指的是不借助其他的应用, 通过监听系统的一些事件, 或者文件变化, 通过系统的机制, 把自己的进程拉起来处理事情,这些系统的事件就包括开机广播 / 网络变化 / 媒体库扫描等。
2.1.1 开机广播
用户重启手机后, 系统会向注册了开机广播的应用发广播, 收到广播的应用就可以把自己拉起来, 开始处理对应的逻辑(如推送消息) , 对应的广播如下:
android.intent.action.BOOT_COMPLETED
2.1.2 网络变化
当用户手机网络变化包括网络连接 / 断开 / wifi 移动网络切换等操作 , 一旦发生这些事件, 系统会向对应注册了这个事件的应用发送广播,应用就可以监听这个广播来执行对应的逻辑 , 比如你在看视频时 ,提醒用户是否继续“移动流量播放”(从WIFI切换到4G/5G)wifi 断了切换成了 4G 网络。对应的广播如下:
android.net.conn.CONNECTIVITY_CHANGE
2.1.3 媒体库变化
系统监听到文件变化或者存储盘变化也会发通知给各个应用 , 比如说增加了一个图片或者文档 , 其对于的广播如下:
android.intent.action.MEDIA_SCANNER_STARTED
android.intent.action.MEDIA_SCANNER_FINISHED
android.intent.action.MEDIA_EJECT
2.1.4 第三方SDK
以上是应用自己实现的自启动,应用注册了对应的系统事件,当其触发时应用收到信号自我唤醒从而进行一系列的逻辑处理。集成了上述自启动方式的第三方SDK也能实现对App的自启动,如常见的推送类SDK(个推、极光等)
2.2 关联启动
关联启动指的是借助其他应用(App)来启动自己 , 比如说很多 App(A、B、C、D) 接入了同一个 SDK , 那么一旦你启动了接入这个 SDK 的应A ,那么这个 SDK 就可以启动同样接入了这个 SDK 的其他应用B、C、D, 达到关联唤醒的目的。这个 SDK 可以是大厂自研的通用 SDK , 也可以是三方提供的 SDK(如:极光)。
也就是关联启动主要是由第三方SDK来实现的,同时SDK也提供了相应的功能,应用可以选择不拉起其他应用 或 不被其他应用拉起,如:极光的“通道共享”功能。
三 、自启动/关联启动的目的
根本目的是为了App"保活"。试想,如果没有自启动/关联启动(或者也叫链式启动)这类功能,当App的后台进程被我们kill后,没有人为主动的去唤醒,它就成了不会主动推送消息、无法引起用户注意的“僵尸”App了,久而久之就会被用户遗忘、不再使用。
对于互联网App来讲,产品的日活/月活是其生命线、利益线,当然要想办法解决这种问题。通过自启动/关联启动可以实现在用户无感知的情况下,App进程在后台悄悄地运行着,如果此前(如首次安装、之前的使用过程中)App已被授予某些权限,如读取通讯录、位置信息、存储空间等权限时,就有可能发生App通过这些权限偷偷读取用户信息的情况,从而可能造成超范围或超频收集。
四、苹果(APNs)、谷歌(GCM)、国内的消息推送机制
4.1 苹果(APNS)
苹果手机上有苹果统一维护的消息推送服务“APNs”。
无论是iOS系统还是安卓系统,App从服务器向App客户端推送消息是常见的行为。iOS的消息推送由苹果的系统和服务器统一管理,这套信息推送机制名为苹果推送通知服务APNs(Apple Push Notification service)。用户的iPhone手机与苹果提供的APNs服务器保持长连接,应用需要推送消息时,先将这条信息的提醒推送到苹果的服务器端,再由苹果的服务器转发到目标用户手机。于是,用户的手机上就会弹出信息通知。APNs的好处是只要本地开启了推送权限,应用在未唤醒的条件下无需后台运行就能实现消息推送。因此,iOS应用不需要常驻后台,也不用随时保持网络长连接。
4.2 谷歌(GCM)
而谷歌也有一套类似的东西,叫做GCM(Google Cloud Messaging ),也是有一个专门的推送服务,原理与苹果的APNs类似,所以海外版的安卓手机,APP也不需要常驻后台,就能够接收消息推送。
4.3 国内的推送机制
然后,国内安卓生态下无法使用谷歌服务,,也没有统一的消息推送机制(信通院搞过一个统一推动联盟,意图实现统一推送的功能,但因为种种原因没有实际应用),因此各App应用、手机厂商、第三方SDK们各显神通、各自为政,造就了混乱的推送局面。
- App自身单独建立推送服务,如微信、支付宝等用户长时间使用的超级应用,会自己搭建推送服务器,通过后台驻留服务实现实时的信息推送。
- 手机厂商搭建的消息推送服务,如华为推送HMS、小米推送 MiPush等。应用开发者需要为适配不同的手机终端加入不同手机厂商的推送SDK。
- 第三方信息推送服务,对于大多数未自建推送服务器进行消息推送的应用开发者,会选择集成这类第三方信息推送SDK,实现信息推送功能。为了保证应用进程被系统清理之后依然能收到推送,有的第三方推送SDK采用了联合唤醒的机制,只要使用了同一家的SDK,启动其中一个App 的时候就会唤醒其它所有集成了该家SDK的App推送进程,以保证所有App消息推送的送达率。
四、MIUI 12 照明弹
小米手机推出的照明弹功能,能将手机应用中在后台偷摸自启动/关联启动、读取信息的各种行为全都记录下来,赤裸裸的展示在用户眼前,对于应用想要读取用户隐私信息,还能返回“空白通信证”,从而达到保护用户隐私的效果。
虚拟身份管理,支持用户换一张网络画像,避免应用对自己实现精准画像和精准营销。
Referer:
《安全绿色APP公约》:https://greenify.oasisfeng.com/app-convention.html
https://www.getui.com/college/2021072980
https://segmentfault.com/a/1190000040425606
https://www.secrss.com/articles/19663