# Configurer InboxKit avec CocoaPods

*Disponible depuis le SDK iOS [7.0.40](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases/tag/7.0.40).*

InboxKit est fourni comme un sous-spec optionnel du pod parapluie `PushwooshXCFramework`. Le SDK principal doit déjà être intégré ; si vous partez de zéro, suivez d'abord le [guide d'intégration de base](/fr/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk-7-0/basic-integration-guide/).

## Ajouter le pod InboxKit

1. Ouvrez votre `Podfile` et ajoutez le sous-spec InboxKit à la cible de votre application :

```ruby
target 'MyApp' do
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshXCFramework/PushwooshInboxKit'
end
```

2. Exécutez `pod install` depuis le répertoire de votre projet :

```bash
pod install
```

3. Ouvrez le fichier `.xcworkspace` généré. InboxKit est maintenant lié au SDK principal.

## Afficher la boîte de réception

Ajoutez le contrôleur de la boîte de réception à n'importe quel flux de navigation. La configuration par défaut est suffisante pour obtenir une boîte de réception fonctionnelle avec les trois types de cellules standard :

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
import PushwooshInboxKit

let inboxVC = PushwooshInboxKitViewController()
navigationController?.pushViewController(inboxVC, animated: true)
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
@import PushwooshInboxKit;

PushwooshInboxKitViewController *inboxVC = [PushwooshInboxKitViewController new];
[self.navigationController pushViewController:inboxVC animated:YES];
```
</TabItem>
</Tabs>

## Personnaliser la boîte de réception

En Swift, configurez le contrôleur via le type de valeur `PushwooshInboxKitAttributes`. En Objective-C, utilisez les setters compatibles `@objc` sur le contrôleur — `PushwooshInboxKitAttributes` est une structure Swift et n'est pas pontée.

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
var attributes = PushwooshInboxKitAttributes()
attributes.pullToRefreshEnabled = true
attributes.swipeToDeleteEnabled = true
attributes.pinningEnabled = true
attributes.style.unreadBadgeColor = .systemBlue
attributes.style.titleFont = .systemFont(ofSize: 17, weight: .semibold)

let inboxVC = PushwooshInboxKitViewController(attributes: attributes)
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
PushwooshInboxKitViewController *inboxVC = [PushwooshInboxKitViewController new];
[inboxVC setBackgroundColor:[UIColor systemBackgroundColor]];
[inboxVC setEmptyMessage:@"You have no messages yet"];
```
</TabItem>
</Tabs>

La structure `Style` expose toutes les couleurs, polices, rayons d'angle et le formateur de date utilisés par les cellules par défaut. Chaque valeur est une couleur sémantique Apple par défaut, donc la boîte de réception réagit automatiquement au mode sombre du système.

<img src="/setting-up-pushwoosh-inboxkit-ios-custom.webp" alt="Flux InboxKit personnalisé avec les couleurs de la marque appliquées au titre et à l'indicateur non lu" width="280" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">Cellule avec légende et un thème personnalisé appliqué via <code>PushwooshInboxKitAttributes.Style</code>.</p>

## Gérer les appuis et les actualisations

Conformez-vous à `PushwooshInboxKitDelegate` pour réagir aux actions de l'utilisateur et aux événements d'actualisation. Chaque méthode a une implémentation par défaut, vous ne surchargez donc que ce dont vous avez besoin :

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
final class InboxCoordinator: NSObject, PushwooshInboxKitDelegate {
    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didSelect message: PWInboxMessageProtocol) -> Bool {
        // Retournez true pour laisser le SDK ouvrir l'URL du message ou le richmedia.
        // Retournez false si vous avez entièrement géré l'appui (par ex. routé vers un écran personnalisé).
        return true
    }

    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didRefreshWith messages: [PWInboxMessageProtocol],
                  error: Error?) {
        // Affichez votre propre état vide / d'erreur ici si nécessaire.
    }
}

inboxVC.delegate = inboxCoordinator
```
</TabItem>
</Tabs>

Le SDK fournit des opérations en masse en tant que méthodes `@objc` sur le contrôleur, vous pouvez donc les lier directement à un `UIBarButtonItem` :

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
let markAll = UIBarButtonItem(
    image: UIImage(systemName: "checkmark.circle"),
    style: .plain,
    target: inboxVC,
    action: #selector(PushwooshInboxKitViewController.markAllAsRead)
)
let clearRead = UIBarButtonItem(
    image: UIImage(systemName: "trash"),
    style: .plain,
    target: inboxVC,
    action: #selector(PushwooshInboxKitViewController.clearReadMessages)
)
inboxVC.navigationItem.rightBarButtonItems = [clearRead, markAll]
```
</TabItem>
</Tabs>

<Aside type="note" title="Persistance">
Marquer comme lu, tout marquer comme lu, supprimer et effacer les lus sont tous persistés dans le stockage local de la boîte de réception Pushwoosh avant l'envoi de la requête réseau. L'état survit à un redémarrage du processus même si le backend n'a pas encore accusé réception du changement.
</Aside>

## Prochaines étapes

<LinkCard
  title="Référence de l'API PushwooshInboxKit"
  description="Documentation DocC générée pour chaque type public."
  href="https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshInboxKit/documentation/pushwooshinboxkit/"
/>