# Transport gRPC

Le module `PushwooshGRPC` fournit une couche de transport gRPC optionnelle qui peut améliorer les performances réseau pour la communication avec les serveurs Pushwoosh. Lorsqu'il est disponible, le SDK utilise automatiquement gRPC pour les méthodes d'API prises en charge et se rabat sur REST si gRPC n'est pas disponible.

<Aside type="note">
Disponible à partir de la **version 7.0.18 du SDK**.
</Aside>

## Comment ça marche

Par défaut, le SDK Pushwoosh communique avec les serveurs en utilisant l'API REST via HTTPS. Le module `PushwooshGRPC` ajoute un transport gRPC alternatif qui offre plusieurs avantages :

- **Latence plus faible** — gRPC utilise HTTP/2 avec des connexions persistantes
- **Taille de charge utile plus petite** — Les Protocol Buffers sont plus compacts que le JSON
- **Multiplexage** — Plusieurs requêtes peuvent être envoyées sur une seule connexion

### Repli automatique

Le module inclut une résilience intégrée :

| Scénario | Comportement |
|----------|----------|
| gRPC disponible | Utilise le transport gRPC |
| gRPC indisponible | Se rabat sur REST |
| Erreur réseau | Réessaie avec REST |

<Aside type="tip">
Vous n'avez pas besoin de gérer la sélection du transport dans votre code. Le SDK choisit automatiquement le meilleur transport disponible.
</Aside>

## Prérequis

| Prérequis | Version |
|-------------|---------|
| iOS | 13.0+ |
| Xcode | 14.0+ |
| Swift | 5.0+ |

## Installation

### Swift Package Manager

Ajoutez `PushwooshGRPC` à votre cible lors de l'intégration du SDK Pushwoosh :

1. Dans Xcode, allez dans **File → Add Package Dependencies**
2. Entrez l'URL du package : `https://github.com/Pushwoosh/Pushwoosh-XCFramework`
3. Sélectionnez `PushwooshGRPC` en plus des frameworks requis

<Tabs>
<TabItem label="Frameworks requis">
* `PushwooshFramework`
* `PushwooshCore`
* `PushwooshBridge`
</TabItem>
<TabItem label="Frameworks optionnels">
* `PushwooshGRPC` — transport gRPC
* `PushwooshKeychain` — ID d'appareil persistant
* `PushwooshLiveActivities` — Support des Live Activities
* `PushwooshVoIP` — Notifications push VoIP
* `PushwooshForegroundPush` — Notifications personnalisées en premier plan
</TabItem>
</Tabs>

### CocoaPods

Ajoutez le sous-spec gRPC à votre `Podfile` :

```ruby
target 'MyApp' do
  use_frameworks!

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

Puis exécutez :

```bash
pod install
```

## Utilisation

**Aucune modification de code n'est requise.** Une fois que vous avez ajouté le module `PushwooshGRPC` à votre projet, il fonctionne automatiquement :

1. Au lancement de l'application, le SDK détecte que le transport gRPC est disponible
2. Les appels API sont acheminés via gRPC lorsque c'est possible
3. Si gRPC échoue, le SDK se rabat automatiquement sur REST

## Méthodes prises en charge

Les méthodes d'API suivantes prennent en charge le transport gRPC :

| Méthode | Support gRPC |
|--------|--------------|
| Enregistrement de l'appareil | Oui |
| Tags (définir/obtenir) | Oui |
| Suivi d'ouverture de l'application | Oui |
| Statistiques des notifications push | Oui |

<Aside type="note">
Les méthodes non listées ci-dessus continueront d'utiliser le transport REST. Le SDK gère cela de manière transparente.
</Aside>

## Cas d'utilisation

Le module `PushwooshGRPC` est particulièrement utile pour :

- **Suivi d'événements à haute fréquence** — Surcharge réduite pour les applications qui envoient de nombreux événements
- **Applications en temps réel** — Latence plus faible pour les opérations sensibles au temps
- **Environnements à bande passante limitée** — Des tailles de charge utile plus petites permettent d'économiser des données

## Dépannage

### Vérifier que le module est actif

Vérifiez les journaux de la console Xcode lorsque votre application se lance. Vous devriez voir un message de journal comme :

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

### Forcer le transport REST

Si vous devez désactiver gRPC temporairement pour le débogage, vous pouvez supprimer le module `PushwooshGRPC` de votre cible. Le SDK utilisera automatiquement le transport REST lorsque gRPC n'est pas disponible.

<Aside type="caution">
N'incluez pas à la fois le code de transport gRPC et REST dans votre application — le SDK gère automatiquement la sélection du transport en fonction de la disponibilité du module.
</Aside>