Zum Inhalt

🔔 iOS Push Notification Troubleshooting - ts-easy-sale-core

Status

  • Android: Funktioniert
  • iOS: Funktioniert nicht
  • Backend: FCM sendet erfolgreich (3/3 Tokens)
  • APNs: Liefert nicht aus

Systematische Fehlersuche

✅ Schritt 1: iOS App-Berechtigungen prüfen

Auf dem iPhone: 1. Einstellungen → Suche nach "Easy Sale" oder der App 2. Mitteilungen antippen 3. Prüfen: - ✅ "Mitteilungen erlauben" ist AN - ✅ "Banner" ist aktiviert - ✅ "Töne" ist aktiviert - ✅ "Hinweise" ist aktiviert - ✅ Kein Fokus-Modus aktiv (Kontrollzentrum prüfen)

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 2: Firebase Console - APNs Keys prüfen

URL: https://console.firebase.google.com/project/ts-easy-sale-core/settings/cloudmessaging

Zu prüfen: 1. Apple-App-Konfiguration → App auswählen 2. Bundle ID stimmt überein: - Firebase: de.easysale.shop (oder com.techschuppen.easysale.core) - App: (aus GoogleService-Info.plist) 3. Development APNs Key: - Key ID: 4YGBBB4525 - Team ID: KW66H394ZW - Status: Aktiv 4. Production APNs Key: - Key ID: 4YGBBB4525 - Team ID: KW66H394ZW - Status: Aktiv

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 3: GoogleService-Info.plist Bundle ID prüfen

Datei: /Users/michaelmodlmair/Development/easySale/core/apps/shop_system/ios/Runner/GoogleService-Info.plist

Befehl:

cd /Users/michaelmodlmair/Development/easySale/core/apps/shop_system/ios/Runner
grep -A 1 "BUNDLE_ID" GoogleService-Info.plist

Erwartetes Ergebnis:

<key>BUNDLE_ID</key>
<string>de.easysale.shop</string>

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 4: aps-environment in der App prüfen

Datei: /Users/michaelmodlmair/Development/easySale/core/apps/shop_system/ios/Runner/Runner.entitlements

Aktueller Wert:

<key>aps-environment</key>
<string>production</string>  <!-- Wurde geändert von development -->

Problem: Die bereits installierte App auf dem iPhone wurde mit development gebaut!

Lösung: - Entweder: App neu installieren (mit Xcode oder TestFlight) - Oder: Development APNs Key muss funktionieren

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 5: FCM Token für iOS prüfen

Cloud Function Log-Suche:

firebase functions:log --project ts-easy-sale-core 2>&1 | grep -i "iOS\|iphone\|apns"

In Firestore prüfen:

customerUsers/{userId}/devices/{deviceId}

Zu prüfen: - platform: 'ios' - fcmToken existiert - lastActive ist aktuell

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 6: APNs Payload prüfen

Aktuelle fcm-utils.js Konfiguration:

const apnsPayload = {
  payload: {
    aps: {
      alert: {
        title: notification.title,
        body: notification.body,
      },
      sound: isCritical ? "critical" : "default",
      "interruption-level": isCritical ? "time-sensitive" : "active",
      "content-available": 1,
    },
  },
  headers: isCritical ? { "apns-priority": "10" } : undefined,
};

Status: ✅ Alert hinzugefügt, Function deployed


✅ Schritt 7: APNs Test mit Firebase Console

Direkter Test über Firebase: 1. Firebase Console → Cloud Messaging 2. "Send test message" oder "Neue Benachrichtigung" 3. Ziel: FCM Token des iOS-Geräts 4. Titel + Body eingeben 5. Senden

Erwartung: Wenn Firebase-Test funktioniert → App-Code OK, sonst → APNs-Key Problem

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 8: Cloud Function Logs - APNs Fehler suchen

Befehl:

firebase functions:log --project ts-easy-sale-core 2>&1 | grep -i "error\|failed\|invalid\|unregistered\|mismatched\|baddevicetoken"

Häufige APNs Error Codes: - BadDeviceToken - Token ist ungültig - Unregistered - Token existiert nicht mehr - MismatchSenderId - Bundle ID passt nicht - DeviceTokenNotForTopic - Bundle ID stimmt nicht mit APNs Cert überein

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 9: Apple Developer Certificate Status

URL: https://developer.apple.com/account/resources/certificates/list

Zu prüfen: - Distribution Certificate: Gültig (nicht abgelaufen) - APNs Keys: Aktiv

Status: ⬜ Nicht geprüft | ✅ OK | ❌ Problem


✅ Schritt 10: App neu installieren mit korrektem aps-environment

Da Runner.entitlements jetzt production hat:

Option A: Über TestFlight (empfohlen) - Build hochladen - TestFlight installieren - Automatisch mit Production APNs

Option B: Xcode Debug Build - Xcode öffnen - Scheme auf Debug setzen - Product → Run - Verwendet Development APNs

Status: ⬜ Nicht ausgeführt | ✅ Erledigt


🔧 Quick Fixes

Fix 1: Development APNs testen

Die App auf dem iPhone verwendet vermutlich noch aps-environment: development.

Prüfen:

# APNs Environment der installierten App checken
# (Kann nur auf dem Gerät selbst geprüft werden)

Fix 2: Bundle ID Mismatch

Stelle sicher, dass die Bundle ID überall gleich ist: - Firebase Console - GoogleService-Info.plist - Xcode Project Settings - Apple Developer Portal

Fix 3: App komplett neu installieren

  1. App deinstallieren (lange drücken → "App entfernen")
  2. iPhone neustarten
  3. App via Xcode neu installieren
  4. Benachrichtigungsberechtigungen neu erteilen

📊 Nächste Schritte

  1. [ ] Schritt 1-3 durcharbeiten (Berechtigungen, Firebase Console, Bundle ID)
  2. [ ] Wenn alles OK → Schritt 7 (Firebase Test-Nachricht direkt)
  3. [ ] Wenn Firebase-Test auch nicht geht → APNs Key Problem
  4. [ ] Wenn Firebase-Test geht → App-Code/Token Problem

🎯 Wahrscheinlichste Ursache

Basierend auf den Symptomen (Android OK, iOS nicht):

Top 3: 1. aps-environment Mismatch (App=development, Key=production) 2. Bundle ID Mismatch (App ≠ Firebase ≠ APNs Key) 3. iOS Berechtigungen nicht erteilt oder Fokus-Modus aktiv


📝 Log-Befehle zum Kopieren

# Bundle ID prüfen
grep -A 1 "BUNDLE_ID" /Users/michaelmodlmair/Development/easySale/core/apps/shop_system/ios/Runner/GoogleService-Info.plist

# aps-environment prüfen
grep -A 1 "aps-environment" /Users/michaelmodlmair/Development/easySale/core/apps/shop_system/ios/Runner/Runner.entitlements

# Neueste Push-Logs
firebase functions:log --project ts-easy-sale-core 2>&1 | tail -100 | grep -B 5 -A 15 "Feed-Eintrag"

# APNs Fehler suchen
firebase functions:log --project ts-easy-sale-core 2>&1 | grep -i "error.*apns\|baddevicetoken\|unregistered\|mismatch"