You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase Cloud Messaging(FCM)安卓静默通知优先级问题排查

Troubleshooting FCM High Priority Not Working on Android (Delayed Messages 10s–5min)

Hey there, let’s break down why your high-priority FCM messages are still lagging on Android—this is a super common gotcha, so we’ll work through it step by step.

First up, let’s confirm you’re actually setting the priority correctly in your Django code. The syntax varies depending on which FCM library you’re using, and it’s easy to slip up here:

1. Verify Your Message Structure

If using the Firebase Admin SDK:

The priority needs to be nested inside the android config block, not at the top level of the message. A lot of folks make this mistake! Your code should look something like this:

from firebase_admin import messaging

message = messaging.Message(
    data={
        'title': 'Your Alert Title',
        'body': 'Your Message Content',
    },
    token=device_registration_token,
    android=messaging.AndroidConfig(
        priority='high',  # This is the correct spot for Android priority
        notification=messaging.AndroidNotification(
            title='Your Alert Title',
            body='Your Message Content',
        ),
    ),
)
response = messaging.send(message)

If using pyfcm:

Ensure you’re explicitly passing priority='high' in your send call, and that no other code is overriding this setting:

from pyfcm import FCMNotification

push_service = FCMNotification(api_key="YOUR_FCM_API_KEY")
result = push_service.single_device_data_message(
    registration_id=device_token,
    data_message={"title": "Hello", "body": "World"},
    priority='high'
)

2. Rule Out Android System Restrictions

Even with high priority, Android’s battery optimization tools can throttle FCM delivery aggressively:

  • On your test device, go to Settings > Apps > [Your App] > Battery > Battery Optimization and make sure your app is set to Not optimized.
  • Disable any aggressive battery saver modes (like Xiaomi’s MIUI Battery Saver, Samsung’s Adaptive Battery, or Google’s Extreme Battery Saver)—these often block background FCM traffic even for high-priority messages.
  • Double-check your AndroidManifest.xml includes the WAKE_LOCK permission (high-priority messages should trigger this automatically, but it’s good to confirm):
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

3. Test with the Firebase Console

To isolate whether the issue is in your code or the device/FCM setup:

  • Head to the Firebase Console > Cloud Messaging > Send your first message.
  • Send a test message to your Android device with priority set to High.
    • If this delivers instantly: The problem is in your Django code’s message structure (go back to step 1!).
    • If it’s still delayed: The issue is on the Android device side (focus on battery optimization or app permissions).

4. Check Background vs. Foreground Handling

If your app is in the background, Android routes notification messages through the system tray by default. High-priority data messages should bypass this, but make sure your FirebaseMessagingService is properly implemented to handle onMessageReceived even when the app isn’t active. For data messages, you need to override this method to process the message immediately—notification messages won’t trigger your service unless you use a custom channel or click_action.

5. Quick Check for FCM Throttling

While unlikely if you’re testing, FCM does have quota limits. Head to the Firebase Console > Usage > Cloud Messaging to confirm you’re not hitting any limits that might cause delayed delivery.

Start with verifying your code’s priority placement—that’s the most common fix. Then work through the device settings and console tests to narrow down the issue.

内容的提问来源于stack exchange,提问作者J. Hesters

火山引擎 最新活动