Flutter / Firebase - отправка уведомления пользователю - PullRequest
0 голосов
/ 10 февраля 2020

Цель: отправить уведомление для всех пользовательских устройств.

Описание проблемы: У меня проблема с отправкой уведомления для одного пользователя. После регистрации я сохраняю токен FCM в базе данных, чтобы пользователь мог отправить ему уведомление. Проблема в том, что когда пользователь будет регистрироваться несколько раз - один и тот же токен будет сохранен для более чем одного пользователя.

Пример:

  1. регистрация пользователя с электронными письмами test@gmail.com и test2@gmail.com
  2. логин пользователя на test@gmail.com
  3. отправка уведомления другим пользователем на test@gmail.com
  4. уведомление будет отправлено на оба аккаунта (test@gmail.com и test2@gmail.com), а не только на test@gmail.com

Так вот мой вопрос - как отправить уведомление для всех устройств, подключенных к пользователю, а не для всех пользователей, подключенных к устройству?

QuerySnapshot ref = await Firestore.instance.collection('users')
    .document(_textController.text)
    .collection('tokens')
    .getDocuments();

ref.documents.forEach((snapshot) async {
  http.Response response = await http.post(
    'https://fcm.googleapis.com/fcm/send',
    headers: <String, String>{
      'Content-Type': 'application/json',
      'Authorization': 'key=$serverKey',
    },
    body: jsonEncode(
      <String, dynamic>{
        'notification': <String, dynamic>{
          'body': 'this is a body',
          'title': 'this is a title'
        },
        'priority': 'high',
        'data': <String, dynamic>{
          'click_action':
          'FLUTTER_NOTIFICATION_CLICK',
          'id': '1',
          'status': 'done'
        },
        'to': snapshot.data['token'],
      },
    ),
  );
});

Спасибо за помощь!

1 Ответ

0 голосов
/ 10 февраля 2020

Я НАШЕЛ РЕШЕНИЕ!

Все, что вам нужно сделать, если у вас возникла та же проблема, - удалить токен при выходе из системы.

final Firestore store = Firestore.instance;
final FirebaseAuth auth = FirebaseAuth.instance
String token = await _fcm.getToken();
await store
    <reference to token document>
    .delete();
await auth.signOut();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...