在收到仅数据Firebase Cloud消息时将Android React Native应用置于前台

xfb7svmp  于 2023-10-22  发布在  React
关注(0)|答案(3)|浏览(126)

我成功地使用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

我发现了使用HeadlessJSthis package 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);
  });
}

然而,这并没有把我的应用程序带到前台。

更新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问题,该页面有关于我面临的问题的更多细节。

w41d8nur

w41d8nur1#

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

pqwbnv8z

pqwbnv8z2#

代替invokeapp();,你可以描述一个url方案,并打开与该方案相关的url,使应用程序打开并进入前台。

Android版:

./android/app/src/main/AndroidManifest.xml中的标签下添加` intent。

在iOS上

1.打开你的xcode,打开iOS项目,在xcode中打开Info.plist文件。
1.在根键下添加URL types行,然后添加一个项目,例如:Item 0,然后URL Schemes,然后是一个具有字符串值的项。(在我们的例子中,它是my-awesome-app)。就像下图一样
在设置好URL方案之后,现在你可以像这样调用它。

import {Linking} from 'react-native';

Linking.openURL('my-awesome-app://');

你可以在任何地方使用它。

llmtgqce

llmtgqce3#

使用react-native-invoke-app应该可以完成这项工作。
1.确保在根应用程序组件上安装了AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging);
1.将backgroundMessaging从您拥有它的任何子组件中导出,并将其导入到您的应用程序根组件。
1.在子组件的函数中调用invokeApp(),与您所做的非常相似。
1.当应用程序不运行时,不要忘记这一点。
我没有测试过这个,但我看不出它不起作用的原因。
希望这有帮助!

相关问题