我需要处理推送通知,并且我正在使用onesignal
。
目前,我正在主屏幕上处理推送通知,并且正在使用react-navigation
。
componentDidMount() {
OneSignal.addEventListener('received', this.onReceived);
OneSignal.addEventListener('opened', this.onOpened);
}
componentWillUnmount() {
// OneSignal.removeEventListener('received');
// OneSignal.removeEventListener('opened');
}
onReceived(notification) {
console.log('Notification received: ', notification);
}
onOpened = (data) => {
const { notification: { payload } } = data;
if (payload.additionalData) {
if (payload.additionalData.params) {
this.props.navigation.navigate({
routeName: payload.additionalData.route,
params: payload.additionalData.params,
key: payload.notificationID
});
}
}
}
使用此代码,我可以导航到通知数据包中指定的路由。
现在我面临的问题是,我有一个屏幕,并且想要刷新页面,例如,调用该组件的getData();
。
使用这种方法,我可以导航到该屏幕,并且当我在该屏幕上时收到通知。借助键,我可以导航到该屏幕。
让我们说我要进入OrderDetail屏幕,当我收到通知时,它将导航到Order Detail,
Home Screen --> Order Detail
现在,如果我在OrderDetail
内并且收到通知,那将是
Home Screen ---> Order Detail ---> Order Detail
...等等'
在这种情况下如何处理推送通知?
答案 0 :(得分:1)
可能...在主页和详细信息页面上以不同方式处理推送通知。
在首页页面上说,在didFocus
时收听通知,在willBlur
时删除监听器。因此,处理程序仅在用户位于 Home 上时才会执行操作。并导航(路由)到首页页面的通知处理程序中的“详细信息”。
同样,在详细信息页面上,在didFocus
时收听通知,在willBlur
时删除监听器。当处理程序仅在收到通知时更新内容。
---编辑---
首页:
constructor() {
this.props.navigation.addListener(
'willBlur',() => {
OneSignal.removeEventListener('received');
OneSignal.removeEventListener('opened');
}
);
this.props.navigation.addListener(
'didFocus',() => {
OneSignal.addEventListener('received');
OneSignal.addEventListener('opened');
}
);
}
// handler implementation is the same
详细信息:
//same lifecycle implementation
// but different handler
onOpened = (data) => {
const { notification: { payload } } = data;
if (payload.additionalData) {
if (payload.additionalData.params) {
this.setState(paramsUsedByDetail: payload.additionalData.params);
}
}