我们如何防止广告打断关键用户工作流

发布: (2025年12月23日 GMT+8 06:39)
6 min read
原文: Dev.to

Source: Dev.to

为什么这个问题重要

在许多移动应用中,广告会根据屏幕位置或时间规则插入,而不考虑用户当前正在做什么。从工程角度来看,这会导致几个问题:

  • 打扰用户体验的往往不是具体的广告,而是广告出现的时机。
  • 关键的用户工作流可能被中断,导致挫败感和参与度下降。

在构建一个生产环境的移动应用时,我们发现问题不在于展示了哪些广告,而在于何时展示这些广告。于是我们实现了一个交互感知广告抑制系统,将变现视为基于用户交互状态的运行时决策。本文重点讨论该系统的工程实现。

跟踪交互事件

第一步是在本地捕获有意义的交互信号。我们跟踪的事件示例包括:

  • 屏幕点击和滑动
  • 表单字段获取/失去焦点
  • 页面导航过渡
  • 应用内购买或其他高价值操作

我们不是对单个事件作出反应,而是将它们划分到短时间窗口中,作为序列进行评估。这可以避免对噪声过度反应,同时仍能捕捉用户意图。

派生交互状态

从这些事件序列中,应用程序推导出一小组交互状态,例如:

  • 空闲 – 没有主动的用户输入
  • 主动输入 – 用户正在键入或与表单交互
  • 关键流程 – 用户正处于结账或入职步骤的中间
  • 后台 – 应用正在运行但不在前台

每种状态对中断的容忍度不同。例如,在 关键流程 状态下,广告会被完全抑制,而在 空闲 状态下则可能允许展示广告。这使得决策逻辑保持明确且可解释。

默认抑制逻辑

一个关键的设计决策是默认抑制广告。系统不再尝试检测每一个可能的“糟糕”时刻,而是假设广告默认被禁用,除非当前交互状态明确允许。这种做法:

  • 确保在高风险时刻绝不会出现广告。
  • 在关键工作流中最小化不必要的 UI 重渲染和网络请求。
  • 简化决策矩阵,使审计和调整更为容易。

本地决策

所有交互状态评估都在设备上进行。客户端应用程序:

  1. 收集原始交互事件。
  2. 使用轻量级状态机将其映射到状态。
  3. 根据当前状态决定是否可以展示广告。

如果使用远程服务,仅限于提供配置(例如状态阈值),且 不属于实时决策路径。这可提升延迟、可靠性以及在网络状况不佳时的表现。

轻量级反馈,而非过度优化

在展示广告(在允许的情况下)后,系统会观察以下简单信号:

  • 立即的用户关闭
  • 点击率
  • 会话持续性指标

这些信号用于逐步调整阈值,而不是激进地优化投放。目标是保持稳定性和一致的用户体验,而不是最大化短期收入。

实践中表现良好的方面

从实现的角度来看,这种方法带来了:

  • 减少中断 在关键用户流程中。
  • 更高的用户满意度 分数,在发布后调查中衡量。
  • 稳定的收入 与真实用户参与度相匹配,而非强制展示。
  • 更简洁的代码库:设备端状态机易于测试和维护。

最重要的是,系统将变现行为与实际用户交互模式对齐。

最终思考

广告不需要与用户工作流竞争。通过将变现视为一个交互感知的工程问题,而不是单纯以收入为驱动的功能,应用程序可以在不牺牲可靠性或信任的前提下保持可持续性。有时系统能够做出的最佳决定是不采取任何行动

Back to Blog

相关文章

阅读更多 »

SwiftUI 手势系统内部

markdown !Sebastien Latohttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...