You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:09:02