首页 > 其他分享 >学习 | App自启动和关联启动

学习 | App自启动和关联启动

时间:2023-06-24 17:56:54浏览次数:57  
标签:App 用户 关联 应用 自启动 推送 SDK

一、监管要求

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

标签:App,用户,关联,应用,自启动,推送,SDK
From: https://www.cnblogs.com/ffx1/p/17496866.html

相关文章

  • Xcode 15 beta 2 (15A5161b) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布)
    Xcode15beta2(15A5161b)发布下载-Apple平台IDE(visonOS1beta已发布)IDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS此版本已加入visonOS支持。请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • spring框架里的spring context模块介绍,它和spring core有什么关联?
    springcontext模块介绍Spring框架是一个开源的Java开发框架,它提供了一系列的功能和工具,用于简化Java应用程序的开发。SpringContext模块是Spring框架的核心部分之一,它主要负责管理和协调应用程序中的对象。SpringContext模块的主要功能包括:IoC容器(Inversi......
  • 用applescript脚本实现检测手机号码是否注册imessage的原理
    一、检测数据的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写脚本控制Macos/iphon......
  • 逆向分析某信营业厅APP
    逆向分析某信营业厅APPAPP版本号10.3.2工具IDAFRIDAJEB抓包分析可以看到显示红色的,抓包失败。从ua中可以看到,采用的okhttp通信框架,接下来的思路就是反编译客户端,静态分析。查壳、脱壳经工具查询,得知其采用的是爱加密的壳。FridaHookfrida-U-fcom.ct.client-l1.js--no-pau......
  • 逆向分析某信营业厅APP
    逆向分析某信营业厅APPAPP版本号10.3.2工具IDAFRIDAJEB抓包分析可以看到显示红色的,抓包失败。从ua中可以看到,采用的okhttp通信框架,接下来的思路就是反编译客户端,静态分析。查壳、脱壳经工具查询,得知其采用的是爱加密的壳。FridaHookfrida-U-fcom.ct.client......
  • 连接app的封装方法
    importpsutilfrompywinauto.applicationimportApplicationfrompywinautoimportDesktop,WindowSpecificationclassConnApp:@staticmethoddefconn_single_proc_app(proc_name:str,proc_path:str,app_backend:str="win32",......
  • idea的创建与使用mapper映射文件
    一.创建mapper映射文件在设置中模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="&......
  • Dapper简单使用读写分离
    usingDapper;usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Threading.Tasks;usingSystem.Linq;usingCloudCubic.Common.LogHelper;usingCloudcubic.Common;usingSystem.Diagnostics;namespace......
  • sloans的application.properties
    #应用名称spring.application.name=spbsloans#应用服务WEB访问端口server.port=8999server.servlet.context-path=/spbsloans#配置mybatis##配置数据源信息spring.datasource.username=rootspring.datasource.password=rootspring.datasource.url=jdbc:mysql://l......
  • Uniapp仿ChatGPT Stream流式输出(非Websocket)
    前言最近写一个chagpt小程序,流式输出可以使用websocket也可以使用stream来实现,这里就不折腾websocket的了,我发现uniapp实现流式输出的方式挺多的,主要是有些小程序还不兼容,花了点时间研究了一下。EventSourceEventSource也称为SSE(Server-SentEvents),是服务器推送的一个网络事件......