我正在尝试找到有关如何通知用户的好教程。我找到了一对,但总有一块缺失!
我创建了一个应用程序,其中一个选项卡是一个聊天室,任何人都可以与您联系并提出问题。我还有另一个选项卡,上面写着列出用户已收到并可以查看的所有通知。
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
回调。 因此,您可以自行处理其中的新事件并显示通知。
在前面的 Flutterfirebase_messaging
包中,我们有两个回调。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.
}
有关完整信息,请阅读文档:颤振firebase_messaging