移动开发中的推送通知:本质、类型及工作原理

作者: IT Sectr 发布日期: 2026-03-15 阅读时间: 9 分钟

推送通知是应用安装后与用户互动的最有效方式之一。它们可以通知新消息、折扣、内容更新或提醒被遗忘的购物车。推送通知(push notifications)通过云服务工作:Android上的Firebase Cloud Messaging(FCM)和iOS上的Apple Push Notification Service(APNS)。本文将分析通知的架构、类型以及两个平台的配置过程。更多详情请参阅FCM官方文档

要点

  • FCM — Android和iOS的通用服务(通过APNS代理)
  • APNS — Apple的原生服务,适用于iOS、macOS、watchOS
  • 富通知通过App Extensions包含媒体内容(图片、按钮、音频)
  • 静默推送在后台更新数据,不向用户显示
  • 设备令牌 — 唯一的设备标识符;需要在服务器上存储和更新
  • 通知渠道(Android)和通知类别(iOS) — 用户对通知进行分组和自定义

什么是推送通知?

推送通知是服务器在应用未请求的情况下发送到移动设备的消息。消息通过云服务(FCM或APNS),即使应用已关闭,也能将其传送到设备。通知分为两类:显示通知(向用户显示)和数据通知(传输数据用于后台处理)。

推送通知的架构包括三个组件:(1)应用服务器 — 向FCM/APNS发送请求;(2)云服务 — 路由通知;(3)客户端应用 — 接收和处理通知。服务器必须知道设备的设备令牌才能专门向其发送通知。对于群发,使用主题订阅 — 将设备订阅到主题频道(新闻、促销、天气)。

在每个设备上,通知由操作系统处理:Android — 通过NotificationManager和NotificationChannel,iOS — 通过UNUserNotificationCenter。用户可以为每个频道配置通知行为:允许声音、横幅、在锁定屏幕上显示或完全禁用。正确的频道配置可提高参与度并降低退订率。

在IT Sectr,我们从一开始就考虑平台特定特性来设计推送通知系统。关键决策:选择FCM还是直接APNS、负载格式、发送频率和订阅机制。这有助于避免通知无法到达或被系统阻止的情况。

FCM vs APNS

Firebase Cloud Messaging(FCM)是Google用于通知投送的跨平台服务。FCM支持Android、iOS、Web和Flutter。在iOS上,FCM通过APNS工作:FCM向APNS发送请求,APNS将通知传送到设备。FCM的优势:两个平台统一的API、内置分析、A/B测试、主题和受众细分。

Apple Push Notification Service(APNS)是Apple的原生服务。仅在Apple设备(iOS、macOS、watchOS、tvOS)上运行。需要通过TLS证书或令牌(JWT)进行直接授权。APNS提供最小的投递延迟和与iOS功能的直接集成:PushKit、Notification Service Extension和关键警报。

FCM和APNS之间的选择取决于项目架构。如果应用仅适用于iOS — APNS提供更多控制。如果是跨平台 — FCM通过统一API更方便。许多项目使用FCM作为主要服务,并在iOS上额外配置PushKit用于VoIP。混合方法可以从两个系统中获得最佳效果。

特性 FCM APNS
平台Android、iOS、Web、FlutteriOS、macOS、watchOS、tvOS
授权服务器密钥(Firebase Console)TLS证书或JWT令牌
最大负载4 KB(data)、2 KB(notification)4 KB
主题内置(Topic Messaging)无(在服务器端实现)
静默推送支持支持(content-available)
PushKit有(VoIP、实时活动)
分析Firebase Analytics无内置
发送到关闭的设备有限(取决于制造商)有,通过PushKit

通知类型(富通知、静默、交互式)

富通知(Rich Notification)

富通知是不仅包含文本还包含媒体内容(图片、视频、音频和操作按钮)的通知。在Android上通过NotificationCompat样式实现:BigPictureStyle(大图片)、BigTextStyle(折叠/展开文本)、InboxStyle(消息列表)、MediaStyle(播放控制)。在iOS上使用Notification Content Extension — 用于展开通知的具有自定义UI的独立目标。

静默推送(Silent Push)

静默推送(iOS上的content-available)是在不向用户显示的情况下传递的通知。用于后台数据更新:内容同步、预加载、小部件更新。在iOS上,静默推送需要启用Background Modes → Remote notifications。在Android上,使用FirebaseMessagingService配合onMessageReceived处理后台通知。重要:在iOS上,静默推送有频率限制,如果应用不在前台,则不保证送达。

交互式通知(Interactive Notification)

