chore: fix notification client
This commit is contained in:
+1
-2
@@ -28,8 +28,7 @@
|
||||
"permissions": [
|
||||
"android.permission.RECEIVE_BOOT_COMPLETED",
|
||||
"android.permission.VIBRATE",
|
||||
"android.permission.RECEIVE_BOOT_COMPLETED",
|
||||
"android.permission.VIBRATE"
|
||||
"android.permission.POST_NOTIFICATIONS"
|
||||
]
|
||||
},
|
||||
"web": {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, { createContext, useContext, useState, useEffect, type ReactNode } from 'react';
|
||||
import React, { createContext, useContext, useState, useEffect, useRef, type ReactNode } from 'react';
|
||||
import {
|
||||
getToken, setToken as storeToken, removeToken,
|
||||
getAdminToken, setAdminToken as storeAdminToken, removeAdminToken,
|
||||
@@ -8,6 +8,12 @@ import {
|
||||
clearAllAuth,
|
||||
} from './tokenStorage';
|
||||
import { extractUsernameFromToken, extractRoleFromToken, isTokenExpired } from './jwtUtils';
|
||||
import {
|
||||
setupNotificationChannel,
|
||||
registerForPushNotificationsAsync,
|
||||
sendPushTokenToBackend,
|
||||
removePushTokenFromBackend,
|
||||
} from '../services/pushNotifications';
|
||||
|
||||
export type UserRole = 'client' | 'admin' | 'cabine' | 'livreur' | null;
|
||||
|
||||
@@ -30,6 +36,7 @@ interface AuthContextType extends AuthState {
|
||||
const AuthContext = createContext<AuthContextType | undefined>(undefined);
|
||||
|
||||
export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
const pushTokenRef = useRef<string | null>(null);
|
||||
const [state, setState] = useState<AuthState>({
|
||||
token: null,
|
||||
username: null,
|
||||
@@ -114,6 +121,15 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
isAuthenticated: true,
|
||||
mustChangePassword,
|
||||
});
|
||||
// Enregistrer le push token en arrière-plan
|
||||
setupNotificationChannel().then(() =>
|
||||
registerForPushNotificationsAsync()
|
||||
).then((pushToken) => {
|
||||
if (pushToken) {
|
||||
pushTokenRef.current = pushToken;
|
||||
sendPushTokenToBackend(pushToken);
|
||||
}
|
||||
}).catch(() => {/* silencieux */});
|
||||
};
|
||||
|
||||
const setMustChangePassword = (value: boolean) => {
|
||||
@@ -136,6 +152,9 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
};
|
||||
|
||||
const logout = async () => {
|
||||
// Supprimer le push token du backend avant de se déconnecter
|
||||
try { await removePushTokenFromBackend(); } catch { /* silencieux */ }
|
||||
pushTokenRef.current = null;
|
||||
await clearAllAuth();
|
||||
setState({
|
||||
token: null,
|
||||
|
||||
@@ -76,9 +76,6 @@ function ClientTabs() {
|
||||
}, [navigateToOrder, navigation, clearNavigateToOrder]);
|
||||
|
||||
const handleLogout = async () => {
|
||||
if (pushToken) {
|
||||
await removePushTokenFromBackend(pushToken);
|
||||
}
|
||||
await logoutUser();
|
||||
await logout();
|
||||
};
|
||||
|
||||
@@ -9,7 +9,6 @@ const V1 = "https://uber-stup.club/api/v1";
|
||||
// Configuration du comportement des notifications en foreground
|
||||
Notifications.setNotificationHandler({
|
||||
handleNotification: async () => ({
|
||||
shouldShowAlert: true,
|
||||
shouldPlaySound: true,
|
||||
shouldSetBadge: true,
|
||||
shouldShowBanner: true,
|
||||
@@ -98,13 +97,9 @@ export async function sendPushTokenToBackend(
|
||||
}
|
||||
|
||||
// Supprimer le push token du backend (au logout)
|
||||
export async function removePushTokenFromBackend(
|
||||
pushToken: string,
|
||||
): Promise<void> {
|
||||
export async function removePushTokenFromBackend(): Promise<void> {
|
||||
try {
|
||||
await apiClient.delete(`${V1}/push-token`, {
|
||||
data: { push_token: pushToken },
|
||||
});
|
||||
await apiClient.delete(`${V1}/push-token`);
|
||||
console.log("✅ Push token supprimé du backend");
|
||||
} catch (error) {
|
||||
console.error("❌ Erreur suppression push token:", error);
|
||||
|
||||
Reference in New Issue
Block a user