如何从Django服务端向React Native及原生移动端推送静默通知
静默通知推送实现全链路方案
一、服务端(Django侧)实现
这部分是你作为服务端开发者需要完成的核心逻辑:
- 核心选型:直接基于APNs(iOS)、FCM(安卓/跨平台)或国内厂商推送通道实现,不要自建长连接,商用场景下自建长连接的后台保活率极低,无法满足需求。你仅需要对接各推送通道的服务端API即可,不需要处理客户端逻辑。
- 前置准备:提前和客户端开发约定好,客户端启动后将自身的设备推送token、设备类型、所属应用包名上报到你的Django服务端存储,和应用维度的用户/设备标识做关联。
- 事件触发推送逻辑:
- 触发事件产生时,根据关联关系找到对应设备的token和类型,拼接对应静默通知的payload结构,所有需要客户端执行逻辑的参数全部放在自定义data字段中,不要携带任何通知栏展示相关的配置。
- 若使用聚合推送服务,直接调用对应SDK的静默推送专属方法即可,不需要自行适配多厂商格式。
- 代码示例(对接FCM服务端SDK):
# 安装依赖:pip install firebase-admin import firebase_admin from firebase_admin import messaging def send_silent_notification(device_token, custom_data): message = messaging.Message( data=custom_data, # 仅填充data字段,不填notification字段即为静默通知 token=device_token, apns=messaging.APNSConfig( payload=messaging.APNSPayload( aps=messaging.Aps(content_available=True, sound=None, alert=None) # iOS静默通知必须带content_available=true,且不能配置alert、sound相关参数 ) ), android=messaging.AndroidConfig( priority='high', # 高优先级可大幅提升后台场景的送达率 notification=messaging.AndroidNotification( channel_id='silent_channel', visibility='secret', sound=None, notification_count=None ) ) ) response = messaging.send(message) return response
二、客户端实现方案(供合作的应用开发者参考)
2.1 React Native端实现
- 推荐使用
@react-native-firebase/messaging库实现,不需要额外做原生封装 - 核心逻辑示例:
import messaging from '@react-native-firebase/messaging'; // 前台状态静默通知监听 messaging().onMessage(async remoteMessage => { if (!remoteMessage.notification) { // 判断为静默通知 // 执行自定义业务逻辑:比如更新本地缓存、上报状态、触发本地操作等 handleServerEvent(remoteMessage.data); } }); // 后台/应用杀死状态静默通知监听 messaging().setBackgroundMessageHandler(async remoteMessage => { if (!remoteMessage.notification) { handleServerEvent(remoteMessage.data); } }); - 额外配置:iOS端需要在Xcode中开启
Background Modes下的Remote notifications权限。
2.2 Android原生端实现
- 可根据目标用户区域选择接入FCM或者国内小米、华为、OPPO等厂商的推送SDK
- 核心逻辑:自定义
FirebaseMessagingService子类,重写onMessageReceived方法,收到推送后判断如果没有通知栏配置,直接执行对应业务逻辑,不需要调用NotificationManager弹出通知。 - 注意:国内部分厂商的推送通道需要在控制台单独配置静默通知类型,部分厂商还需要提前申请静默推送权限。
2.3 iOS原生端实现
- 接入APNs或者FCM iOS SDK即可
- 核心逻辑:在
AppDelegate中实现didReceiveRemoteNotification:fetchCompletionHandler:方法,判断aps字段中content-available为1时,执行对应的后台逻辑,完成后调用系统的完成回调即可。 - 注意:iOS系统对静默通知的送达有调度限制,单日送达次数有限,如果对实时性要求极高,可以搭配音量为0的普通通知实现,不会弹出提示但优先级更高,送达率更有保障。
内容的提问来源于stack exchange,提问作者JCunn
相关产品推荐
相关产品推荐

