Как отправить push-уведомление, используя FCM и Flutter (одно на другое устройство)? - PullRequest
0 голосов
/ 08 июня 2019

Я развернул систему чата «один на один» во флаттере и хочу отправить push-уведомление на другое устройство с помощью FCM.

Я настроил все требования к флаттеру и обмену сообщениями в пожарной базе.

//In InitState()
_firebaseMessaging.onTokenRefresh.listen(sendTokenToServer);
    _firebaseMessaging.getToken();
    _firebaseMessaging.configure(onLaunch: (Map<String, dynamic> msg) {
      print("onLaunch");
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => Message(this.user, this.event)),
      );
    }, onResume: (Map<String, dynamic> msg) {
      print("onResume");
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => Message(this.user, this.event)),
      );
    }, onMessage: (Map<String, dynamic> msg) {
      print("onMessage");
    });
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(sound: true, alert: true, badge: true));
    _firebaseMessaging.onIosSettingsRegistered
        .listen((IosNotificationSettings setting) {
      print("IOS");
    });

//sendTokenToServer() - function send FCM token my Postgres DB

//When user clicks on send Button

Future sendNotification(userData, eventData) async {
    await Messaging.sendToAll(
      title:
          "${toBeginningOfSentenceCase(userData['User']['name'])} on ${toBeginningOfSentenceCase(eventData['Event']['eventName'])} event",
      body: _messageController.text,
      fcmToken: fcmTokenToServer,
    );
  }

//Messaging.sendToAll()
static Future<Response> sendToAll(
          {@required String title,
          @required String body,
          @required String fcmToken}) =>
      sendTo(title: title, body: body, fcmToken: fcmToken);

  static Future<Response> sendTo({
    @required String title,
    @required String body,
    @required String fcmToken,
  }) =>
      client.post(
        'https://fcm.googleapis.com/fcm/send',
        body: json.encode({
          'notification': {'body': '$body', 'title': '$title'},
          'priority': 'high',
          'data': {
            'click_action': 'FLUTTER_NOTIFICATION_CLICK',
            'id': '1',
            'status': 'done',
          },
          'to': '$fcmToken',
        }),
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'key=$serverKey',
        },
      );

Но нет push-уведомлений.Это то, что я должен реализовать облачные функции для отправки уведомлений ??

1 Ответ

0 голосов
/ 19 июня 2019

Я мог бы отправлять сообщения FCM с одного устройства на другое с токеном темы / FCM без сервера. Вот код

static Future<bool> sendFcmMessage(String title, String message) async {
try {

  var url = 'https://fcm.googleapis.com/fcm/send';
  var header = {
    "Content-Type": "application/json",
    "Authorization":
        "key=your_server_key",
  };
  var request = {
    "notification": {
      "title": title,
      "text": message,
      "sound": "default",
      "color": "#990000",
    },
    "priority": "high",
    "to": "/topics/all",
  };

  var client = new Client();
  var response =
      await client.post(url, headers: header, body: json.encode(request));
  return true;
} catch (e, s) {
  print(e);
  return false;
}

}

если вам нужно отправить запрос данных с токеном FCM, используйте

request = {
      'notification': {'title': title, 'body': message},
      'data': {
        'click_action': 'FLUTTER_NOTIFICATION_CLICK',
        'type': 'COMMENT'
      },
      'to': 'fcmtoken'
    };

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...