upd: notifikasi

Deskripsi:
- notifikasi saat allowed device
- ios dan android

No Issues
This commit is contained in:
2026-03-04 16:35:59 +08:00
parent 3cc7f76346
commit 608381673f
3 changed files with 33 additions and 5 deletions

View File

@@ -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);

View File

@@ -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;
};

View File

@@ -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;
}
};