加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0577zz.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 综合聚焦 > 移动互联 > 通讯 > 正文

移动互联时代,推送为何总被用户划走?

发布时间:2026-10-16 08:04:09 所属栏目:通讯 来源:DaWei
导读:  去年中秋,PM 在站会上说“这次推送必须有温度”,我盯着他工牌挂绳上那个快掉色的熊本熊——去年团建发的,现在只剩半边黑。我原以为就改个文案模板的事,结果发现 push_service.rb 里那个 send_to_user 块裹着三层条件

  去年中秋,PM 在站会上说“这次推送必须有温度”,我盯着他工牌挂绳上那个快掉色的熊本熊——去年团建发的,现在只剩半边黑。我原以为就改个文案模板的事,结果发现 push_service.rb 里那个 send_to_user 块裹着三层条件判断,其中一层还调了 Redis 的 zscore 算权重,而权重字段压根没在中秋活动埋点文档里提过半个字。


文章配图,仅供参考

  跟产品吵。不是吵要不要推,是吵“用户划走”算不算失败指标。他说“DAU 下跌三个点就得追责”,我说“你去看 iOS 系统日志,九成推送连 notification center 都没进,直接被内核丢弃了,你还在这儿盯 DAU?”。他掏出 iPad 划拉两下,切到 Mixpanel 看 funnel——手抖了一下,把茶水间订餐小程序误点开,订单号是 20230929-7781。我没拦,就看着他退回去,又点了两次才切回来。这个我敢打包票:iOS 17.1 之后,APNs 对静默推送的限频逻辑改过三回,但咱们 SDK 还用着 2021 年那版封装,连 error_code -429 都当 success 记日志。


  监控大屏上,MQ 消费延迟曲线在下午三点零七分突然翘起一截,像被人用指甲盖掐了一下,两秒后回落。没人喊。运维那边静音了。我扭头问测试小张:“灰度开关推完没?”她说“没,卡在 step 2/3”,说完起身去倒水,杯子是行政部上月换的新款,磨砂玻璃底印着公司 logo,但“Tech”字母的 e 少了一横,印歪了。我盯着那缺笔画的 e,忽然想起上周五 oncall 手机震了一下,是告警,但震完三秒就停了,再查 log,发现是定时任务跑完了,根本不是异常——纯属 cron 脚本自己打了个喷嚏。


  其实真不怪用户划。他们划得比咱们 deploy 还利索。咱们发版要等 git tag → Jenkins 构建 → RubyGems 包上传 → 容器滚动重启 → 再等 Prometheus 抓三次指标确认 p95 < 十八毫秒。人家划一下手指,从左到右——三百七十二次调用瞬间归零。这哪是拒绝?这是优胜劣汰。系统在替你筛人。你写的那条“中秋月圆,红包已到账!”背后连着的是 payment_api.rb 里一段 retry loop,retry 了四次才写进 DB,第五次才触发 push_event。而用户手机早锁屏了。锁屏动画刚起,你就开始发包,发得越准,死得越脆。


  前两天前端小李找我,说安卓端收到推送后点开闪退,问我是不是 payload 太大。我说你先看下你们 React Native bridge 层 handlePushNotification 的 callback 是不是用了 sync storage。他眨眨眼。我就知道他没碰过 native。后来查了才发现,是他本地调试时开了 Chrome DevTools 的 remote debugging,结果 WebSocket 一直 hold 着 connection,push 来了,JS 线程卡在 eval 上,native 层超时,干脆干掉整个进程。这不是代码问题。这是……人的问题。你没法让所有工程师同时记住:debug 工具和推送是天敌。这点连 Apple 文档都懒得写,只在 WWDC 一个 session 里某位工程师口误带过一句:“uh, yeah, don’t debug and push at same time.”


  工资条还没发,HR 说本月绩效评估改用“用户有效触达率”新算法,公式里有个神秘系数叫“perceived_value_weight”,PM 解释说来自 NPS 调研里的开放题语义分析。我听完直接打开 irb,敲了行 puts JSON.parse(File.read('nps.json'))['comments'].sample,回车,弹出一句:“推送太多,烦死了,求删。” 我截图发群里,没人回。过了十八分钟,测试小张回了个“????”,附带一张她办公桌上的咖啡杯照片——杯沿有个缺口,是上周被她儿子啃的,她说“像不像我们每次发版留下的 tech debt?” 我没回。因为就在她发图那会儿,Jenkins 控制台刷出一行 green text:`Successfully deployed to staging (sha: abc123f)`。紧接着,邮件系统自动群发了一封标题为【重要】请更新您的推送偏好设置的通知。


  所以……我现在在改 config/push.yml 里的 `suppress_if_last_interaction_lt: 7.days.ago` 这一行。删了。改成 `suppress_if_last_interaction_lt: 0.seconds.ago`。反正也没人看。真要砍推送,不如先把 app delegate 里那段 force-restart-background-task 的野代码干掉。哦对,刚才 QA 又报了个 case:用户把 App 杀后台后,收不到离线推送,但 log 显示 APNs 回执是 200。这事我说不准——可能跟设备冷启动的 power management 有关,也可能跟我们凌晨两点强制清空 redis cluster key 的那个脚本有关。我打算下周三下班前,去楼下便利店买瓶冰可乐,边喝边看 iOS 文档第 108 页 footnote #3。要是它还在,我就改。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!