diff options
author | Hailey <me@haileyok.com> | 2024-06-10 12:14:00 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-10 12:14:00 -0700 |
commit | 5dd195bcb748820eb293348501348d658021c658 (patch) | |
tree | 970ad045354d845dd1cc4958a61e87c86532e082 | |
parent | 90ec22a6749555f48bfd21eec81f877f8eae0524 (diff) | |
download | voidsky-5dd195bcb748820eb293348501348d658021c658.tar.zst |
Check `canAskAgain` for notification permissions (#4460)
-rw-r--r-- | src/lib/notifications/notifications.ts | 10 | ||||
-rw-r--r-- | src/lib/statsig/events.ts | 2 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 6 |
3 files changed, 15 insertions, 3 deletions
diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts index 55a7948ef..58aa4087c 100644 --- a/src/lib/notifications/notifications.ts +++ b/src/lib/notifications/notifications.ts @@ -72,14 +72,17 @@ export function useNotificationsRegistration() { export function useRequestNotificationsPermission() { const gate = useGate() + const {currentAccount} = useSession() - return async (context: 'StartOnboarding' | 'AfterOnboarding' | 'Login') => { + return async ( + context: 'StartOnboarding' | 'AfterOnboarding' | 'Login' | 'Home', + ) => { const permissions = await Notifications.getPermissionsAsync() if ( !isNative || permissions?.status === 'granted' || - permissions?.status === 'denied' + (permissions?.status === 'denied' && !permissions.canAskAgain) ) { return } @@ -95,6 +98,9 @@ export function useRequestNotificationsPermission() { ) { return } + if (context === 'Home' && !currentAccount) { + return + } const res = await Notifications.requestPermissionsAsync() logEvent('notifications:request', { diff --git a/src/lib/statsig/events.ts b/src/lib/statsig/events.ts index 753734edd..9939f60c9 100644 --- a/src/lib/statsig/events.ts +++ b/src/lib/statsig/events.ts @@ -17,7 +17,7 @@ export type LogEvents = { } 'notifications:openApp': {} 'notifications:request': { - context: 'StartOnboarding' | 'AfterOnboarding' | 'Login' + context: 'StartOnboarding' | 'AfterOnboarding' | 'Login' | 'Home' status: 'granted' | 'denied' | 'undetermined' } 'state:background:sampled': { diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 34d3abf26..e49f2fbb2 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -20,6 +20,7 @@ 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' @@ -67,10 +68,15 @@ function HomeScreenReady({ const maybeFoundIndex = allFeeds.indexOf(rawSelectedFeed) const selectedIndex = Math.max(0, maybeFoundIndex) const selectedFeed = allFeeds[selectedIndex] + const requestNotificationsPermission = useRequestNotificationsPermission() useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName) useOTAUpdates() + React.useEffect(() => { + requestNotificationsPermission('Home') + }, [requestNotificationsPermission]) + const pagerRef = React.useRef<PagerRef>(null) const lastPagerReportedIndexRef = React.useRef(selectedIndex) React.useLayoutEffect(() => { |