stop using `addPushTokenListener` (#4467)

* stop using push token listener

* cleanup the hack

* add a comment

* remove test code

* Fix patch

---------

Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
zio/stable
Hailey 2024-06-10 18:16:21 -07:00 committed by GitHub
parent 4e9a65200e
commit c73ad43a80
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 4 deletions

View File

@ -63,7 +63,7 @@ index f1fed19..80afe9e 100644
+ @Nullable + @Nullable
+ public String getChannelId() { + public String getChannelId() {
+ return mTitle; + return mChannelId;
+ } + }
+ +
@Nullable @Nullable

View File

@ -6,7 +6,7 @@ import {BskyAgent} from '@atproto/api'
import {logger} from '#/logger' import {logger} from '#/logger'
import {SessionAccount, useAgent, useSession} from '#/state/session' import {SessionAccount, useAgent, useSession} from '#/state/session'
import {logEvent, useGate} from 'lib/statsig/statsig' import {logEvent, useGate} from 'lib/statsig/statsig'
import {devicePlatform, isNative} from 'platform/detection' import {devicePlatform, isAndroid, isNative} from 'platform/detection'
import BackgroundNotificationHandler from '../../../modules/expo-background-notification-handler' import BackgroundNotificationHandler from '../../../modules/expo-background-notification-handler'
const SERVICE_DID = (serviceUrl?: string) => const SERVICE_DID = (serviceUrl?: string) =>
@ -43,7 +43,7 @@ async function getPushToken(skipPermissionCheck = false) {
const granted = const granted =
skipPermissionCheck || (await Notifications.getPermissionsAsync()).granted skipPermissionCheck || (await Notifications.getPermissionsAsync()).granted
if (granted) { if (granted) {
Notifications.getDevicePushTokenAsync() return Notifications.getDevicePushTokenAsync()
} }
} }
@ -56,7 +56,22 @@ export function useNotificationsRegistration() {
return return
} }
getPushToken() // HACK - see https://github.com/bluesky-social/social-app/pull/4467
// An apparent regression in expo-notifications causes `addPushTokenListener` to not fire on Android whenever the
// token changes by calling `getPushToken()`. This is a workaround to ensure we register the token once it is
// generated on Android.
if (isAndroid) {
;(async () => {
const token = await getPushToken()
// Token will be undefined if we don't have notifications permission
if (token) {
registerPushToken(agent, currentAccount, token)
}
})()
} else {
getPushToken()
}
// According to the Expo docs, there is a chance that the token will change while the app is open in some rare // According to the Expo docs, there is a chance that the token will change while the app is open in some rare
// cases. This will fire `registerPushToken` whenever that happens. // cases. This will fire `registerPushToken` whenever that happens.