onNotification not called when clicking on GCM notification while app is in the background
See original GitHub issueI’m on version 3.0.2
When I send a GCM notification via node-pushnotification, I receive the notification on my android simulator.
When I click the notification (app is running in the background), it opens the app but does not call onNotification. I’ve tried with both popInitialNotification true and false, no dice.
I’ve gone through #652 #495 #490 #72, and several others in my googling; but not found why this isn’t working. My code below includes several suggestions from these other threads.
I’ve set up a separate pushNotification.js
file that gets included in index.js
to make sure it gets set up immediately, then my component consumes via the default export:
import PushNotification from 'react-native-push-notification';
let queued = [];
let config = null;
const queue = (fn) => (...args) => {
if (!config) {
queued.push([fn, args])
}
else {
fn(...args);
}
};
const releaseQueue = () => {
queued.forEach(queueItem => queueItem[0](...queueItem[1]));
queued = [];
};
PushNotification.configure({
onNotification: queue((notification) => {
config.onNotification(notification)
}),
onRegister: queue((...args) => {
config.onRegister(...args)
}),
senderID: 'mySenderId',
popInitialNotification: true
});
export default (c) => {
config = c;
releaseQueue()
};
I tried setting up an intent filter like in some of the comments that say their problems were solved, so that maybe I could at least have the push info in my initial props. No dice:
<intent-filter>
<action android:name="OPEN_MAIN_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
private JSONObject getPushData(String dataString) {
try {
return new JSONObject(dataString);
} catch (Exception e) {
return null;
}
}
@Override
protected Bundle getLaunchOptions() {
Intent mainIntent = getIntent();
String dataValue = "";
Bundle initialProps = new Bundle();
if (mainIntent != null) {
Bundle bundle = mainIntent.getExtras();
if (bundle != null) {
JSONObject data = getPushData(bundle.getString("data"));
if (data != null) {
try {
dataValue = data.toString();
} catch (Exception e) {
// no-op
}
} else {
}
}
}
initialProps.putString("pushData", dataValue); // Read this inside your Root component in React native
return initialProps;
}
};
}
My server side code:
const PushNotifications = new require('node-pushnotifications');
const push = new PushNotifications({
gcm: {
id: 'my id'
}
})
await push.send([token], {
title: 'My Title',
body: 'body',
topic: 'com.myapp',
custom: {
myCustomThing: 'myCustomThing
},
clickAction: "OPEN_MAIN_ACTIVITY",
});
Since this wasn’t able to get answered on StackOverflow, I’m guessing this must be some kind of bug with the library.
Interestingly, local notifications do trigger onNotification, even when the app is in the background. So maybe this has something to do with my server code? Or with GCM specifically?
Issue Analytics
- State:
- Created 6 years ago
- Comments:12
Top GitHub Comments
React Native Push Notifications clearly states that we need to call configure outside of the React Native Lifecycle. This is very important.
https://product.farewell.io/visible-react-native-push-notifications-that-work-on-both-ios-and-android-5e90badb4a0f
https://prnt.sc/k61hz7
any update?