diff options
author | Hailey <me@haileyok.com> | 2024-04-12 14:51:53 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-12 14:51:53 -0700 |
commit | f91aa37c6bd900bdc4eec1095c9ecd83da2f13f2 (patch) | |
tree | adf306037f951e0d18500fa928de999794c6a863 /src/lib/hooks/useOTAUpdates.ts | |
parent | 1f587ea4b66a6680d8d1fe06b1705994165973d5 (diff) | |
download | voidsky-f91aa37c6bd900bdc4eec1095c9ecd83da2f13f2.tar.zst |
Enable updates for `production` behind `receive_updates` gate (#3496)
* add gate type * gate the updates * enable updates in `production` * web placeholder for `useOTAUpdates()` * update comment
Diffstat (limited to 'src/lib/hooks/useOTAUpdates.ts')
-rw-r--r-- | src/lib/hooks/useOTAUpdates.ts | 70 |
1 files changed, 36 insertions, 34 deletions
diff --git a/src/lib/hooks/useOTAUpdates.ts b/src/lib/hooks/useOTAUpdates.ts index 51fd18aa0..70905c137 100644 --- a/src/lib/hooks/useOTAUpdates.ts +++ b/src/lib/hooks/useOTAUpdates.ts @@ -12,6 +12,7 @@ import { import {logger} from '#/logger' import {IS_TESTFLIGHT} from 'lib/app-info' +import {useGate} from 'lib/statsig/statsig' import {isIOS} from 'platform/detection' const MINIMUM_MINIMIZE_TIME = 15 * 60e3 @@ -30,6 +31,9 @@ async function setExtraParams() { } export function useOTAUpdates() { + const shouldReceiveUpdates = + useGate('receive_updates') && isEnabled && !__DEV__ + const appState = React.useRef<AppStateStatus>('active') const lastMinimize = React.useRef(0) const ranInitialCheck = React.useRef(false) @@ -51,61 +55,59 @@ export function useOTAUpdates() { logger.debug('No update available.') } } catch (e) { - logger.warn('OTA Update Error', {error: `${e}`}) + logger.error('OTA Update Error', {error: `${e}`}) } }, 10e3) }, []) - const onIsTestFlight = React.useCallback(() => { - setTimeout(async () => { - try { - await setExtraParams() - - const res = await checkForUpdateAsync() - if (res.isAvailable) { - await fetchUpdateAsync() - - Alert.alert( - 'Update Available', - 'A new version of the app is available. Relaunch now?', - [ - { - text: 'No', - style: 'cancel', - }, - { - text: 'Relaunch', - style: 'default', - onPress: async () => { - await reloadAsync() - }, + const onIsTestFlight = React.useCallback(async () => { + try { + await setExtraParams() + + const res = await checkForUpdateAsync() + if (res.isAvailable) { + await fetchUpdateAsync() + + Alert.alert( + 'Update Available', + 'A new version of the app is available. Relaunch now?', + [ + { + text: 'No', + style: 'cancel', + }, + { + text: 'Relaunch', + style: 'default', + onPress: async () => { + await reloadAsync() }, - ], - ) - } - } catch (e: any) { - // No need to handle + }, + ], + ) } - }, 3e3) + } catch (e: any) { + logger.error('Internal OTA Update Error', {error: `${e}`}) + } }, []) React.useEffect(() => { + // We use this setTimeout to allow Statsig to initialize before we check for an update // For Testflight users, we can prompt the user to update immediately whenever there's an available update. This // is suspect however with the Apple App Store guidelines, so we don't want to prompt production users to update // immediately. if (IS_TESTFLIGHT) { onIsTestFlight() return - } else if (!isEnabled || __DEV__ || ranInitialCheck.current) { - // Development client shouldn't check for updates at all, so we skip that here. + } else if (!shouldReceiveUpdates || ranInitialCheck.current) { return } setCheckTimeout() ranInitialCheck.current = true - }, [onIsTestFlight, setCheckTimeout]) + }, [onIsTestFlight, setCheckTimeout, shouldReceiveUpdates]) - // After the app has been minimized for 30 minutes, we want to either A. install an update if one has become available + // After the app has been minimized for 15 minutes, we want to either A. install an update if one has become available // or B check for an update again. React.useEffect(() => { if (!isEnabled) return |