我成功地使用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
我发现了使用HeadlessJS的this 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问题,该页面有关于我面临的问题的更多细节。
3条答案
按热度按时间w41d8nur1#
这不起作用的原因是
react-native-invoke-app
不支持Android版本> 8。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方案之后,现在你可以像这样调用它。
你可以在任何地方使用它。
llmtgqce3#
使用
react-native-invoke-app
应该可以完成这项工作。1.确保在根应用程序组件上安装了
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging);
。1.将
backgroundMessaging
从您拥有它的任何子组件中导出,并将其导入到您的应用程序根组件。1.在子组件的函数中调用invokeApp(),与您所做的非常相似。
1.当应用程序不运行时,不要忘记这一点。
我没有测试过这个,但我看不出它不起作用的原因。
希望这有帮助!