[英]firebase messaging and firestore and flutter
我試圖找到一個關於如何通知用戶的好教程。 我找到了一對,但總是缺少一塊!
我創建了一個應用程序,其中一個選項卡是一個聊天室,任何人都可以在其中與您聯系並提出問題。 我還有另一個選項卡,上面寫着列出用戶已收到並可以查看的所有通知。
Firebase 消息功能運行良好,當我的應用程序關閉時我會收到通知。 當它在前台 (onMessage) 時,它不顯示覆蓋通知,這是我設置的……
我現在主要擔心的是,當有人向用戶發送聊天消息時,我希望其他用戶收到通知,告訴他們有人向他們發送了消息。
我的計划是將通知(即 tokenRead:true/false)保存在 firestore 中,然后以某種方式告訴 firebase 消息通知用戶。 但是怎么辦????
請幫忙! 謝謝你!!!
我使用的是這種方法,每次用戶登錄時都會檢查“令牌是否已更改”,然后使用 userId 在 firestore 上更新它。 如果您想向該用戶發送通知,您可以使用該令牌。
_firebaseMessaging.onTokenRefresh.listen((newToken) {
User _currentUser = FirebaseAuth.instance.currentUser;
FirebaseFirestore.instance
.doc("tokens/" + _currentUser.uid)
.set({"token": newToken});
});
你可以像那樣發布它,這就是我使用的。
Future<bool> sendNotification(
{@required Map<String, dynamic> messageMap,
@required AppUser appUser,
@required String token}) async {
String url = "https://fcm.googleapis.com/fcm/send";
String _firebaseKey ="<your key>"
Map<String, String> headers = {
"Content-type": "application/json",
"Authorization": "key=$_firebaseKey"
};
String json =
'{ "to" : "$token", "data" : { "message" : "${messageMap["message"]}", "sendBy": "${appUser.name}", "messageType": "${messageMap["messageType"]}", "sendById" : "${appUser.userId}" } }';
http.post(url, headers: headers, body: json);
return true;
}
當應用程序在前台時,它不會顯示覆蓋通知,但會調用onMessage
回調。 因此您可以處理其中的新事件並自行顯示通知。
在較早的 flutter firebase_messaging
package 中,我們有兩個回調。 onMessage
和onBackgroundMessage
。 您可以像這樣使用這兩個回調(根據官方文檔):
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
_showItemDialog(message);
},
onBackgroundMessage: myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
_navigateToItemDetail(message);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
_navigateToItemDetail(message);
},
);
而myBackgroundMessageHandler
就像:
Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
if (message.containsKey('data')) {
// Handle data message
final dynamic data = message['data'];
}
if (message.containsKey('notification')) {
// Handle notification message
final dynamic notification = message['notification'];
}
// Or do other work.
}
有關完整信息,請閱讀文檔: flutter firebase_messaging
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.