FirebaseCloudMessagingServer class
A server-side client for sending Firebase Cloud Messages via the FCM HTTP v1 API directly from Dart or Flutter.
The default base endpoint used is _fcmApiEndpoint.
Quick start
import 'dart:convert';
import 'dart:io';
import 'package:firebase_cloud_messaging_flutter/firebase_cloud_messaging_flutter.dart';
void main() async {
final credentials = jsonDecode(
File('service_account.json').readAsStringSync(),
) as Map<String, dynamic>;
final server = FirebaseCloudMessagingServer(credentials);
final result = await server.send(
FirebaseSend(
message: FirebaseMessage(
token: '<device-token>',
notification: FirebaseNotification(
title: 'Hello!',
body: 'Message from the server.',
),
),
),
);
print(result);
server.dispose(); // Always dispose when done.
}
Authentication
FirebaseCloudMessagingServer authenticates with FCM using a Google Service Account. Open Firebase Console → Settings → Service Accounts → Generate new private key and pass the contents of the downloaded JSON file to this constructor.
Caching & disposal
By default (cacheAuth = true) the OAuth 2.0 access token is reused
until it expires (≈1 hour), then refreshed automatically. Call dispose
when you are done with the server to close the underlying HTTP client.
Constructors
-
FirebaseCloudMessagingServer(Map<
String, dynamic> ? firebaseServiceCredentials, {String? projectId, bool cacheAuth = true, FcmLogger logger = fcmSilentLogger, FcmRetryConfig retryConfig = const FcmRetryConfig(), FcmRegistrationCallback? onRegistrationChange, Client? httpClient}) - Creates a server instance from a pre-parsed service-account Map.
- FirebaseCloudMessagingServer.applicationDefault({required String projectId, bool cacheAuth = true, FcmLogger? logger, FcmRetryConfig retryConfig = const FcmRetryConfig(), FcmRegistrationCallback? onRegistrationChange, Client? httpClient})
-
Creates a server instance that authenticates using Google Application
Default Credentials (ADC).
factory
- FirebaseCloudMessagingServer.fromServiceAccountFile(Object serviceAccountFile, {bool cacheAuth = true, FcmLogger? logger, FcmRetryConfig retryConfig = const FcmRetryConfig(), FcmRegistrationCallback? onRegistrationChange, Client? httpClient})
-
Creates a server instance by reading a service-account JSON file.
factory
- FirebaseCloudMessagingServer.fromServiceAccountJson(String jsonString, {bool cacheAuth = true, FcmLogger? logger, FcmRetryConfig retryConfig = const FcmRetryConfig(), FcmRegistrationCallback? onRegistrationChange, Client? httpClient})
-
Creates a server instance from a service-account JSON String.
factory
Properties
- cacheAuth → bool
-
When
true(default), the OAuth access token is cached and reused until it expires. Set tofalseto force a fresh token on every request.final -
firebaseServiceCredentials
→ Map<
String, dynamic> ? -
The endpoint for the IID batch registration API (Subscribe).
The endpoint for the IID batch registration API (Unsubscribe).
The service account credentials loaded from Firebase Console.
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- logger → FcmLogger
-
Optional logger for diagnostic output.
final
- onRegistrationChange → FcmRegistrationCallback?
-
Optional callback triggered when a token registration becomes invalid.
final
- retryConfig → FcmRetryConfig
-
Controls automatic retry for retryable FCM errors
(
QUOTA_EXCEEDEDandUNAVAILABLE).final - runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
dispose(
) → void - Closes the underlying HTTP client and releases resources.
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
performAuth(
) → Future< AccessCredentials> - Fetches a fresh OAuth 2.0 access token from Google and caches it.
-
send(
FirebaseSend sendObject) → Future< ServerResult> - Sends a single FCM message.
-
sendMessages(
List< FirebaseSend> sendObjects) → Future<List< ServerResult> > - Sends multiple pre-built FirebaseSend objects sequentially.
-
sendToCondition(
String condition, FirebaseMessage message) → Future< ServerResult> - Convenience method to send a message to devices matching a condition.
-
sendToMultiple(
{required List< String> tokens, required FirebaseMessage messageTemplate, bool validateOnly = false}) → Future<BatchResult> -
Sends the same notification to
tokensin parallel and returns an aggregated BatchResult. -
sendToTopic(
String topic, FirebaseMessage message) → Future< ServerResult> - Convenience method to send a message to an FCM topic.
-
subscribeTokensToTopic(
{required String topic, required List< String> tokens}) → Future<TopicManagementResult> -
Subscribes a list of registration
tokensto an FCMtopic. -
toString(
) → String -
A string representation of this object.
inherited
-
unsubscribeTokensFromTopic(
{required String topic, required List< String> tokens}) → Future<TopicManagementResult> -
Unsubscribes a list of registration
tokensfrom an FCMtopic. -
validateMessage(
FirebaseSend sendObject) → Future< ServerResult> - Validates a message payload without actually delivering it.
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited