【发布时间】:2019-10-27 11:24:10
【问题描述】:
我已成功使用Firebase Cloud Messaging with react-native-firebase 在 Android 设备之间发送和接收纯数据消息。
当设备收到消息时,如果应用程序在后台或已被杀死,我想将应用程序带到前台。我收到的通知在这两种情况下都会显示console.log(),但我无法弄清楚如何最好地“唤醒”应用程序/将其置于前台:
firebase.messaging().onMessage((message) => {
// Process your message as required
console.log('You got a message!', message);
});
}
以上代码在两种情况下都按预期执行。
是否有我可以查看的 React Native 包来帮助实现我正在尝试做的事情,或者我是否应该考虑编写一些 Java?
更新
我正在尝试实现类似this 但不确定是否可以将这样的代码直接添加到我的 React Native 应用程序中?
更新 2
我发现this package react-native-invoke-app 使用HeadlessJS。
HeadlessJS 要求您在 index.js 中使用此代码:
AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));
但是Firebase Cloud Messaging 已经需要你在同一个地方提供这行代码,我猜这和上面做的一样:
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging);
按照react-native-invoke-app 文档,然后我将调用以在firebase.messaging().onMessage((message)) 回调中调用我的应用程序,如下所示:
firebase.messaging().onMessage((message) => {
// Process your message as required
invokeApp();
console.log('You got message!', message);
});
}
但是,这并没有将我的应用程序带到前台。
更新 3
我现在已将 invokeApp() 调用移到 Firebase backgroundNotificationListener 函数中,这是一项无头任务,似乎是正确的方法:
import invokeApp from 'react-native-invoke-app';
const incomingMessage = async (message) => {
// handle your message
invokeApp();
return Promise.resolve();
}
export default incomingMessage;
但在调用incomingMessage 函数时,应用仍然不会出现在前台。
更新 4
我在react-native-invoke-app github 页面上提出了this 问题,其中包含有关我面临的问题的更多详细信息。
【问题讨论】:
-
更正:*FCM 仅数据消息时的前景..
-
您好,Robot 先生,您有没有为上述问题找到合适的解决方案,因为我也在尝试相同的解决方案
-
嘿 @HardikDesai 请查看 react-native-callkeep 上的 backToForeground() 方法尝试在 HeadlessJS 后台函数中调用它
-
好的,我会检查你是否有任何无头代码参考
-
是的,我正在使用 Firebsae 云消息传递的无头任务:rnfirebase.io/messaging/usagereactnative.dev/docs/headless-js-android
标签: react-native firebase-cloud-messaging react-native-android react-native-firebase