我试图在用户关闭应用时在我的Android托盘上显示数据消息,即当用户将应用拖到最近的应用列表中时。尽管如此,数据信息只是这样收到:
为实现这一目标,我使用 react-native-firebase lib,跟随docs。
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理论上与docs一致。我只是在Android托盘中显示空白UI以进行测试。
邮递员发来的消息:
{
"to": "erVxmCT6rgA:APA91bGn6q9...",
"data": {
"custom1": "custom1",
"custom2": "custom2"
}
}
问题:一旦它在后台工作,会出现什么问题?为什么会发生这种情况?
答案 0 :(得分:1)
经过深入搜索,我能搞清楚。
我在华硕设备上运行应用程序。根据这个stackoverflow answer,华硕智能手机的性能技巧可以获得更长的电池续航时间,因此当您从最近的应用列表中移除应用时,您迫使应用停止。因此,负责接收消息的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"
}