仅收到数据 Firebase 云消息时将 Android React Native 应用程序带到前台

问题描述 投票:0回答:3

我成功使用 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);
  });
}

以上代码在两种情况下都按预期执行。

我可以查看 React Native 包来帮助实现我想要做的事情,还是我应该考虑编写一些 Java?

更新

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

更新2

我发现了这个包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
问题,该页面包含有关我面临的问题的更多详细信息。

firebase-cloud-messaging react-native react-native-firebase
3个回答
4
投票

这不起作用的原因是

react-native-invoke-app
不支持Android版本> 8。


3
投票

而不是

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

Android 上:

在 ` 标签下的

<data android:scheme=“my-awesome-app” />
中添加
./android/app/src/main/AndroidManifest.xml
意图。

iOS 上

  1. 打开您的 xcode,启动 iOS 项目并在 xcode 中打开

    Info.plist
    文件。

  2. 在根键下添加

    URL types
    行,然后添加一个项目,例如:
    Item 0
    ,然后
    URL Schemes
    ,然后添加一个带有字符串值的项目。 (在我们的示例中是 my-awesome-app)。 就像下图一样

现在设置好 url 方案后,现在你可以像这样调用它了。

import {Linking} from 'react-native';

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

您可以在任何您想要的地方使用它。


1
投票

使用

react-native-invoke-app
应该可以完成工作。

  1. 确保您的
    AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging);
    位于您的根应用程序组件上。
  2. 从您所在的子组件中导出
    backgroundMessaging
    并将其导入到您的应用程序根组件中。
  3. 在子组件的函数内部调用 invokeApp() ,与您所做的非常相似。
  4. 当应用程序未运行时,不要忘记这个

我还没有测试过这个,但我看不出它不起作用的原因。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.