繁体   English   中英

firebase 消息传递和 Firestore 以及 flutter

[英]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 中,我们有两个回调。 onMessageonBackgroundMessage 您可以像这样使用这两个回调(根据官方文档):

_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM