[英]How to send Push Notification from device when the receiver device is not in foreground state using FCM in android?
[英]How to send push Notification using FCM and Flutter(One to Another Device)?
我已經在 flutter 中開發了一對一聊天系統,並希望使用 FCM 向另一台設備發送推送通知。
我已經設置了所有 flutter 和 firebase 消息傳遞要求。
//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',
},
);
但是沒有收到推送通知。 是不是我必須實現雲功能才能發送通知??
我可以在沒有服務器的情況下使用主題/FCM 令牌將 FCM 消息從一台設備發送到另一台設備。
注意:在客戶端使用服務器密鑰是一種不好的做法,不應在生產級應用程序中使用。
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;
}
}
如果您必須使用 FCM 令牌發送數據請求,請使用
request = {
'notification': {'title': title, 'body': message},
'data': {
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
'type': 'COMMENT'
},
'to': 'fcmtoken'
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.