我们如何防止广告打断关键用户工作流
Source: Dev.to
为什么这个问题重要
在许多移动应用中,广告会根据屏幕位置或时间规则插入,而不考虑用户当前正在做什么。从工程角度来看,这会导致几个问题:
- 打扰用户体验的往往不是具体的广告,而是广告出现的时机。
- 关键的用户工作流可能被中断,导致挫败感和参与度下降。
在构建一个生产环境的移动应用时,我们发现问题不在于展示了哪些广告,而在于何时展示这些广告。于是我们实现了一个交互感知广告抑制系统,将变现视为基于用户交互状态的运行时决策。本文重点讨论该系统的工程实现。
跟踪交互事件
第一步是在本地捕获有意义的交互信号。我们跟踪的事件示例包括:
- 屏幕点击和滑动
- 表单字段获取/失去焦点
- 页面导航过渡
- 应用内购买或其他高价值操作
我们不是对单个事件作出反应,而是将它们划分到短时间窗口中,作为序列进行评估。这可以避免对噪声过度反应,同时仍能捕捉用户意图。
派生交互状态
从这些事件序列中,应用程序推导出一小组交互状态,例如:
- 空闲 – 没有主动的用户输入
- 主动输入 – 用户正在键入或与表单交互
- 关键流程 – 用户正处于结账或入职步骤的中间
- 后台 – 应用正在运行但不在前台
每种状态对中断的容忍度不同。例如,在 关键流程 状态下,广告会被完全抑制,而在 空闲 状态下则可能允许展示广告。这使得决策逻辑保持明确且可解释。
默认抑制逻辑
一个关键的设计决策是默认抑制广告。系统不再尝试检测每一个可能的“糟糕”时刻,而是假设广告默认被禁用,除非当前交互状态明确允许。这种做法:
- 确保在高风险时刻绝不会出现广告。
- 在关键工作流中最小化不必要的 UI 重渲染和网络请求。
- 简化决策矩阵,使审计和调整更为容易。
本地决策
所有交互状态评估都在设备上进行。客户端应用程序:
- 收集原始交互事件。
- 使用轻量级状态机将其映射到状态。
- 根据当前状态决定是否可以展示广告。
如果使用远程服务,仅限于提供配置(例如状态阈值),且 不属于实时决策路径。这可提升延迟、可靠性以及在网络状况不佳时的表现。
轻量级反馈,而非过度优化
在展示广告(在允许的情况下)后,系统会观察以下简单信号:
- 立即的用户关闭
- 点击率
- 会话持续性指标
这些信号用于逐步调整阈值,而不是激进地优化投放。目标是保持稳定性和一致的用户体验,而不是最大化短期收入。
实践中表现良好的方面
从实现的角度来看,这种方法带来了:
- 减少中断 在关键用户流程中。
- 更高的用户满意度 分数,在发布后调查中衡量。
- 稳定的收入 与真实用户参与度相匹配,而非强制展示。
- 更简洁的代码库:设备端状态机易于测试和维护。
最重要的是,系统将变现行为与实际用户交互模式对齐。
最终思考
广告不需要与用户工作流竞争。通过将变现视为一个交互感知的工程问题,而不是单纯以收入为驱动的功能,应用程序可以在不牺牲可靠性或信任的前提下保持可持续性。有时系统能够做出的最佳决定是不采取任何行动。