Флаттер: Как я могу отправить push-уведомление программно с помощью fcm - PullRequest
0 голосов
/ 26 января 2019

Я создаю приложение чата и хочу использовать fcm для отправки уведомления, если у человека есть новое сообщение, но я не знаю, как продолжить.Все учебники, которые я нашел, используют для отправки сообщения с firebase.Но я хочу отправить его автоматически при появлении нового сообщения для человека

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Возможный обходной путь, если вы используете firebase, должен выглядеть следующим образом:

Вам необходимо хранить каждый токен firemase FCM для конкретного пользователя (необходимо учитывать, что пользователь может одновременно войти в систему).на его аккаунте с нескольких устройств), чтобы вы могли хранить userId и его deviceUniqueId на флаттере, вы можете получить его из device_info https://pub.dev/packages/device_info:

  String identifier;
  final DeviceInfoPlugin deviceInfoPlugin = new DeviceInfoPlugin();
  try {
    if (Platform.isAndroid) {
      var build = await deviceInfoPlugin.androidInfo;
      identifier = build.id.toString();
    } else if (Platform.isIOS) {
      var data = await deviceInfoPlugin.iosInfo;
      identifier = data.identifierForVendor;//UUID for iOS
    }
  } on PlatformException {
    print('Failed to get platform version');
  }

и послечтобы получить уникальный токен CFM, предоставляемый Firebase для каждого устройства, вы можете получить его с помощью плагина Firebase firebase_messaging (https://pub.dev/packages/firebase_messaging) getToken () и вставить токен в firestore (или другую базу данных, которую вы используете).хотите сохранить его)

  FirebaseMessaging firebaseMessaging = new FirebaseMessaging();

  firebaseMessaging.requestNotificationPermissions(
      const IosNotificationSettings(sound: true, badge: true, alert: true));
  firebaseMessaging.onIosSettingsRegistered
      .listen((IosNotificationSettings settings) {
    print("Settings registered: $settings");
  });

  firebaseMessaging.getToken().then((token){

    print('--- Firebase toke here ---');
    Firestore.instance.collection(constant.userID).document(identifier).setData({ 'token': token});
    print(token);

  });

После этого вы можете вставить один или несколько токенов FCM, подключенных к нескольким устройствам для одного пользователя. 1 пользователь ... n устройств, 1 устройство ... 1 уникальный токен для полученияpush-уведомления от Firebase.

отправляйте его автоматически, когда появляется новое сообщение для человека : теперь вам нужно вызвать API Firestore (действительно очень быстроно нужно быть осторожным в отношении лимита плана, который вы используете здесь) или другого вызова API, если вы храните токен в другой базе данных, чтобы получить токен / токены для каждого пользователя и отправить push-уведомления.

Для отправки push-уведомления из флаттера вы можете использовать асинхронную функцию Future.PS: Я передаю в качестве аргумента список здесь, чтобы использовать "registration_ids" вместо "to" и отправить push-уведомление на несколько токенов, если пользователь вошел в системуна нескольких устройствах.

Future<bool> callOnFcmApiSendPushNotifications(List <String> userToken) async {

  final postUrl = 'https://fcm.googleapis.com/fcm/send';
  final data = {
    "registration_ids" : userToken,
    "collapse_key" : "type_a",
    "notification" : {
      "title": 'NewTextTitle'
      "body" : 'NewTextBody',
    }
  };

  final headers = {
    'content-type': 'application/json',
    'Authorization': constant.firebaseTokenAPIFCM
  };

  final response = await http.post(postUrl,
      body: json.encode(data),
      encoding: Encoding.getByName('utf-8'),
      headers: headers);

  if (response.statusCode == 200) {
    // on success do sth
    print('test ok push CFM');
    return true;
  } else {
    print(' CFM error');
    // on failure do sth
    return false;
  }
}

Вы также можете проверить почтовый звонок от почтальона, чтобы провести несколько тестов.POST-запрос На заголовки добавьте:

  1. ключ Авторизация с значением ключ = AAAAO ........ // Обзор проекта -> ОблакоОбмен сообщениями -> Ключ сервера
  2. ключ Тип содержимого с значением application / json

А на теле добавьте

{
 "registration_ids" :[ "userUniqueToken1", "userUniqueToken2",... ],
 "collapse_key" : "type_a",
 "notification" : {
     "body" : "Test post",
     "title": "Push notifications E"
 }
}

"registration_ids" для отправки его на несколько токенов (один и тот же пользователь вошел в систему более чем на устройство одновременно) "to" для отправки его наодин токен (одно устройство на пользователя / или всегда обновляет токен пользователя, который связан с его устройством и имеет 1 токен ... 1 пользователь)

0 голосов
/ 26 января 2019

Я перечислю здесь несколько связанных вопросов, на которые я ответил с ответами.Я полагаю, вы найдете много актуальной информации об использовании облачных сообщений Firebase (FCM) в приложении чата.

  1. Является ли FCM единственным способом создания приложения чата?
  2. Предлагаемый подход к использованию FCM в приложении чата
  3. Является ли использование тем лучшим решением, чем использование fcmToken в приложении чата?
  4. Проблемы с FCM onMessage, когда приложение находится в фоновом режиме
  5. Проблема: после выхода из системы пользователь продолжает получать уведомления

Удачи!

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