收到仅数据的Firebase云消息后,将Android React Native App带到前台

Mr.*_*bot 5 react-native react-native-android firebase-cloud-messaging react-native-firebase

我已成功将Firebase Cloud Messaging与react-native-firebase一起用于在Android设备之间发送和接收仅数据消息。

当设备收到消息时,如果该应用程序在后台或已被杀死,我想将该应用程序置于前台。我收到的通知console.log()在两种情况下都会显示,但是我在弄清楚如何最好地“唤醒”应用程序/将其置于前台时遇到了麻烦:

  firebase.messaging().onMessage((message) => {
    // Process your message as required
    console.log('You got a message!', message);
  });
}
Run Code Online (Sandbox Code Playgroud)

在两种情况下,上述代码均按预期执行。

有没有我可以查看的React Native软件包来帮助实现我想做的事情,还是应该考虑写一些代码Java

提前致谢。

更新资料

我正在尝试实现这样的目标,但不确定是否可以将这样的代码直接添加到我的React Native应用程序中?

更新2

我发现了这个使用HeadlessJS的包react-native-invoke-app

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);
  });
}
Run Code Online (Sandbox Code Playgroud)

但是,这并没有使我的应用程序成为前台。

再次感谢对此的任何帮助。

更新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;
Run Code Online (Sandbox Code Playgroud)

但是,incomingMessage调用该函数时,该应用程序仍不会出现在前台。

更新4

我在github页面上提出了这个问题,react-native-invoke-app该页面上有我所面临问题的更多详细信息。

Mr.*_*bot 4

这不起作用的原因是react-native-invoke-app不支持 Android 版本 > 8。