Отправка звука уведомления с помощью плагина flutter firebase_messaging - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь заставить свое приложение отправить уведомление пользователю, который предупредит его звуком уведомления по умолчанию.

Пока что я использую плагин firebase_messaging со следующим кодом:

Message firebaseMessage = Message()
..to = token
..body = body
..title = title;
firebaseCloudMessage.send(firebaseMessage);

Это позволяет мне отправлять уведомления выбранному пользователю и отображать его на главном экране. Единственная проблема заключается в том, что он не воспроизводит звук на iOS и не выдает Apple Watch тактильные ощущения при доставке уведомления.

Как воспроизвести звук с помощью фреймворка firebase_messaging?

Если это поможет, вот моя конфигурация:

_firebaseMessaging.requestNotificationPermissions(
  IosNotificationSettings(
    sound: true,
    badge: true,
    alert: true
  )
);

Звуки и тактильные звуки работают, если я отправляю сообщение напрямую из firebase и включаю звуки в настройках, я просто не могу понять, как это сделать с помощью этого фреймворка.

1 Ответ

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

Я предполагаю, что вы используете пакет fcm_push. Вам необходимо добавить дополнительный тег в ваше сообщение. Попробуйте:

firebaseMessage.data = [Tuple2('sound', 'default')];

Это работает для Android. Возможно, вам придется выяснить, как получить fcm_push для отправки правильной полезной нагрузки для сообщения APNS. См. документацию API и справочную информацию APNS .

(я сам не пользуюсь fcm_push - мне так же легко писать напрямую в API FCM с использованием HTTP. Например ...)

final String url = 'https://fcm.googleapis.com/fcm/send';

Map<String, dynamic> notification = {
  'body': 'some body',
  'title': 'some title',
};

Map<String, dynamic> data = {
  //'click_action': 'FLUTTER_NOTIFICATION_CLICK',
  'someKey': 'someValue',
  'sound': 'default',
};

Map<String, dynamic> message = {
  'notification': notification,
  'priority': 'high',
  'data': data,
  'to': '', // this is optional - used to send to one device
};

Map<String, String> headers = {
  'authorization': auth,
  'content-type': 'application/json',
};

void sendNotification() async {
  message['to'] = testToken; // todo - set the relevant values
  http.Response r =
      await http.post(url, headers: headers, body: json.encode(message));
  print(r.statusCode);
  print(r.body);
}
...