当应用关闭时,Firebase 会在 5 分钟后收到仅数据消息



当用户关闭应用程序时,即当用户将应用程序拖到最近的应用程序列表中的一侧时,我正在尝试在我的 Android 托盘上显示数据消息。虽然,数据消息只是像这样接收:

  1. 应用已关闭。已发送数据电文。
  2. 关闭应用程序时不会收到消息。
  3. 应用已打开。
  4. 4~5分钟后,接收数据消息并显示在Android托盘中。

为了实现这一点,我正在使用react-native-firebase库,遵循其文档。

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托盘中显示空白UI进行测试。

从邮递员发送的消息:

{
"to": "erVxmCT6rgA:APA91bGn6q9...",
"data": {
"custom1": "custom1",
"custom2": "custom2"
}
}

问题:一旦它在后台工作,可能会出现什么问题?为什么会发生这种行为?

经过深入搜索,我能弄清楚。

我在华硕设备中运行应用程序。根据这个堆栈溢出答案,华硕智能手机有一个性能技巧,可以获得更多的电池寿命,所以当你从最近的应用程序列表中滑动一个应用程序时,你是在强制应用程序停止。因此,负责接收消息的 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"
}

相关内容

  • 没有找到相关文章