How to send push Notification using FCM and Flutter(One to Another Device)?
5,021
I could send FCM messages from one device to other with the topic/FCM token without the server.
NOTE : Using the server key at client side is a bad practice and should not be used in production-level applications.
static Future<bool> sendFcmMessage(String title, String message) async {
try {
var url = 'https://fcm.googleapis.com/fcm/send';
var header = {
"Content-Type": "application/json",
"Authorization":
"key=your_server_key",
};
var request = {
"notification": {
"title": title,
"text": message,
"sound": "default",
"color": "#990000",
},
"priority": "high",
"to": "/topics/all",
};
var client = new Client();
var response =
await client.post(url, headers: header, body: json.encode(request));
return true;
} catch (e, s) {
print(e);
return false;
}
}
If you have to send data request with FCM token, use
request = {
'notification': {'title': title, 'body': message},
'data': {
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
'type': 'COMMENT'
},
'to': 'fcmtoken'
};
Author by
Romil
Updated on December 11, 2022Comments
-
Romil over 1 year
I have devloped One to one chat system in flutter and want to send push notification to another device using FCM.
I have setup all the flutter and firebase messaging requirement.
//In InitState() _firebaseMessaging.onTokenRefresh.listen(sendTokenToServer); _firebaseMessaging.getToken(); _firebaseMessaging.configure(onLaunch: (Map<String, dynamic> msg) { print("onLaunch"); Navigator.push( context, MaterialPageRoute(builder: (context) => Message(this.user, this.event)), ); }, onResume: (Map<String, dynamic> msg) { print("onResume"); Navigator.push( context, MaterialPageRoute(builder: (context) => Message(this.user, this.event)), ); }, onMessage: (Map<String, dynamic> msg) { print("onMessage"); }); _firebaseMessaging.requestNotificationPermissions( const IosNotificationSettings(sound: true, alert: true, badge: true)); _firebaseMessaging.onIosSettingsRegistered .listen((IosNotificationSettings setting) { print("IOS"); }); //sendTokenToServer() - function send FCM token my Postgres DB //When user clicks on send Button Future sendNotification(userData, eventData) async { await Messaging.sendToAll( title: "${toBeginningOfSentenceCase(userData['User']['name'])} on ${toBeginningOfSentenceCase(eventData['Event']['eventName'])} event", body: _messageController.text, fcmToken: fcmTokenToServer, ); } //Messaging.sendToAll() static Future<Response> sendToAll( {@required String title, @required String body, @required String fcmToken}) => sendTo(title: title, body: body, fcmToken: fcmToken); static Future<Response> sendTo({ @required String title, @required String body, @required String fcmToken, }) => client.post( 'https://fcm.googleapis.com/fcm/send', body: json.encode({ 'notification': {'body': '$body', 'title': '$title'}, 'priority': 'high', 'data': { 'click_action': 'FLUTTER_NOTIFICATION_CLICK', 'id': '1', 'status': 'done', }, 'to': '$fcmToken', }), headers: { 'Content-Type': 'application/json', 'Authorization': 'key=$serverKey', }, );
But No push notification is receiving. Is it that I have to implement cloud functions to send notification??