diff options
author | Hailey <me@haileyok.com> | 2024-05-29 18:42:12 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-30 02:42:12 +0100 |
commit | eb6f44853d91083c7f6015952f1fe6cbe0395631 (patch) | |
tree | ff7a702dd8009d169cb22f4774978b96dfb1cced /src | |
parent | 165feedb866034452807eb87b39efe3ba780184f (diff) | |
download | voidsky-eb6f44853d91083c7f6015952f1fe6cbe0395631.tar.zst |
adjust notifications experiment by removing `canAskAgain` (#4271)
* adjust notifications experiment by removing `canAskAgain` * move to `StepFinished` for after onboarding
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/notifications/notifications.ts | 73 | ||||
-rw-r--r-- | src/lib/statsig/gates.ts | 2 | ||||
-rw-r--r-- | src/screens/Onboarding/StepFinished.tsx | 13 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 7 |
4 files changed, 47 insertions, 48 deletions
diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts index f0667b0cc..705d90c56 100644 --- a/src/lib/notifications/notifications.ts +++ b/src/lib/notifications/notifications.ts @@ -71,46 +71,41 @@ export function useNotificationsRegistration() { export function useRequestNotificationsPermission() { const gate = useGate() - const {currentAccount} = useSession() - return React.useCallback( - async (context: 'StartOnboarding' | 'AfterOnboarding' | 'Login') => { - const permissions = await Notifications.getPermissionsAsync() - - if ( - !currentAccount || - !isNative || - permissions?.status === 'granted' || - (permissions?.status === 'denied' && !permissions?.canAskAgain) - ) { - return - } - if ( - context === 'StartOnboarding' && - gate('request_notifications_permission_after_onboarding') - ) { - return - } - if ( - context === 'AfterOnboarding' && - !gate('request_notifications_permission_after_onboarding') - ) { - return - } - - const res = await Notifications.requestPermissionsAsync() - logEvent('notifications:request', { - context: context, - status: res.status, - }) - - if (res.granted) { - // This will fire a pushTokenEvent, which will handle registration of the token - getPushToken(true) - } - }, - [gate, currentAccount], - ) + return async (context: 'StartOnboarding' | 'AfterOnboarding' | 'Login') => { + const permissions = await Notifications.getPermissionsAsync() + + if ( + !isNative || + permissions?.status === 'granted' || + permissions?.status === 'denied' + ) { + return + } + if ( + context === 'StartOnboarding' && + gate('request_notifications_permission_after_onboarding_v2') + ) { + return + } + if ( + context === 'AfterOnboarding' && + !gate('request_notifications_permission_after_onboarding_v2') + ) { + return + } + + const res = await Notifications.requestPermissionsAsync() + logEvent('notifications:request', { + context: context, + status: res.status, + }) + + if (res.granted) { + // This will fire a pushTokenEvent, which will handle registration of the token + getPushToken(true) + } + } } export async function decrementBadgeCount(by: number | 'reset' = 1) { diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts index c572c0721..2721871f3 100644 --- a/src/lib/statsig/gates.ts +++ b/src/lib/statsig/gates.ts @@ -1,4 +1,4 @@ export type Gate = // Keep this alphabetic please. - | 'request_notifications_permission_after_onboarding' + | 'request_notifications_permission_after_onboarding_v2' | 'show_follow_back_label_v2' diff --git a/src/screens/Onboarding/StepFinished.tsx b/src/screens/Onboarding/StepFinished.tsx index b8a21680b..c75dd4fa7 100644 --- a/src/screens/Onboarding/StepFinished.tsx +++ b/src/screens/Onboarding/StepFinished.tsx @@ -13,6 +13,7 @@ import {RQKEY as profileRQKey} from '#/state/queries/profile' import {useAgent} from '#/state/session' import {useOnboardingDispatch} from '#/state/shell' import {uploadBlob} from 'lib/api' +import {useRequestNotificationsPermission} from 'lib/notifications/notifications' import { DescriptionText, OnboardingControls, @@ -39,6 +40,7 @@ export function StepFinished() { const [saving, setSaving] = React.useState(false) const queryClient = useQueryClient() const agent = useAgent() + const requestNotificationsPermission = useRequestNotificationsPermission() const finishOnboarding = React.useCallback(async () => { setSaving(true) @@ -72,6 +74,7 @@ export function StepFinished() { : 'default', }) })(), + requestNotificationsPermission('AfterOnboarding'), ]) } catch (e: any) { logger.info(`onboarding: bulk save failed`) @@ -98,7 +101,15 @@ export function StepFinished() { track('OnboardingV2:StepFinished:End') track('OnboardingV2:Complete') logEvent('onboarding:finished:nextPressed', {}) - }, [state, dispatch, onboardDispatch, setSaving, track, agent, queryClient]) + }, [ + state, + queryClient, + agent, + dispatch, + onboardDispatch, + track, + requestNotificationsPermission, + ]) React.useEffect(() => { track('OnboardingV2:StepFinished:Start') diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 1744c6651..829cd94e4 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -20,7 +20,6 @@ import { } from '#/state/shell' import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed' import {useOTAUpdates} from 'lib/hooks/useOTAUpdates' -import {useRequestNotificationsPermission} from 'lib/notifications/notifications' import {HomeTabNavigatorParams, NativeStackScreenProps} from 'lib/routes/types' import {FeedPage} from 'view/com/feeds/FeedPage' import {Pager, PagerRef, RenderTabBarFnProps} from 'view/com/pager/Pager' @@ -59,8 +58,6 @@ function HomeScreenReady({ preferences: UsePreferencesQueryResponse pinnedFeedInfos: SavedFeedSourceInfo[] }) { - const requestNotificationsPermission = useRequestNotificationsPermission() - const allFeeds = React.useMemo( () => pinnedFeedInfos.map(f => f.feedDescriptor), [pinnedFeedInfos], @@ -74,10 +71,6 @@ function HomeScreenReady({ useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName) useOTAUpdates() - React.useEffect(() => { - requestNotificationsPermission('AfterOnboarding') - }, [requestNotificationsPermission]) - const pagerRef = React.useRef<PagerRef>(null) const lastPagerReportedIndexRef = React.useRef(selectedIndex) React.useLayoutEffect(() => { |