MM-31873 fix race condition that prevented the device id to be registered on Android (#5104)
This commit is contained in:
parent
7a1ede72e7
commit
0d590c742f
1 changed files with 11 additions and 1 deletions
|
|
@ -202,7 +202,6 @@ class PushNotifications {
|
|||
|
||||
onRemoteNotificationsRegistered = (event: Registered) => {
|
||||
if (!this.configured) {
|
||||
this.configured = true;
|
||||
const {deviceToken} = event;
|
||||
let prefix;
|
||||
|
||||
|
|
@ -217,11 +216,22 @@ class PushNotifications {
|
|||
|
||||
EphemeralStore.deviceToken = `${prefix}:${deviceToken}`;
|
||||
if (Store.redux) {
|
||||
this.configured = true;
|
||||
const dispatch = Store.redux.dispatch as DispatchFunc;
|
||||
waitForHydration(Store.redux, () => {
|
||||
this.requestNotificationReplyPermissions();
|
||||
dispatch(setDeviceToken(EphemeralStore.deviceToken));
|
||||
});
|
||||
} else {
|
||||
// The redux store is not ready, so we retry it to set the
|
||||
// token to prevent sessions being registered without a device id
|
||||
// This code may be executed on fast devices cause the token registration
|
||||
// is faster than the redux store configuration.
|
||||
// Note: Should not be needed once WDB is implemented
|
||||
const remoteTimeout = setTimeout(() => {
|
||||
clearTimeout(remoteTimeout);
|
||||
this.onRemoteNotificationsRegistered(event);
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue