invertase / invertase/react-native-firebase

[🐛] messaging on iOS on new architecture needs updated docs / implementation to handle isHeadless / quit state

Open
#8,217 8 comments 0 reactions 0 assignees View on GitHub
platform: ios plugin: messaging type: bug Workflow: Needs Review
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.