交互式通知允许用户在不打开应用的情况下执行操作。在Android上是通知中的按钮(Action):“回复”、“批准”、“拒绝”。操作通过PendingIntent处理,启动BroadcastReceiver或Service。在iOS上,Notification Action通过UNNotificationAction和UNNotificationCategory注册。按钮可以是foreground(打开应用)、background(在后台执行)或destructive(不可逆操作 — 删除、阻止)。

Notification Content Extension和Service Extension

Notification Content Extension(iOS) — 用于在长按或3D Touch时显示扩展通知内容的自定义视图控制器。Notification Service Extension(iOS) — 用于在显示前修改通知内容的中间件:解密E2E消息、加载图像、混淆机密数据。Android上没有直接的类似功能 — 所有修改都在FirebaseMessagingService中执行。

在Android和iOS上配置通知

在Android上配置

对于Android,需要:(1)将Firebase SDK添加到项目(google-services.json);(2)为每个通知类别创建NotificationChannel(Android 8+);(3)实现FirebaseMessagingService以接收令牌和传入消息。Notification Channel是必需的 — 没有它,通知将不会在Android 8+上显示。频道具有优先级(IMPORTANCE_HIGH — 声音+弹出窗口,IMPORTANCE_LOW — 无声音),用户可以在系统设置中配置它们。

在iOS上配置

对于iOS,需要:(1)在Xcode中启用Push Notifications功能;(2)在Apple Developer Portal上配置APNS密钥;(3)通过UNUserNotificationCenter.requestAuthorization请求授权 — 这是一个只显示一次的系统对话框。用户的响应至关重要:如果未授予权限,通知将不会被送达。建议在显示系统对话框之前向用户解释为什么需要通知(预先权限提示)。

工具和令牌

设备令牌(iOS)和注册令牌(Android)是用于推送通知的唯一设备标识符。令牌在首次启动应用时生成,可能会更改:重新安装、清除数据、重置隐私设置时。服务器必须定期更新令牌。Firebase提供通过onNewToken进行令牌管理的便捷API,以及用于测试通知发送的面板(Firebase Console → Cloud Messaging)。

主题订阅是FCM最有效的机制之一。设备订阅主题(例如“news”、“promo_users_ios”),服务器按主题发送通知,无需存储令牌列表。Firebase Topics支持每个主题最多一百万个订阅者,并通过表达式语言支持条件发送(Condition):“'news' in topics && ('US' in topics || 'UK' in topics)”。

通知负载是通过FCM/APNS发送的JSON结构。对于FCM:分别notification(可见部分 — 标题、正文、图片)和data(应用的自定义字段)。对于APNS:包含alert、badge、sound、category和content-available的aps字典。正确的负载结构至关重要:如果notification + data同时到达,后台应用可能无法接收data。建议仅对Android使用data消息,并通过FCM Console单独传递视觉字段。

常见问题

FCM和APNS有什么区别?

FCM(Firebase Cloud Messaging)是Google用于Android和跨平台通知的服务。APNS(Apple Push Notification Service)是Apple仅用于iOS/macOS的服务。FCM可以通过APNS在iOS上传递通知,充当代理服务器。

什么是富通知?

富通知是具有媒体内容(图片、视频、音频、操作按钮)的增强型通知。在iOS上通过Notification Content Extension实现;在Android上通过BigPictureStyle和InboxStyle实现。

设备令牌如何工作?

设备令牌是用于发送推送通知的唯一设备标识符。在Android上是来自FCM的注册令牌;在iOS上是来自APNS的设备令牌。令牌可能会更改在重新安装应用或重置设置时,因此需要在服务器上更新。

什么是静默推送,为什么需要它?

静默推送(无声通知)是不向用户显示的通知。用于后台数据更新:内容同步、小部件更新、预获取。在iOS上需要启用Background Modes → Remote notifications。

PushKit与常规推送通知有何不同?

PushKit是Apple用于传递高优先级通知的框架,用于VoIP应用(通话、消息)。PushKit传递通知即使应用已关闭,并保证启动应用进行处理。

总结

  • FCM — Google的跨平台服务;APNS — Apple的原生服务
  • 富通知包括媒体和按钮;静默推送在不显示的情况下更新数据
  • 通知渠道(Android)和通知类别(iOS) — 用于通知分组是必需的
  • 设备令牌 — 唯一标识符;需在服务器上定期更新
  • 主题订阅简化了群发,无需存储令牌列表
  • PushKit — 用于关键通知(VoIP、生命重要警报)
  • 通知负载必须根据平台结构化:FCM使用notification + data,APNS使用aps

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目