Ready-to-send backend payloads for firebase_messaging_handler.
This directory exists to remove guesswork for backend teams. The examples here are intentionally practical and aligned with the payload shapes the package parses today.
cloud_functions/: Firebase Admin SDK examples for Cloud Functions or Node backendsrest_api/: FCM HTTP v1 examples for curl and API clients
Use notification for system-rendered pushes and data for extra routing metadata:
{
"message": {
"token": "<device-token>",
"notification": {
"title": "Order shipped",
"body": "Track package #A-1042"
},
"data": {
"deeplink": "app://orders/A-1042",
"analytics": "{\"campaign\":\"shipping_update\"}"
}
}
}For silent payloads that should be promoted into a local notification by the package, include at least title or body inside data.
Supported optional bridge fields include:
channelIdimagedeeplinktemplateIdprioritycategoryanalyticsas a JSON string mapactionsas a JSON string array of{id,title,destructive?,payload?}
For in-app rendering, send fcmh_inapp as a JSON string under data.
{
"id": "promo_2026_launch",
"templateId": "builtin_generic",
"trigger": "immediate",
"content": {
"layout": "banner",
"title": "New feature live",
"body": "Try the diagnostics panel today.",
"cta_label": "Open",
"deeplink": "app://diagnostics"
},
"analytics": {
"campaignId": "launch_2026",
"variant": "A"
}
}- FCM HTTP v1 expects all
message.datavalues to be strings. - iOS and Android delivery behavior still differs for foreground, background, and terminated states; test recipes on physical devices before rollout.
- Prefer topic sends for campaigns and token sends for transactional traffic.