Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bugfix][Android] Use JobServiceIntent to fetch the FCM token in the background #678

Conversation

Robfz
Copy link
Contributor

@Robfz Robfz commented Sep 23, 2020

Highlights

  • Changes the mechanism by which the library fetches the FCM token in the background.

Context

In newer Android versions (8+), background applications cannot start IntentService's. Using the notifications library in these newer Android versions will result in a lot of exceptions of the type java.lang.IllegalStateException. Sample stack trace:

java.lang.IllegalStateException: 
  at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1522)
  at android.app.ContextImpl.startService (ContextImpl.java:1478)
  at android.content.ContextWrapper.startService (ContextWrapper.java:650)
  at com.wix.reactnativenotifications.RNNotificationsModule.startFcmIntentService (RNNotificationsModule.java:135)
  at com.wix.reactnativenotifications.RNNotificationsModule.initialize (RNNotificationsModule.java:50)
  at com.facebook.react.bridge.ModuleHolder.doInitialize (ModuleHolder.java:222)
  at com.facebook.react.bridge.ModuleHolder.markInitializable (ModuleHolder.java:97)
  at com.facebook.react.bridge.NativeModuleRegistry.notifyJSInstanceInitialized (NativeModuleRegistry.java:102)
  at com.facebook.react.bridge.CatalystInstanceImpl$2.run (CatalystInstanceImpl.java:441)
  at android.os.Handler.handleCallback (Handler.java:790)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:26)
  at android.os.Looper.loop (Looper.java:164)
  at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:225)
  at java.lang.Thread.run (Thread.java:764)

Now, in order to start intents in the background, the JobIntentService class must be extended.

This PR consists in basically the same changes proposed by @migbot in #491 (this PR was closed for inactivity a few months ago).

Should close #671;

@Robfz Robfz requested a review from yogevbd as a code owner September 23, 2020 00:03
@Robfz Robfz changed the title Use JobServiceIntent to fetch the FCM token in the background [Bugfix][Android] Use JobServiceIntent to fetch the FCM token in the background Sep 23, 2020
@yogevbd yogevbd merged commit 01f8f9e into wix:master Sep 23, 2020
mburmistrov pushed a commit to mburmistrov/react-native-notifications that referenced this pull request Jan 10, 2021
…background (wix#678)

### Highlights
- Changes the mechanism by which the library fetches the FCM token in the background.

### Context
In newer Android versions (8+), background applications cannot start `IntentService`'s. Using the notifications library in these newer Android versions will result in a lot of exceptions of the type `java.lang.IllegalStateException`. Sample stack trace:

```
java.lang.IllegalStateException: 
  at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1522)
  at android.app.ContextImpl.startService (ContextImpl.java:1478)
  at android.content.ContextWrapper.startService (ContextWrapper.java:650)
  at com.wix.reactnativenotifications.RNNotificationsModule.startFcmIntentService (RNNotificationsModule.java:135)
  at com.wix.reactnativenotifications.RNNotificationsModule.initialize (RNNotificationsModule.java:50)
  at com.facebook.react.bridge.ModuleHolder.doInitialize (ModuleHolder.java:222)
  at com.facebook.react.bridge.ModuleHolder.markInitializable (ModuleHolder.java:97)
  at com.facebook.react.bridge.NativeModuleRegistry.notifyJSInstanceInitialized (NativeModuleRegistry.java:102)
  at com.facebook.react.bridge.CatalystInstanceImpl$2.run (CatalystInstanceImpl.java:441)
  at android.os.Handler.handleCallback (Handler.java:790)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:26)
  at android.os.Looper.loop (Looper.java:164)
  at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:225)
  at java.lang.Thread.run (Thread.java:764)
```

Now, in order to start intents in the background, the `JobIntentService` class must be extended.

This PR consists in basically the same changes proposed by @migbot in wix#491 (this PR was closed for inactivity a few months ago).

Should close wix#671;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Prod error - Fatal Exception: java.lang.IllegalStateException
2 participants