应用生命周期
页面隐藏或应用退后台时,SDK 会尝试发送待发事件。后台执行时间由浏览器或操作系统决定,不能保证立即送达;未确认事件会留在可用的本地队列中。
后台发送
| 平台 | 行为 | 接入时需注意 |
|---|---|---|
| Web | 页面隐藏或离开时尝试发送;必要时使用受限的 keepalive 请求 | 备用请求不得超过 60,000 字节,不能确认队列;内存后备不能跨页面关闭恢复 |
| Android | SDK 默认观察应用前后台,前台期间按 flushIntervalSeconds 由协程调度;退后台时尝试发送并请求 WorkManager 恢复 | 不启动 SDK 自有常驻 Service 或保活进程;系统可能延后后台任务 |
| iOS | 进入后台时申请有限执行时间尝试发送 | Background URLSession 是可选配置,需由应用转交系统回调;上划强退后不保证继续传输 |
后台发送和队列恢复均受授权、网络及实际存储后端影响。Android 退后台时尽力 flush 并请求 WorkManager 一次性任务;队列如已退化为内存存储,进程结束后不能恢复。存储和重试规则见离线队列与重试。
应用状态与分析会话
| 数据 | 表示什么 |
|---|---|
sessionId | 分析会话标识。Web 默认 30 分钟无事件后轮换;Android/iOS 默认有 30 秒后台宽限期。当前不发送 $session_start / $session_end。 |
$sdk_lifecycle | 可选的状态事件,只记录 active/inactive 状态,不代表 Session 开始或结束。 |
$app_start / $app_end | 应用进入前台、退入后台的观测;$app_end 产生时,分析会话不一定结束。 |
Web 可选路由插件在首屏及路由切换时记录 $pageview 事件;Android 默认监听应用前后台,iOS 应用状态事件需由可选 UIKit 适配器或应用显式转发。手工记录页面事件时,避免与自动采集重复。各平台配置见 Web 自动采集、Android SDK 和原生 UI 集成。
深链事件
深链地址可能包含用户信息。SDK 会去除 URL 中的凭据、查询参数和片段;路径仍可能包含敏感信息,接入方需检查允许的来源和路径。iOS 自动适配器按 HTTPS Host 或 Scheme 白名单接收;Android 冷启动自动采集按 Activity 和 HTTPS Host 白名单接收。Android 热启动转发和直接 API 调用的目标范围由宿主检查。
iOS
可选 UIKit 模块通过应用的系统回调转交链接:
swift
import TrackBusinessSDKUIKit
let deepLinks = TrackBusinessDeepLinkIntegration(
sdk: sdk,
options: TrackBusinessDeepLinkOptions(allowedHTTPSHosts: ["app.example.com"])
)
func scene(_ scene: UIScene, openURLContexts contexts: Set<UIOpenURLContext>) {
contexts.forEach { deepLinks.capture(url: $0.url) }
}Android
冷启动配置见Android API。热启动由应用验证链接后转交:
kotlin
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val uri = intent.data ?: return
if (intent.action == Intent.ACTION_VIEW &&
uri.scheme.equals("https", ignoreCase = true) &&
uri.host == "app.example.com") {
sdk.recordDeepLinkIntent(intent)
}
}使用 ComponentActivity 时,也可调用 ComponentActivityDeepLinkIntegration.install(activity, sdk) 安装可选转发。它不复用冷启动白名单;同一入口请只选择一种热启动记录方式,避免重复事件。