DfPwaPush: kompletny przewodnik
Zamień swój sklep Shopware w instalowalną PWA i wysyłaj powiadomienia Web Push hostowane u siebie (VAPID, bez Firebase i bez zależności Composera) dla Shopware 6.5, 6.6 i 6.7.
DfPwaPush łączy dwie funkcje w jednym pluginie Shopware: zamienia Twój storefront w instalowalną Progressive Web App (manifest, service worker, strona offline, baner instalacji) i pozwala ponownie angażować klientów powiadomieniami Web Push w pełni hostowanymi u Ciebie. Żadnej usługi zewnętrznej (ani Firebase, ani OneSignal), żadnej zależności Composera: szyfrowanie Web Push (RFC 8291) i podpis VAPID (RFC 8292) są zaimplementowane natywnie z użyciem rozszerzeń OpenSSL i cURL wymaganych już przez Shopware. Wszystkie dane subskrypcji pozostają na Twoim serwerze. Ten przewodnik obejmuje instalację, konfigurację PWA i Push, generowanie kluczy VAPID, tworzenie i wysyłkę kampanii, wykonywanie w tle oraz rozwiązywanie problemów.
Instalacja
- Pobierz archiwum
DfPwaPush-1.0.2.zipze swojego konta DataFirefly. - Zainstaluj je przez Administracja → Rozszerzenia → Moje rozszerzenia → Prześlij rozszerzenie albo skopiuj rozpakowany katalog
DfPwaPushdocustom/plugins/. - Uruchom instalację i aktywację:
bin/console plugin:refresh bin/console plugin:install --activate DfPwaPush bin/console cache:clear - Przy instalacji plugin tworzy swoje dwie tabele (
df_push_subscriptionidf_push_campaign) i rejestruje swój ScheduledTask wysyłki.
Zgodny z Shopware 6.5.x, 6.6.x i 6.7.x na jednym codebase. Moduł administracji jest dostarczany prekompilowany, a JavaScript storefrontu jest wstrzykiwany przez Twig: żaden build nie jest potrzebny, ani build-administration.sh, ani build storefrontu. Wymagane rozszerzenia PHP: openssl i curl, oba wymagane już przez Shopware. Żadnych dodatkowych zależności Composera.
Wymóg HTTPS
Service workery i API Web Push istnieją wyłącznie na bezpiecznym origin. Twój sklep musi być serwowany po HTTPS (wyjątkiem w developmencie jest tylko localhost). W sklepie na HTTP plugin pozostaje cichy po stronie frontu i loguje to w konsoli przeglądarki.
Gdzie znaleźć plugin w administracji
Po aktywacji w menu Marketing administracji pojawia się pozycja Kampanie push. To tam tworzysz, planujesz i śledzisz swoje kampanie. Cała konfiguracja PWA i Push odbywa się w konfiguracji pluginu, per kanał sprzedaży, przez Rozszerzenia → Moje rozszerzenia → DfPwaPush → ⋯ → Konfiguruj.
Jeśli pozycja menu nie pojawia się po aktualizacji, wykonaj bin/console assets:install && bin/console cache:clear, a następnie przeładuj administrację z wymuszonym odświeżeniem (Ctrl+Shift+R).
Generowanie kluczy VAPID
Web Push opiera się na parze kluczy VAPID (norma RFC 8292), która uwierzytelnia Twój serwer wobec usług push przeglądarek. Wygenerujesz je jedną komendą:
bin/console df:pwa-push:vapid:generate
Klucze są zapisywane bezpośrednio w konfiguracji pluginu. Użyj opcji --force, aby je wygenerować ponownie. Możesz też wkleić istniejące klucze VAPID w pola konfiguracji.
Ponowne wygenerowanie kluczy VAPID unieważnia wszystkie istniejące subskrypcje: już zapisane przeglądarki nie będą mogły odbierać powiadomień i będą musiały zapisać się ponownie. Rób to wyłącznie świadomie.
Konfiguracja PWA
Karta PWA w konfiguracji (ustawiana per kanał sprzedaży) steruje instalowalnością Twojego sklepu:
- Włącz PWA: serwuje manifest i service worker.
- Nazwa i skrócona nazwa aplikacji: wyświetlane na ekranie głównym po instalacji.
- Kolor motywu / kolor tła: domyślnie
#0f172adla motywu. - Tryb wyświetlania:
standalone,minimal-ui,fullscreenalbobrowser. - Ikony 192 px i 512 px: pliki PNG do wgrania, niezbędne dla instalowalności.
- Baner instalacji: włącza monit “Dodaj do ekranu głównego”.
Bez uzupełnionych obu ikon 192 px i 512 px Chrome nie uznaje witryny za instalowalną i baner instalacji nigdy się nie wyświetli. To przyczyna numer jeden zgłoszeń, że PWA “nic nie robi” po stronie frontu.
Konfiguracja Push
Karta Push steruje powiadomieniami:
- Włącz Web Push: aktywuje baner opt-in i endpointy subskrypcji. Domyślnie włączone.
- Klucz publiczny / klucz prywatny VAPID: generowane powyższą komendą.
- Temat VAPID: adres
mailto:albo adres URL Twojej witryny. - Opóźnienie opt-in: liczba sekund przed pojawieniem się banera zgody (domyślnie 8).
Service worker i endpointy storefrontu
Wszystkie zasoby PWA są serwowane dynamicznie przez kontroler, co uodparnia je na przejście z webpacka na Vite w 6.7:
GET /df-pwa/manifest.json: manifest PWA, generowany per kanał sprzedaży.GET /df-pwa/sw.js: service worker (nagłówekService-Worker-Allowed: /do kontrolowania całego origin).GET /df-pwa/icon/{192|512}: ikony PWA.GET /df-pwa/offline: zapasowa strona offline, cache’owana przez service worker.POST /df-pwa/subscribeiPOST /df-pwa/unsubscribe: rejestracja i usunięcie subskrypcji (XHR).
Service worker cache’uje stronę offline przy instalacji, serwuje zastępczą treść dla nieudanych nawigacji i wyświetla otrzymane powiadomienia przez zdarzenie push, z przekierowaniem po kliknięciu na adres URL kampanii.
Tworzenie i wysyłka kampanii
- Przejdź do Marketing → Kampanie push → Utwórz kampanię.
- Uzupełnij tytuł, treść i ewentualnie docelowy adres URL oraz ikonę.
- W razie potrzeby ogranicz kampanię do kanału sprzedaży (inaczej celem są wszyscy subskrybenci).
- Albo ustaw datę zaplanowania i zapisz, albo kliknij Wyślij teraz.
“Wyślij teraz” umieszcza kampanię w kolejce natychmiastowej (status scheduled z datą wysyłki na bieżącą chwilę); zadanie cykliczne przejmuje ją w ciągu kolejnych minut. Kampania przechodzi przez statusy draft → scheduled → sending → sent (albo failed), a karta pokazuje liczniki udanych wysyłek i błędów.
Wysyłka w tle: ScheduledTask i CLI
Wysyłkę kampanii zapewnia ScheduledTask df_pwa_push.send_campaigns, wykonywany co 300 sekund. Pobiera zaplanowane kampanie, których termin nadszedł, i wysyła je partiami. Wysyłkę możesz też uruchomić ręcznie:
bin/console df:pwa-push:send
Jak każdy ScheduledTask Shopware, wysyłka zależy od aktywnego workera. Upewnij się, że działa consumer Messengera (bin/console messenger:consume) albo że scheduler Shopware jest regularnie wyzwalany, inaczej zaplanowane kampanie nie wyjdą.
Natywny Web Push, bez zależności
DfPwaPush implementuje pełny stos Web Push w czystym PHP, bez zewnętrznej biblioteki:
- VAPID / ES256 (RFC 8292): generowanie kluczy P-256 przez OpenSSL i podpis JWT ES256 do uwierzytelnienia serwera.
- Szyfrowanie aes128gcm (RFC 8291): efemeryczne ECDH, wyprowadzanie HKDF i szyfrowanie AES-128-GCM wiadomości dla każdego subskrybenta.
- Wysyłka równoległa przez
curl_multipartiami, z obsługą kodów zwrotnych usług push.
Implementacja jest zweryfikowana bajt po bajcie względem oficjalnego wektora testowego RFC 8291, co gwarantuje interoperacyjność z Chrome, Firefoksem, Edge i Safari.
Automatyczne czyszczenie subskrypcji
Gdy usługa push odpowiada, że subskrypcja już nie istnieje (kody HTTP 404 lub 410), odpowiadająca jej subskrypcja jest automatycznie dezaktywowana. Subskrypcje, które zawodzą wielokrotnie (5 kolejnych błędów), również są dezaktywowane. Twoja baza subskrybentów pozostaje w ten sposób czysta bez żadnej interwencji.
Zgodność z iOS i Safari
Na iOS Web Push wymaga iOS 16.4 lub nowszego oraz zainstalowania PWA na ekranie głównym: Safari nie dostarcza powiadomień push do zwykłej karty. Plugin obsługuje ten przypadek czysto: baner opt-in pojawia się dopiero wtedy, gdy API Push jest rzeczywiście dostępne, więc Twoim odwiedzającym na iOS nie są składane fałszywe obietnice.
FAQ i rozwiązywanie problemów
Instalacja z ZIP kończy się błędem “brakuje pakietu minishlink/web-push”. Ten błąd dotyczył wcześniejszych wersji. Od 1.0.1 Web Push jest natywny i plugin nie ma już żadnej zależności Composera: bieżąca wersja instaluje się na dowolnym hostingu, także współdzielonym.
W panelu nie ma nic do tworzenia kampanii. Moduł administracji jest prekompilowany od 1.0.1. Po aktualizacji uruchom bin/console assets:install && bin/console cache:clear i przeładuj administrację z wymuszonym pominięciem cache (Ctrl+Shift+R). Pozycja znajduje się w Marketing → Kampanie push.
Adres /df-pwa/manifest.json zwraca błąd 500. Naprawione w 1.0.2: metoda setTwig() kontrolera nadrzędnego została usunięta w Shopware 6.7, co powodowało błąd wszystkich tras /df-pwa/*. Zaktualizuj do 1.0.2 lub nowszej.
W storefroncie nic się nie dzieje. Otwórz konsolę przeglądarki: plugin loguje każdą decyzję z prefiksem [DfPwaPush] (service worker zarejestrowany lub nie, brakujący klucz VAPID, odmowa uprawnień, iOS bez zainstalowanej PWA…). Sprawdź też, czy sklep działa po HTTPS.
Baner instalacji PWA się nie wyświetla. Chrome emituje zdarzenie beforeinstallprompt tylko wtedy, gdy witryna jest instalowalna, co wymaga uzupełnionych w konfiguracji ikon 192 px i 512 px oraz aktywnego service workera. Bez ikon nie ma banera.
Baner powiadomień się nie wyświetla. Sprawdź, czy klucze VAPID są wygenerowane, czy Web Push jest włączony i czy użytkownik już wcześniej nie odmówił powiadomień. Konsola pokaże dokładny powód.
Co dzieje się przy odinstalowaniu? Z opcją usunięcia danych tabele df_push_subscription i df_push_campaign są usuwane. Bez tej opcji są zachowywane, aby ocalić Twoich subskrybentów i historię kampanii.