about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-06-10 12:14:00 -0700
committerGitHub <noreply@github.com>2024-06-10 12:14:00 -0700
commit5dd195bcb748820eb293348501348d658021c658 (patch)
tree970ad045354d845dd1cc4958a61e87c86532e082
parent90ec22a6749555f48bfd21eec81f877f8eae0524 (diff)
downloadvoidsky-5dd195bcb748820eb293348501348d658021c658.tar.zst
Check `canAskAgain` for notification permissions (#4460)
-rw-r--r--src/lib/notifications/notifications.ts10
-rw-r--r--src/lib/statsig/events.ts2
-rw-r--r--src/view/screens/Home.tsx6
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(() => {