invertase / invertase/react-native-firebase
[🐛] messaging on iOS on new architecture needs updated docs / implementation to handle isHeadless / quit state
- Dominant language
- TypeScript
- Stars
- 12.3k
- Forks
- 2.3k
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 79
Description
Hi, I'm using react native v0.76.5 (new architecture is enabled) and react-native-firebase/messaging v21.6.2.
According to the [documentation](https://rnfirebase.io/messaging/usage#background-application-state), I have the following code in index.js
```
messaging().setBackgroundMessageHandler(async remoteMessage => {
//
});
const HeadlessCheck = ({ isHeadless }) => {
if (isHeadless) return null;
return ;
}
AppRegistry.registerComponent(appName, () => HeadlessCheck);
```
I have the the following code in AppDelegate.mm:
```
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.moduleName = @"gk_research_app_staging";
// You can add your custom initial props in the dictionary below.
// They will be passed down to the ViewController used by React Native.
// self.initialProps = @{};
// return [super application:application didFinishLaunchingWithOptions:launchOptions];
self.initialProps = [RNFBMessagingModule addCustomPropsToUserProps:nil withLaunchOptions:launchOptions];
[FIRApp configure];
[application registerForRemoteNotifications];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
```
I have a problem for iOS device - when the app is in quit state and receives a notification, after a few seconds, I click the notification which makes the app open, but nothing is shown. I know it's because of "if (isHeadless) return null;".
The following logs are in my console:
When the app is opened(foreground/background):
Running "test_app" with {"rootTag":1,"initialProps":{"concurrentRoot":true,**"isHeadless":false**},"fabric":true}
When the app is quit and receives a notification, the bundle is re-generated:
Running "test_app" with {"rootTag":1,"initialProps":{"concurrentRoot":true,**"isHeadless":true**},"fabric":true}
When re-open the app or open the app by the notification, the bundle is not regenerated and keep the last state:
Running "test_app" with {"rootTag":1,"initialProps":{"concurrentRoot":true,**"isHeadless":true**},"fabric":true}
This issue does not happen when the app is already open, no matter if it is in foreground or background state, because the bundle will not be re-generated.
To make the app UI display, I need to exit the app and open the app again which cause the bundle re-generated:
Running "test_app" with {"rootTag":1,"initialProps":{"concurrentRoot":true,**"isHeadless":false**},"fabric":true}
How can I solve this issue?
I need your help!!!
Related:
https://github.com/invertase/react-native-firebase/issues/5388
I've submitted a bug report in react native:
https://github.com/facebook/react-native/issues/48551
Contributor guide
Assessment
This issue has not been assessed yet.