去年夏天,当 iOS 27 开发者测试版发布时,我们 ViviDiary 团队眼睁睁地看着我们的通知打开率断崖式下跌。在短短一周内,用户与我们每日提醒的互动率下降了 42%。

我们并没有遇到 Bug。我们的服务器运行正常。我们所经历的是 Apple 处理用户注意力方式的根本性转变。

Apple Intelligence 的演进从根本上改变了推送通知的开发者用户体验。Apple 的操作系统现在充当了严格的编辑把关人,利用其大语言模型 (LLM) 根据推断出的重要性对提醒进行分类、总结,并经常将其隐藏。诸如新的“通知摘要”和激进的“减少干扰”专注模式等功能,会主动降低通用、重复性推送的优先级。

对于许多习惯追踪和健康应用来说,这是一场危机。但对我们而言,这是对我们产品理念的终极验证。

以下是关于我们如何调整云端推送架构以在 AI 过滤器中生存、我们坚决拒绝构建什么,以及为 Apple Intelligence 设计正念通知如何真正迫使我们构建一个更好、更安静的产品的坦诚回顾。

Apple Intelligence 总结带来的问题

ViviDiary 的设计初衷是轻量化。我们的核心交互是一个 3 秒的签到:一个 5 级的情绪选择(极好、好、还可以、低落、糟糕),加上一些表情符号,就完成了。其他所有内容——备忘录、语音笔记、照片以及我们的专注模块(习惯 + 待办事项)——均严格采用选择加入制。新用户开始时,除情绪记录外,所有功能均处于关闭状态。

因为我们优先考虑减轻受困扰用户的认知负荷,所以我们的通知策略一直很温和。我们使用单一的“温暖”语调。我们不做压力式的连胜记录、恐慌性通知或“你今天错过了”的内疚式提醒。

但 Apple Intelligence 本身并不了解你应用的理念。它只是读取文本。

当 iOS 27 引入通知摘要时,它开始聚合我们温和的提醒。如果用户有一个日常习惯提醒和一个每周“镜像”(模式发现)洞察,Apple 的 AI 会剥离我们精心设计的温暖语调,将其简化为机器人式的总结:“关于记录情绪和每周模式的 2 条提醒。”

更糟糕的是,如果用户启用了 iOS 27 减少干扰专注模式,我们的通知经常被判定为“非必要”,并被埋在通知中心,完全绕过了锁屏界面。

我们面临一个选择:要么想办法钻系统的空子,要么想办法与 AI 合作,提供真正的价值。

我们拒绝的做法:“时效性”API 滥用

当面对参与度指标暴跌时,我们增长团队的直接反应是可以预见的:“只要把通知标记为‘时效性’就行了。”

Apple 在 APNs (Apple 推送通知服务) 载荷中提供了一个 `Time Sensitive` 中断级别。它专为网约车到达、日历事件或安全警报等事项设计。由于这些通知可以绕过“减少干扰”专注模式并浮动到摘要的最上方,许多应用立即开始滥用此标志来进行日常互动提醒。

我们在 TestFlight 构建版本中进行了内部测试。它确实有效——我们的通知突破了 AI 过滤器。但我们对此感到厌恶。

以下是我们为何在产品上线前就否决该想法的原因:

  1. 这是敌对的用户体验: 记录晚间情绪的提醒对于自我意识很重要,但它不是紧急情况。当用户明确要求 iOS 减少干扰时,劫持他们的注意力违背了我们核心的反注意力设计理念。
  2. Apple 会进行惩罚: Apple 的文档明确指出,如果用户频繁关闭某个应用的“时效性”通知,操作系统将提示用户完全关闭该应用的“时效性”权限。这是一种会导致长期被静音的短期兴奋剂。
  3. 它破坏了信任: 我们不使用交通灯式的进度 UI 或断连内疚感。强行出现在锁屏界面上,感觉就像是我们主动避免的那种说教式、教练式的行为。

我们决定,如果我们想在 iOS 27 锁屏界面上赢得一席之地,我们就不能作弊。我们必须让我们的情绪追踪推送通知具有不可否认的相关性。

重新设计我们的云端推送架构

为了让我们的通知更智能,我们必须重新思考触发它们的方式。

在深入探讨之前,先简单说明一下我们的架构:ViviDiary 使用 Supabase 和 Firebase Auth 进行云端存储。当我们谈论处理数据以寻找最佳通知时间时,这是在我们的后端完成的。日记文本在进行任何外部或 AI 处理之前都会经过严格的去标识化。我们的隐私保护源于数据最小化和去标识化。我们对基于云的技术栈完全透明,我们相信透明度是信任的基础。

此前,如果用户选择加入我们的专注模块并设置了“日常习惯”,我们允许他们为推送通知选择一个固定的时间(例如 8:00 PM)。

