Сообщение только о данных от Firebase, когда приложение закрыто, полученное через 5 минут - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь отобразить сообщение с данными в моем трее Android, когда приложение закрыто пользователями, то есть когда пользователь перетаскивает приложение в сторону в списке последних приложений. Хотя сообщения с данными просто принимаются так:

  1. Приложение закрыто. Сообщение данных отправлено.
  2. Сообщение не получено, когда приложение закрыто.
  3. Приложение открыто.
  4. Через 4 ~ 5 минут сообщение с данными принимается и отображается в трее Android.

Чтобы добиться этого, я использую реагировать-нативный-firebase lib, следуя его документам .

import firebase from 'react-native-firebase';
import type { RemoteMessage } from 'react-native-firebase';

export default async (message: RemoteMessage) => {

    const notifPromise = new Promise((resolve, reject) => {

         let notification = new firebase.notifications.Notification();
              notification.android.setPriority(firebase.notifications.Android.Priority.High);
              notification.android.setChannelId("test-channel");

        resolve(firebase.notifications().displayNotification(notification));
    }); 

    console.log("MESSAGE IN BACKGROUND OR APP CLOSED");

    return notifPromise.resolve();
}

Приведенный выше код отлично работает в фоновом режиме, я имею в виду, когда приложение просто «свернуто» для вторичного плана.

AndroidManifest.xml, HeadlessTask и MainApllication.java теоретически соответствуют документам. Я просто показываю пустой интерфейс в трее Android для проверки.

Сообщение от Почтальона:

{
"to": "erVxmCT6rgA:APA91bGn6q9...",

"data": {
    "custom1": "custom1",
    "custom2": "custom2"
   }
}

Вопросы : Что может быть не так, если он работает на фоне? Почему происходит такое поведение?

1 Ответ

0 голосов
/ 18 мая 2018

После глубокого поиска я смог разобраться.

Я запускал приложение на устройстве ASUS.В соответствии с этим ответом stackoverflow , смартфоны ASUS демонстрируют повышенную производительность, поэтому, когда вы удаляете приложение из списка недавних приложений, вы заставляете приложение останавливаться .Таким образом, HeadlessJSTask, отвечающий за получение сообщений, берется из списка процессов Android.

Я также внес некоторые изменения в мои коды:

Исправление обещания:

export default async (message: RemoteMessage) => {

    const notification = new firebase.notifications.Notification();
              notification.android.setPriority(firebase.notifications.Android.Priority.High);
              notification.android.setChannelId("test-channel");
              notification.setTitle(message.data.custom1);

        firebase.notifications().displayNotification(notification);

    return Promise.resolve(message);
}

Установка высокого приоритета в нашем сообщении данных (необходимо для фона и приложения закрытысообщения):

{

"to": "cKUNOaOnvaY:APA91bFVAPLSuHogmZfxc1GlhqOhEkxcscoRvZxRrzno0XjyDkqYZVmNqJVL4v6mcQgH4p9zt9Zxz5aDugCjNy7CBg_pbXb8u8X6336K0x6WffdXoGOl50lCtHt46oS78Yyc9XM3gPJQ",

"data": {
    "custom1": "custom1",
    "custom2": "custom2"
},

"priority": "high"

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