[英]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.