chore: fix notification client

This commit is contained in:
2026-03-02 15:36:55 +01:00
parent 81128def9f
commit 9ce621bee5
5 changed files with 23 additions and 14 deletions
@@ -9,7 +9,6 @@ const LIVREUR_API = "https://uber-stup.club/api/v1/livreur";
// Configuration du comportement des notifications en foreground
Notifications.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true,
shouldPlaySound: true,
shouldSetBadge: true,
shouldShowBanner: true,
+1 -2
View File
@@ -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": {
+20 -1
View File
@@ -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();
};
+2 -7
View File
@@ -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);