# gRPC-Transport

Das `PushwooshGRPC`-Modul stellt eine optionale gRPC-Transportschicht bereit, die die Netzwerkleistung für die Kommunikation mit den Pushwoosh-Servern verbessern kann. Wenn verfügbar, verwendet das SDK automatisch gRPC für unterstützte API-Methoden und greift auf REST zurück, wenn gRPC nicht verfügbar ist.

<Aside type="note">
Verfügbar ab **SDK-Version 7.0.18**.
</Aside>

## Wie es funktioniert

Standardmäßig kommuniziert das Pushwoosh SDK über die REST-API via HTTPS mit den Servern. Das `PushwooshGRPC`-Modul fügt einen alternativen gRPC-Transport hinzu, der mehrere Vorteile bietet:

- **Geringere Latenz** — gRPC verwendet HTTP/2 mit persistenten Verbindungen
- **Kleinere Payload-Größe** — Protocol Buffers sind kompakter als JSON
- **Multiplexing** — Mehrere Anfragen können über eine einzige Verbindung gesendet werden

### Automatischer Fallback

Das Modul enthält eine integrierte Ausfallsicherheit:

| Szenario | Verhalten |
|----------|----------|
| gRPC verfügbar | Verwendet gRPC-Transport |
| gRPC nicht verfügbar | Greift auf REST zurück |
| Netzwerkfehler | Wiederholt mit REST |

<Aside type="tip">
Sie müssen die Transportauswahl nicht in Ihrem Code handhaben. Das SDK wählt automatisch den besten verfügbaren Transport aus.
</Aside>

## Anforderungen

| Anforderung | Version |
|-------------|---------|
| iOS | 13.0+ |
| Xcode | 14.0+ |
| Swift | 5.0+ |

## Installation

### Swift Package Manager

Fügen Sie `PushwooshGRPC` zu Ihrem Target hinzu, wenn Sie das Pushwoosh SDK integrieren:

1. Gehen Sie in Xcode zu **File → Add Package Dependencies**
2. Geben Sie die Paket-URL ein: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`
3. Wählen Sie `PushwooshGRPC` zusätzlich zu den erforderlichen Frameworks aus

<Tabs>
<TabItem label="Erforderliche Frameworks">
* `PushwooshFramework`
* `PushwooshCore`
* `PushwooshBridge`
</TabItem>
<TabItem label="Optionale Frameworks">
* `PushwooshGRPC` — gRPC-Transport
* `PushwooshKeychain` — Persistente Geräte-ID
* `PushwooshLiveActivities` — Unterstützung für Live Activities
* `PushwooshVoIP` — VoIP-Push-Benachrichtigungen
* `PushwooshForegroundPush` — Benutzerdefinierte Vordergrund-Benachrichtigungen
</TabItem>
</Tabs>

### CocoaPods

Fügen Sie die gRPC-Subspec zu Ihrer `Podfile` hinzu:

```ruby
target 'MyApp' do
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshXCFramework/PushwooshGRPC'
end
```

Führen Sie dann aus:

```bash
pod install
```

## Verwendung

**Keine Code-Änderungen erforderlich.** Sobald Sie das `PushwooshGRPC`-Modul zu Ihrem Projekt hinzufügen, funktioniert es automatisch:

1. Beim Start der App erkennt das SDK, dass der gRPC-Transport verfügbar ist
2. API-Aufrufe werden nach Möglichkeit über gRPC geleitet
3. Wenn gRPC fehlschlägt, greift das SDK automatisch auf REST zurück

## Unterstützte Methoden

Die folgenden API-Methoden unterstützen den gRPC-Transport:

| Methode | gRPC-Unterstützung |
|--------|--------------|
| Geräteregistrierung | Ja |
| Tags (setzen/abrufen) | Ja |
| App-Öffnungs-Tracking | Ja |
| Push-Statistiken | Ja |

<Aside type="note">
Methoden, die oben nicht aufgeführt sind, verwenden weiterhin den REST-Transport. Das SDK handhabt dies transparent.
</Aside>

## Anwendungsfälle

Das `PushwooshGRPC`-Modul ist besonders nützlich für:

- **Hochfrequentes Event-Tracking** — Reduzierter Overhead für Apps, die viele Events senden
- **Echtzeitanwendungen** — Geringere Latenz für zeitkritische Operationen
- **Umgebungen mit begrenzter Bandbreite** — Kleinere Payload-Größen sparen Daten

## Fehlerbehebung

### Überprüfen, ob das Modul aktiv ist

Überprüfen Sie die Xcode-Konsolenprotokolle, wenn Ihre App startet. Sie sollten eine Protokollnachricht wie diese sehen:

```
[Pushwoosh] gRPC transport: ENABLED
```

### Erzwingen des REST-Transports

Wenn Sie gRPC vorübergehend für das Debugging deaktivieren müssen, können Sie das `PushwooshGRPC`-Modul aus Ihrem Target entfernen. Das SDK verwendet automatisch den REST-Transport, wenn gRPC nicht verfügbar ist.

<Aside type="caution">
Fügen Sie nicht sowohl gRPC- als auch REST-Transportcode in Ihre App ein — das SDK handhabt die Transportauswahl automatisch basierend auf der Modulverfügbarkeit.
</Aside>