Сделать push-уведомления всплывающими, когда приложение работает в фоновом режиме с помощью firebase - PullRequest
0 голосов
/ 16 июня 2019

Я настраиваю push-уведомления с помощью своего собственного приложения для пользователей Android, использующих Firebase Cloud Messaging.До сих пор я следовал в основном этому учебнику .Мне удалось сделать push-уведомления для показа на экране блокировки и справиться с ними, когда приложение находится на переднем плане.Когда приложение работает в фоновом режиме, я не могу показать уведомление в виде всплывающего окна.Он появляется на панели уведомлений, но не показывает всплывающее окно, как в уведомлениях Gmail или WhatsApp.

Я считаю, что моя проблема в том, что я не посылаю правильные параметры вместе с сообщением.Я использую консоль Firebase, поэтому она не очень гибкая.Как настроить (программно) уведомление, чтобы оно отображалось как всплывающее при получении?

РЕДАКТИРОВАТЬ:

Настройка уведомлений Канал работает на новых устройствах Android - протестировано на Android 8.1 (уровень API 27),

На старых устройствах - тестирование на Android 6.0 (уровень API 23) - заголовочные уведомления по-прежнему не отображаются.Я отправляю следующее сообщение с помощью консоли aws sns:

{ 
  priority: 'high',
  content_available: true,
  notification: { 
     title: 'hello',
     body: 'Just test',
     android_channel_id: 'test-channel',
     sound: 'default' 
  },
  data: { title: 'title', body: 'body', sound: 'default' }
}

Я также отправлял сообщения, используя настройки консоли Firebase Приоритет Высокий и Звук включен, с идентификатором канала Android и без него.Ничего из этого не сработало.Уведомление приходит в тишине на панели задач.Это обсуждение показывает те же проблемы, но решение 1019 *, на которое указал один человек, не сработало для меня.Я не слишком часто редактировал библиотечный код.Я пробовал раздел Проблемы со старой версией Android (Foreground) , из-за чего заголовки появлялись на переднем плане, но не на заднем плане, что здесь и задумано.

Более того, похоже, что этоявляется нерешенной проблемой для многих людей, использующих этот собственный пакет реакции ( github Issue , GitHub Issue ).

Итак, я думаю, что я должен переформулировать свой вопрос.Для Android 7.1 или ниже (тестирование на 6.0):

  1. Достаточно ли установки приоритета = 'high' и messages.sound = 'default' для отображения уведомлений в виде головы?(Из моего исследования это должно быть)

  2. Нужно ли мне вносить какие-либо дополнительные изменения в код моего приложения, чтобы переходить от уведомлений, приходящих без уведомления на панели задач, к тому, чтобы он отображался как заголовок?

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Спасибо @ismailalaoui за помощь в ответе на этот вопрос. Я не мог отправлять уведомления на показы в виде заголовков при получении System Tray, поэтому мне пришлось обходиться вокруг. Я покажу, как я это сделал с реактивом-native-firebase.

Для новых устройств Android, , вы должны создать канал уведомлений . Добавьте следующее в ваш App.js

componentDidMount(){
  ...
  const channel = new firebase.notifications.Android.Channel('test-channel', 'Test Channel', firebase.notifications.Android.Importance.Max).setDescription('My apps test channel'); //add this line

  firebase.notifications().android.createChannel(channel); //add this line
}

Для старых устройств мне приходилось обходиться. Вместо того, чтобы использовать уведомления, я использовал сообщения с данными, поэтому вы можете слушать их в фоновом режиме. См. Пункт 4 .

Сначала создайте новый файл bgMessaging.js:

import firebase from 'react-native-firebase';

export default async (message) => {
  // handle your message
  const notification = new firebase.notifications.Notification()
  .setNotificationId(message.messageId)
  .setTitle(message.data.title)
  .setBody(message.data.body)
  .android.setChannelId('test-channel')
  .android.setSmallIcon('ic_launcher')
  .android.setPriority(firebase.notifications.Android.Priority.Max)
  .setSound('default');

  await firebase.notifications().displayNotification(notification);
  console.log({message})
  return Promise.resolve();
}

В вашем файле index.js добавьте:

import bgMessaging from './src/bgMessaging'; // <-- Import the file you just created

...

AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => bgMessaging); 

response-native-firebase использует Headless JS для запуска кода JavaScript, определенного вами в bgMessaging. Согласно документам вам необходимо добавить сервис в AndroidManifest.xml. На android / app / src / main / AndroidManifest.xml добавьте:

<application>
  ...
  <service android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService" /> <!--Add this-->
  ...
</application>
1 голос
/ 16 июня 2019

для отображения уведомлений во всплывающем окне, например whatsApp, вы должны установить значение канала уведомлений с помощью IMPORTANCE_HIGH

из официальной документации здесь

Делаетзвук и появляется в виде предупреждения

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance)

Редактировать:

для устройства под управлением lollipop -> Nougat , вам необходимо установить вибрацию или мелодию звонка, чтобы заставить работать Heads-up.Тем не менее, вот быстрый взлом, который не требует разрешения VIBRATE для создания предварительного уведомления. ссылка

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...