VERSION 69 — NOTIFICATIONS DE L'APPLICATION INSTALLÉE ===================================================== Ce qui change - Le bandeau promo et le bouton « Me prévenir » sont maintenant sur TOUTES les pages de la boutique (avant : le fichier promo-bar.js n'était chargé sur aucune page, les notifications ne marchaient pas). - Site en ligne : le client qui clique « Me prévenir » est enregistré sur le serveur. Il reçoit les notifications MÊME APPLICATION FERMÉE (Android, ordinateur ; iPhone : appli ajoutée à l'écran d'accueil, iOS 16.4+). - Notification automatique au début de chaque promo cochée « Prévenir les clients abonnés » (happy hour : à chaque créneau, une fois par jour ; promo classique / portes ouvertes : une seule fois). - Admin > Marketing > Promotions : nouvel encadré « Notifications de l'application » : nombre d'appareils abonnés + envoi immédiat d'un message à tous (Super Admin). En mode démo, l'envoi s'affiche seulement sur l'appareil de l'admin (aperçu). - Les appareils désabonnés (application supprimée) sont retirés automatiquement. Fichiers ajoutés - backend/app/Support/PushNotifier.php - backend/app/Models/PushSubscription.php - backend/app/Http/Controllers/Api/PushApiController.php - backend/app/Http/Controllers/Admin/AdminPushApiController.php - backend/app/Console/Commands/PromoPushCommand.php (amy:promo-push, chaque minute) - backend/app/Console/Commands/PushKeysCommand.php (amy:push-keys, une seule fois) - backend/database/migrations/2025_01_01_000020_create_push_subscriptions_table.php Fichiers modifiés - backend : routes/api.php, bootstrap/app.php, config/services.php, env.example.txt - frontend : js/promo-bar.js, js/app.js, js/admin.js, js/admin-promos.js, sw.js (cache amy-pwa-v34), admin.html et toutes les pages de la boutique (ajout de js/promo-bar.js) À FAIRE SUR LE SERVEUR (amyevolution.tn), dans le dossier backend 1) composer require minishlink/web-push 2) php artisan amy:push-keys -> copier les 3 lignes VAPID_... affichées dans .env 3) php artisan migrate --force (table push_subscriptions) 4) php artisan optimize:clear 5) php artisan config:cache && php artisan route:cache 6) Vérifier que la tâche cron existe (déjà demandée à l'étape 11) : * * * * * cd /var/www/amyevolution/backend && php artisan schedule:run >> /dev/null 2>&1 Le site doit être en https:// (obligatoire pour les notifications). Ne jamais changer les clés VAPID ensuite (les clients devraient se réabonner). Tester - Sur un téléphone Android : ouvrir le site, « Me prévenir », accepter. - Admin > Promotions : l'encadré doit afficher « Activé · 1 appareil(s) abonné(s) ». - Envoyer un message : il doit arriver sur le téléphone, même application fermée. Sans les étapes 1 et 2 : rien ne casse, le site garde les notifications locales (site ouvert seulement).