diff --git a/app/(application)/setting/index.tsx b/app/(application)/setting/index.tsx index 5f769aa..0102231 100644 --- a/app/(application)/setting/index.tsx +++ b/app/(application)/setting/index.tsx @@ -46,7 +46,7 @@ export default function ListSetting() { try { const token = await getToken(); if (token) { - await apiUnregisteredToken({ user: entities.id, token }); + await apiUnregisteredToken({ user: entities.id, token, category: "unregister" }); } } catch (error) { console.warn('Error unregistering token:', error); diff --git a/lib/api.ts b/lib/api.ts index 81624f6..78e8e43 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -745,7 +745,7 @@ export const apiRegisteredToken = async (data: { user: string, token: string, ca return response.data; }; -export const apiUnregisteredToken = async (data: { user: string, token: string }) => { +export const apiUnregisteredToken = async (data: { user: string, token: string, category?: string }) => { const response = await api.put(`/mobile/auth-token`, data) return response.data; }; diff --git a/lib/useNotification.ts b/lib/useNotification.ts index f0c6e80..a0cff32 100644 --- a/lib/useNotification.ts +++ b/lib/useNotification.ts @@ -66,11 +66,39 @@ export const openSettings = () => { export const requestPermission = async () => { try { - const { status: newStatus } = await Notifications.requestPermissionsAsync(); - await AsyncStorage.setItem('@notification_permission', newStatus === 'granted' ? "true" : "false"); - return newStatus === 'granted'; + const { status: currentStatus } = await Notifications.getPermissionsAsync(); + + // Jika belum pernah ditentukan (undetermined), baru panggil request + if (currentStatus === 'undetermined') { + const { status: newStatus } = await Notifications.requestPermissionsAsync(); + await AsyncStorage.setItem('@notification_permission', newStatus === 'granted' ? 'true' : 'false'); + return newStatus === 'granted'; + } + + // Jika sudah pernah ditentukan (granted/denied), update storage sesuai OS + // Tapi jika granted, kita cek storage dlu sapa tau user pernah matiin manual di app + const osPermission = await checkPermission(); + const existing = await AsyncStorage.getItem('@notification_permission'); + + if (osPermission === false) { + await AsyncStorage.setItem('@notification_permission', 'false'); + return false; + } + + if (osPermission === true) { + // Jika OS ijinkan, tapi di storage belum ada, set true + if (existing === null) { + await AsyncStorage.setItem('@notification_permission', 'true'); + return true; + } + // Jika OS ijinkan dan di storage ada, ikuti storage (toggle manual user) + return existing === 'true'; + } + + return false; } catch (err) { console.warn('Error requesting notification permissions:', err); + return false; } };