# WebPush Browser-Nutzung
Vollständige Anleitung zur Verwendung des WebPush Moduls im Browser.
## Quick Start
### 1. Demo-Seite aufrufen
Die Demo-Seite befindet sich unter:
```
src/Framework/WebPush/templates/demo.view.php
```
Du musst eine Route für die Demo-Seite erstellen (siehe unten).
### 2. Automatische Integration (main.js)
Das WebPush Modul wird automatisch beim App-Start initialisiert und ist global unter `window.webPushManager` verfügbar.
```javascript
// main.js initialisiert automatisch:
if (WebPushManager.isSupported()) {
window.webPushManager = new WebPushManager({
apiBase: '/api/push',
onSubscriptionChange: (subscription) => {
console.log('🔔 Push subscription changed:',
subscription ? 'Subscribed' : 'Unsubscribed');
}
});
}
```
## Browser Console Nutzung
Du kannst das WebPush Modul direkt über die Browser-Console verwenden:
### Initialisierung prüfen
```javascript
// Prüfen ob WebPush verfügbar ist
console.log(window.webPushManager); // WebPushManager Instanz
// Browser-Support prüfen
if (window.webPushManager) {
console.log('✅ WebPush ist verfügbar');
} else {
console.log('❌ WebPush nicht initialisiert');
}
```
### WebPush initialisieren
```javascript
// WebPush initialisieren (registriert Service Worker und holt VAPID Key)
const isSubscribed = await window.webPushManager.init();
console.log('Subscribed:', isSubscribed);
```
### Push-Benachrichtigungen abonnieren
```javascript
// Berechtigung anfordern und abonnieren
try {
const subscription = await window.webPushManager.subscribe();
console.log('✅ Erfolgreich abonniert!', subscription);
} catch (error) {
console.error('❌ Fehler beim Abonnieren:', error);
}
```
### Subscription-Status prüfen
```javascript
// Aktuellen Subscription-Status abrufen
const subscription = await window.webPushManager.getSubscription();
if (subscription) {
console.log('✅ Abonniert:', subscription.endpoint);
} else {
console.log('❌ Nicht abonniert');
}
// Oder einfach:
const isSubscribed = await window.webPushManager.isSubscribed();
console.log('Subscribed:', isSubscribed);
```
### Test-Benachrichtigung senden
```javascript
// Test-Benachrichtigung mit Standard-Text
await window.webPushManager.sendTestNotification();
// Test-Benachrichtigung mit eigenem Text
await window.webPushManager.sendTestNotification(
'Mein Titel',
'Meine Nachricht hier!'
);
```
### Push-Benachrichtigungen deaktivieren
```javascript
// Abonnement beenden
const success = await window.webPushManager.unsubscribe();
if (success) {
console.log('✅ Erfolgreich deabonniert');
} else {
console.log('❌ Deabonnieren fehlgeschlagen');
}
```
### Berechtigungsstatus prüfen
```javascript
// Notification Permission prüfen
const permission = window.webPushManager.getPermissionStatus();
console.log('Permission:', permission);
// Mögliche Werte: 'granted', 'denied', 'default'
```
## Eigene Integration in Templates
### Einfache Button-Integration
```html
```
### Status-Anzeige mit Auto-Update
```html
Status: Prüfe...
```
## Route für Demo-Seite erstellen
Füge diese Route in deinem Router hinzu (z.B. in `WebRoutes.php`):
```php
use App\Framework\Attributes\Route;
use App\Framework\Http\Method;
final readonly class WebPushDemoController
{
#[Route(path: '/webpush/demo', method: Method::GET)]
public function demo(): ViewResult
{
return new ViewResult(
template: 'framework/webpush/demo',
data: []
);
}
}
```
Dann kannst du die Demo unter `https://localhost/webpush/demo` aufrufen.
## Erweiterte Verwendung
### Mit Callbacks
```javascript
// Eigener WebPushManager mit Callbacks
import { WebPushManager } from '/resources/js/modules/webpush/WebPushManager.js';
const webPush = new WebPushManager({
apiBase: '/api/push',
serviceWorkerUrl: '/js/sw-push.js',
vapidPublicKey: 'YOUR_PUBLIC_KEY', // Optional, wird sonst vom Server geholt
onSubscriptionChange: (subscription) => {
if (subscription) {
console.log('User subscribed!');
// Update UI, save to database, etc.
} else {
console.log('User unsubscribed!');
// Update UI, cleanup, etc.
}
}
});
await webPush.init();
```
### Fehlerbehandlung
```javascript
try {
await window.webPushManager.subscribe();
} catch (error) {
switch (error.message) {
case 'Notification permission denied':
alert('Bitte erlaube Push-Benachrichtigungen in deinem Browser');
break;
case 'Service Workers are not supported':
alert('Dein Browser unterstützt keine Push-Benachrichtigungen');
break;
default:
alert('Fehler: ' + error.message);
}
}
```
## API-Endpunkte
Das WebPush Modul erwartet folgende Backend-Endpunkte:
- `GET /api/push/vapid-key` - VAPID Public Key abrufen
- `POST /api/push/subscribe` - Subscription speichern
- `POST /api/push/unsubscribe` - Subscription entfernen
- `POST /api/push/test` - Test-Benachrichtigung senden
Diese sind bereits im Framework unter `WebPushController.php` implementiert.
## Browser-Kompatibilität
- ✅ Chrome/Edge 42+
- ✅ Firefox 44+
- ✅ Safari 16+ (macOS Ventura+)
- ✅ Opera 39+
- ❌ iOS Safari (keine Unterstützung für Web Push)
Prüfe die Unterstützung mit:
```javascript
if (WebPushManager.isSupported()) {
// Browser unterstützt Web Push
} else {
// Browser unterstützt Web Push nicht
}
```
## Debugging
### Service Worker Status prüfen
```javascript
// In Browser Console:
navigator.serviceWorker.getRegistrations().then(registrations => {
console.log('Service Worker Registrations:', registrations);
});
```
### Subscription Details anzeigen
```javascript
const subscription = await window.webPushManager.getSubscription();
if (subscription) {
console.log('Endpoint:', subscription.endpoint);
console.log('Keys:', subscription.toJSON());
}
```
### Browser-Berechtigungen zurücksetzen
1. Chrome: Einstellungen → Datenschutz und Sicherheit → Website-Einstellungen → Benachrichtigungen
2. Firefox: Einstellungen → Datenschutz & Sicherheit → Berechtigungen → Benachrichtigungen
3. Safari: Einstellungen → Websites → Benachrichtigungen
## Troubleshooting
### "Service Workers are not supported"
- Browser unterstützt keine Service Workers
- HTTPS erforderlich (außer localhost)
### "Notification permission denied"
- User hat Berechtigung verweigert
- Browser-Berechtigungen zurücksetzen (siehe oben)
### "Failed to fetch VAPID public key"
- Backend nicht erreichbar unter `/api/push/vapid-key`
- VAPID Keys nicht generiert (siehe `php console.php webpush:keys`)
### Service Worker registriert sich nicht
- Prüfe ob Datei unter `/js/sw-push.js` existiert
- Prüfe Browser Console für Service Worker Fehler
- Stelle sicher dass HTTPS verwendet wird
## Vollständiges Beispiel
```html
WebPush Test
WebPush Test
Status: Prüfe...
```