你有没有遇到过这种情况?早上睡得正香,突然手机“叮”一声弹出一条促销广告,点开一看是某个购物App发的。又或者你在地铁上填了一半的表单,切出去再回来,之前的内容全没了。这些其实都跟‘推送’有关,但背后的机制完全不同——一个是远程推送,一个是本地推送。
远程推送:别人喊你起床
远程推送,就像有个外人在远处喊你名字。比如电商平台半夜给你发“限时秒杀开始啦”,这条消息是从他们的服务器发出来的,哪怕你的App根本没打开,也能收到。这靠的是苹果的APNs(Apple Push Notification service)或者安卓的FCM(Firebase Cloud Messaging)这类通道。
这类推送最常出现在新闻、社交、电商类App里。你不需要做任何操作,对方一发,你的手机就响了。好处是信息及时,坏处是容易打扰人,还可能被系统当成垃圾消息屏蔽掉。
本地推送:你自己设闹钟
本地推送就不一样了,它不是别人喊你,而是你自己提前设好的提醒。比如你用待办事项App设置“下午3点开会”,就算手机没联网,到点照样弹出来。因为这个提醒早就存进手机本地了,由系统定时触发。
这种推送常见于日程管理、健康打卡、学习计时这类工具类应用。它的特点是不依赖网络,隐私性好,也不会被运营商或平台拦截。但缺点也很明显——不能动态更新内容,比如临时改时间就得重新设置。
技术上看差别在哪?
远程推送需要建立长连接,App虽然没运行,但系统会保留一个通信通道。服务器通过这个通道把消息推下来。而本地推送压根不需要联网,完全是设备自己在管理。
举个例子,远程推送像是广播电台播天气预报,所有人都同时听到;本地推送则像你手机自带的闹钟,只对你一个人生效。
代码简单对比一下
// 远程推送的消息结构(简化版)
{
"aps": {
"alert": "您的快递已到达",
"sound": "default"
}
}
// 本地推送的触发条件(iOS示例)
UNTimeIntervalNotificationTrigger *trigger =
[UNTimeIntervalNotificationTrigger triggerWithTimeInterval:3600
repeats:NO];
两个推送各有用途。想做即时通讯、实时提醒,选远程;要做离线提醒、个性化定时,本地更靠谱。现在很多App其实是两种混着用,比如运动打卡App,既用远程推送发活动通知,又用本地推送提醒你“该跑步了”。
下次再被通知吵到,不妨看看它是谁发的——是外面的人硬闯进来,还是你自己早安排好的?分清这点,才能更好管理手机里的每一条提醒。