react-native - 单击通知反应本机 onesignal 时,错误未定义不起作用
问题描述
我正在使用一个信号反应本机库来接收通知,即使我收到通知,一切工作正常,但问题是当我想打开特定屏幕时。当我单击通知时,我收到一个未定义的错误,这是我的代码。
export default class App extends Component {
constructor(props){
super(props);
}
componentWillMount() {
OneSignal.init("key");
OneSignal.addEventListener('received', this.onReceived);
OneSignal.addEventListener('opened', this.onOpened);
OneSignal.addEventListener('ids', this.onIds);
}
componentWillUnmount() {
OneSignal.removeEventListener('received', this.onReceived);
OneSignal.removeEventListener('opened', this.onOpened);
OneSignal.removeEventListener('ids', this.onIds);
}
onReceived(notification) {
console.log("Notification received: ", notification);
}
onOpened(openResult) {
console.log('Message: ', openResult.notification.payload.body);
console.log('Data: ', openResult.notification.payload.additionalData, openResult.notification.payload.additionalData.catalog);
console.log('isActive: ', openResult.notification.isAppInFocus);
console.log('openResult: ', openResult);
//if (typeof openResult.notification.payload.additionalData.catalog !== 'undefined'){
this.props.navigation.navigate('CatalogInfo', {
query: openResult.notification.payload.additionalData.catalog,
});
//}
}
onIds(device) {
console.log('Device info: ', device);
}
render() {
return (
<RootStack />
);
}
}
const NavigationScreen = createStackNavigator(
{
Login: LoginScreen,
Register: RegisterScreen
}
)
const CustomDrawerComp = (props) => (
<SafeAreaView styles={{flex: 1}}>
<ScrollView>
<DrawerItems {...props} />
</ScrollView>
</SafeAreaView>
)
const MainApp = createDrawerNavigator(
{
Home: HomeScreen,
Setting: SettingScreen,
CatalogInfo: CatalogInfoScreen,
Slider: ImageSlider,
Category: CategoryScreen
},
{
contentComponent: CustomDrawerComp
}
)
const RootStack = createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: MainApp,
Auth: NavigationScreen,
},
{
initialRouteName: 'AuthLoading',
}
);
即使我单击通知 this.props.navigation 未定义
解决方案
我遇到过同样的问题。我尝试在 App.js 中执行此操作,但导航在那里不起作用,至少在那里添加参数。
所以我最终将它与 AsyncStorage 一起存储在我的主组件(第一个屏幕)上,从 AsyncStorage 加载数据,如果它包含数据,则导航到特定屏幕。
导航有效,当我单击通知并关闭应用程序时,只有 onOpened 不会运行。该应用程序正常打开,但没有导航。再次关闭应用程序并重新打开它,会为我显示带有通知文本的特定屏幕。
推荐阅读
- python - 如何通过使用python函数从文本文件中导入坐标来计算距离
- python - 如何修复 Python 中的“您必须使用 dtype float 和 shape [?,1,680,1] 为占位符张量“Placeholder_2”提供值?
- java - Dagger中的单例方法
- android-studio - 在 android studio 模拟器上运行 react native 应用程序
- c# - 如何在 ASP.NET Core 中处理跨站点脚本
- java - 无法为 oracle-java8-installer 获取 Java 包
- r - 如何不使用嵌套的 for 循环并改进我的 R 代码?
- .net - Azure 函数 - 从另一个函数调用函数
- c# - 在签名中添加 LTV 使 pdf 使用 C# 无效
- android - Flutter:任务':location:verifyReleaseResources'的执行失败