但固定的时间是愚蠢的。如果你通常在 8:00 PM 记录情绪,但周四你有晚课,直到 10:00 PM 才打开应用,那么 8:00 PM 的通知就只是噪音。在 iOS 27 下,这种噪音会导致你被过滤。

我们更新了 Supabase 后端,以分析用户实际完成习惯记录的去标识化时间戳。(请记住,ViviDiary 会自动统计匹配的表情符号签到并将其链接到情绪模式;没有手动习惯记录)。

我们构建了一个轻量级的 Cron 任务,计算用户签到时间的滚动 7 天平均值,并按星期几进行细分。我们的服务器现在不再进行固定的 8:00 PM 推送,而是将推送安排在用户在特定日期历史上最容易接受的精确 15 分钟窗口内。

我们还将此与我们的 iOS 27 Apple 健康集成 挂钩。如果我们的后端检测到用户已经同步了与他们日常习惯匹配的自动类别(如睡眠或步数),我们会完全取消该通知。为什么要提醒他们记录我们已经知道他们做过的事情呢?

无论用户是处于我们的免费层级(包括无限的情绪和表情符号记录、3 个月的日历存档和最多 3 个习惯),还是我们的 $2.99/月高级计划,这种动态架构都以同样的尊重对待他们的注意力。

显示 ViviDiary 云架构计算最佳推送通知时间的图表
显示 ViviDiary 云架构计算最佳推送通知时间的图表

打造 AI 弹性通知载荷

搞定时间安排只是成功了一半。我们仍然需要处理通知摘要的开发者用户体验。

Apple Intelligence 使用 AI 模型读取通知载荷并生成摘要。我们通过大量的 A/B 测试发现,我们发送的文本结构直接影响了 AI 重写它的方式。

这是我们 iOS 27 之前的初始载荷:
> 标题: 晚间签到
> 正文: Clayee 在这里!花 30 秒记录你的情绪,看看你今天过得怎么样。没有压力,随时都可以。

当 Apple Intelligence 将此与其他应用一起总结时,它会输出:
> “ViviDiary 提醒你记录情绪。”

这很冷漠。它剥离了我们支持角色 Clayee 的温暖感。听起来像是一项苦差事。

我们花了三周时间测试不同的语义结构,类似于我们在适应 Apple Intelligence 写作工具时所做的工作。我们了解到,Apple 的总结模型非常看重正文的前几个词,并寻找关于实用性与营销的上下文线索。

我们发现,提供高度具体、以用户为中心的上下文可以防止 AI 扁平化语调。我们从通用的提示转向了基于观察的动态载荷。

这是我们今天使用的获胜载荷结构:
> 标题: 随时准备着
> 正文: 你通常在这个时间结束你的“阅读”习惯。如果你想输入晚间表情符号,Clayee 正在为你留位置。

因为此载荷包含特定的变量(用户的实际习惯名称、上下文时间感知和低压语言),Apple Intelligence 倾向于原封不动地通过它,或者更温和地总结它:
> “ViviDiary 提示这是你通常阅读和记录表情符号的时间。”

这种方法与我们在防止 AI 垃圾内容方面的立场完全一致。我们不使用 AI 来生成虚假的同理心;我们使用精确的、人工编写的模板,并填充准确的数据,确保当 Apple 的 AI 读取它时,它能识别出该载荷是一个高信号、低噪音的提醒。

结果:更高的参与度,更少的噪音

当我们向 iOS 用户群推出新的推送架构和 AI 弹性载荷时,指标说明了一切。

我们的推送通知总发送量下降了 38%。我们发送的通知变少了,因为我们的服务器取消了冗余的提醒并等待最佳窗口。

然而,我们的互动率(用户点击通知或在发送后 10 分钟内记录情绪)与 iOS 27 之前的基准相比增加了 28%。

更重要的是,我们的通知退订率——即追踪用户因感到厌烦而完全关闭提醒的指标——降至每周 0.4% 的历史最低点。

通过拒绝使用“时效性”滥用手段,转而通过分析去标识化数据来寻找正确时机,我们与 Apple Intelligence 试图实现的目标完美契合:保护用户的专注力。

显示通知量减少但用户互动率增加的图表
显示通知量减少但用户互动率增加的图表

下一步

我们目前正在研究如何为我们的每周“镜像”功能优化通知。目前,镜像功能在每周日早上提供模式洞察。这是一个很好的反思时间,但我们正在探索我们的云后端是否能为这些洞察识别出更好的个性化窗口——也许等到我们检测到“极好”或“好”的情绪记录时再发送每周总结,确保用户有足够的情绪带宽来回顾他们的模式。

Apple Intelligence 不是开发者的敌人。它是懒惰开发的敌人。通过迫使我们为每一个像素和每一次提醒辩护,iOS 27 让 ViviDiary 成为一个更好、更安静、更尊重的伴侣。

下次见,
Ethan