簡體   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