plsql无监听程序_埋点全解3:应用程序启动之冷启动和热启动

62027ffe59f9b27e385cd6f7e4110634.png

应用程序的启动,一般情况下,大致可以分为两类场景:
• 冷启动
• 热启动(从后台恢复)

不管是冷启动还是热启动,触发 $AppStart 事件的时机,都可以理解成是当“应用程序开始进入前台并处于活动状态”, 也即前文介绍的 Active 状态。

因此,为了实现 $AppStart 事件的全埋点,我们可以注册监听 UIApplicationDidBecomeActiveNotification 本地通知, 然后在其相应的回调方法里触发 $AppStart 事件。

通过测试可以发现,仍有以下几个特殊场景存在问题:
• 下拉通知栏并上滑,会触发 $AppStart 事件
• 上滑控制中心并下拉,会触发 $AppStart 事件
• 双击 Home 键进入切换应用程序页面,最后又选择当前应用程序,会触发 $AppStart 事件
以上几个场景均会触发 $AppStart 事件,明显与实际情况有所不符。
那这些现象是什么原因导致的呢?

我们继续分析可以发现以下几个现象:
• 下 拉 通 知 栏 时,系 统 会 发 送 UIApplicationWillResignActiveNotification 通 知;上 滑 通 知 栏 时,系 统 会 发 送 UIApplicationDidBecomeActiveNotification 通知
• 上滑控制中心时,系统会发送 UIApplicationWillResig- nActiveNotification 通知;下拉控制中心时,系统会发送 UIApplicationDidBecomeActiveNotification 通知
• 双击 Home 键进入切换应用程序页面时,系统会发送 UIApplicationWillResignActiveNotification 通 知,然 后 选择当前应用程序,系统会再发送 UIApplicationDidBe- comeActiveNotification 通知
很容易总结出规律:在以上几个场景下,系统均是先发送 UIApplicationWillResignActiveNotification 通 知,然 后 再 发 送 UIApplicationDidBecomeActiveNotification 通 知。而我们又是通过注册监听
UIApplicationDidBecomeActiveNotification 通知来实现 $AppStart 事件全埋点,因此均会触发 $AppStart 事件。

那如何解决这个问题呢?
在解决这个问题之前,我们先看另一个现象:不管是冷启 动还是热启动,系统均没有发送 UIApplicationWillResig- nActiveNotification 通知。
因此,只要在收到 UIApplicationDidBecomeActiveNoti- fication 通知时,判断之前是否收到过 UIApplication- WillResignActiveNotification 通 知,若 没 有 收 到,则 触 发 $AppStart 事件;若已收到,则不触发 $AppStart 事件。 这样即可解决上面的问题。

另外,还有被动启动

被动启动?什么意思?完全没有听说过!

你若有这些疑问,那就对了!因为这完全是我们神策数据 自创的一个名词。
在 iOS 7 之后,苹果新增了后台应用程序刷新功能,这个 功能允许操作系统在一定的时间间隔内(这个时间间隔根 据用户不同的操作习惯而有所不同,可能是几个小时,也 可能是几天),拉起应用程序并同时让其进入后台运行, 以便应用程序可以获取最新的数据并更新相关内容,从而可以确保用户在打开应用程序的时候可以第一时间查看到 最新的内容。例如新闻或者社交媒体类型的应用程序,可以使用这个功能在后台获取到最新的数据内容,在用户打开应用程序时可以缩短应用程序启动和获取内容展示的等 待时间,最终提升产品的用户体验。
后台应用程序刷新,对于用户来说可以缩短等待时间;对于产品来说,可以提升用户体验;但对于数据采集 SDK 来说,可能会带来一系列的问题,比如:当系统拉起应用 程序(会触发 $AppStart 事件)并同时让其进入后台运行时, 应用程序的第一个页面(UIViewController)也会被加载, 也即会触发一次页面浏览事件($AppViewScreen 事件), 这明显是不合理的,因为用户并没有打开应用程序,更没 有浏览第一个页面。其实,整个后台应用程序刷新的过程, 对于用户而言,完全是透明的、无感知的。

因此,在实际的数据采集过程中,我们需要避免这种情况 的发生,以免影响到正常的数据分析。


我们把由 iOS 系统触发的应用程序自动进入后台运行的启 动,称 之 为(应 用 程 序 的)被 动 启 动,使 用 $AppStartPassively 事件来表示。


后台应用程序刷新是最常见的造成被动启动的原因之一。 而后台应用程序刷新只是其中一种后台运行模式,还有一 些其它后台运行模式同样也会触发被动启动,我们下面会 详细介绍。
使用 Xcode 创建新的应用程序,默认情况下后台刷新功 能 是 关 闭 的,我 们 可 以 在 Capabilities 标 签 中 开 启 Background Modes,然后就可以勾选所需要的功能了, 如下图所示 :

fa935472d148abc626c9ad044fb5f144.png


通过上图我们可以看到,还有如下几种后台运行模式,它们同样也会导致触发被动启动($AppStartPassively 事件):


• Location updates:此模式下,会由于地理位置变化而触发应用程序启动
• Newsstand downloads:这种模式只针对报刊杂志类应用程序,当有新的报刊可下载时,会触发应用程序启动
• External Accessory communication:此模式下,一些 MFi 外设通过蓝牙或者 Lightning 接头等方式与 iOS 设备连接, 从而可在外设给应用程序发送消息时,触发对应的应用程序启动
• Uses Bluetooth LE accessories:此模式与 External Accessory communication 类似,只是无需限制 MFi 外设,而需要 的是 Bluetooth LE 设备
• Acts as a Bluetooth LE accessory:此模式下,iPhone 作为一个蓝牙外设连接,可以触发应用程序启动
• Background fetch:此模式下,iOS 系统会在一定的时间间隔内触发应用程序启动,去获取应用程序数据
• Remote notifications:此模式是支持静默推送,当应用程序收到这种推送后,不会有任何界面提示,但会触发应用程序启动 。

关于 iOS 应用程序状态更详细的内容,及 iOS 更多内容,可点击下方白皮书了解

《iOS 全埋点技术白皮书》 | 神策图书馆 | 神策数据​www.sensorsdata.cn
bdc1f06c8645ed406ba26fda5cab5e0c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值