Hi,
I can't figure out how to the open the app when it's in background / quit state and the user press a notification.
My notifcations partern is the folowing (on background / quite state):
Everything works fine exept that the local notification can not be press, or at least pressing it doesn't open the app, whatever its state is.
The notification object look like this:
let nofifData = {
title: "title",
body : "body",
id: notifId.toString(),
data : { conv_key: data.conv_key},
android: {
channelId : 'myAppChannel',
autoCancel : true,
color : "#72CDCF",
importance : Importance.HIGH,
smallIcon : "ic_notification",
sound: localPref.sound ? "default" : '',
badgeCount : getBadgeCount(),
pressAction: {
id: "default",
},
}
};
By the way, when I press the notification, i get in the logs a warning:
No task registered for key app.notifee.notification.event
I'm not sure it's related but well, it doest hurt mentionning it...
Thanks in advance for any help (and for the library !)
Worth mentionning (or not) that I'm also using
same problem i am facing :(
Hey, I can partly answer that as I also had the same problem.
You need to call notifee.onBackgroundEvent(onBackgroundEventNotifee); to register your handler for these events. The problem I am now seeing however is when I do this it seems to conflict with the call I make to RN Firebase to set the background handler with messaging().setBackgroundMessageHandler(onBackgroundMessageReceived);
If I have both of those in my index.js it stops receiving notifications. I think what would help everybody here is a sample project which shows the expected setup with RN Firebase for example
can you please show a sample to use notifee.onBackgroundEvent(onBackgroundEventNotifee);
That's all there is to it really. Provide the function you want invoked as a param when the notification is opened and do whatever you want in it
If I were to take a guess, I'd say wix/react-native-navigation is the problem here. Let me take a look at their docs are see what they're doing with intents/activities.
+1
I've had luck with
pressAction: {
launchActivity: "default",
id: "default",
},
I've had luck with
pressAction: { launchActivity: "default", id: "default", },
Thanks ! It did the trick :)
@Ehesp, it might adding this in the docs.
It works!
Thanks @yotam-nots
But press local notification with app in background, dont triger any event in app :(
I need a method like messaging().onNotificationOpenedApp to receive notification when user press it
Need to check this out, if the pressAction on the root of a notification didn't have a launchActivity it should be default behind the scenes - seems this is a bug
The docs clearly say that If the application is in a minimized state it is moved to the foreground with this code:
notifee.displayNotification({
title: 'New notification',
android: {
channelId,
pressAction: {
id: 'default',
},
},
});
But so far I cannot see any way to do this with any type of action handling - I cannot seem to _only_ move the app from the background to the foreground which I think should be changed, because as the docs also say:
The Android guidelines suggest a notification should always open the application when pressed.
I have tried to launch the root app component as a 'custom component':
javascript:
pressAction: {
id: 'default',
mainComponent: App,
},
but this seems to have the same effect as assigning launchActivity: 'default' to an action which kills the app before launching it.
I have tried to launch the root app component as a 'custom component':
pressAction: { id: 'default', mainComponent: App, },but this seems to have the same effect as assigning
launchActivity: 'default'to an action which kills the app before launching it.
mainComponent: App, is incorrect here, this should be the string name of the component registered via AppRegistry.registerComponent rather than the component itself: https://notifee.app/react-native/docs/android/interaction#advanced-custom-component
It would be nice if we had a single callback onNotificationOpen and getInitialNotification that works on both react-native-firebase and notifee or a notifee.onNotificationOpenedApp, because I have to handle 4 callbacks/logic and they do not work to all use cases for me. I just gave up using onBackgroundEvent and created a custom logic, because it does not allow me to differentiate app killed/quit (background) to app minimized (also background) and it is not called for notification generated by FCM on background.
I am using this logic below to be able to identify the push was opened, based on the fact that after getInitialNotification of notifee and react-native-firebase are called it does not return duplicated notification. Also I call the function checkAppOpenedByNotification on onNotificationOpen and onForegroundEvent:
```
useEffect(() => {
const onOpenNotification = (localNotification: LocalNotification) => {
Alert.alert(localNotification.action)
}
fcmService.checkAppOpenedByNotification(onOpenNotification)
const handleAppStateChange = (state: AppStateStatus) => {
if (state === 'active') {
fcmService.checkAppOpenedByNotification(onOpenNotification)
}
}
AppState.addEventListener('change', handleAppStateChange)
return () => {
AppState.removeEventListener('change', handleAppStateChange)
fcmService.unRegisterForegroundListeners()
}
}, [])
// fcmService.ts
public checkAppOpenedByNotification = async (OnOpenedNotification: OnOpenedNotification) => {
const notification = await this.getInitialNotification()
if (notification) {
OnOpenedNotification(notification)
}
}
private getInitialNotification = async () => {
const notifeeNotification = await notifee.getInitialNotification()
const remoteNotification = await messaging().getInitialNotification()
return (notifeeNotification && mapNotifeeNotificationToLocalNotification(notifeeNotification))
|| (remoteNotification && mapRemoteNotificationToLocalNotification(remoteNotification))
}
```
Most helpful comment
It works!
Thanks @yotam-nots
But press local notification with app in background, dont triger any event in app :(
I need a method like
messaging().onNotificationOpenedAppto receive notification when user press it