# InboxKit mit CocoaPods einrichten

*Verfügbar seit iOS SDK [7.0.40](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases/tag/7.0.40).*

InboxKit wird als optionaler Subspec des übergeordneten `PushwooshXCFramework`-Pods ausgeliefert. Das Haupt-SDK muss bereits integriert sein. Wenn Sie bei Null anfangen, folgen Sie zuerst der [Anleitung zur Basisin-Integration](/de/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk-7-0/basic-integration-guide/).

## Den InboxKit-Pod hinzufügen

1. Öffnen Sie Ihre `Podfile`-Datei und fügen Sie den InboxKit-Subspec zu Ihrem App-Ziel hinzu:

```ruby
target 'MyApp' do
  use_frameworks!

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

2. Führen Sie `pod install` in Ihrem Projektverzeichnis aus:

```bash
pod install
```

3. Öffnen Sie die generierte `.xcworkspace`-Datei. InboxKit ist nun neben dem Haupt-SDK verknüpft.

## Die Inbox anzeigen

Fügen Sie den Inbox-Controller zu einem beliebigen Navigationsfluss hinzu. Die Standardkonfiguration reicht aus, um eine funktionierende Inbox mit den drei Standard-Zelltypen zu erhalten:

<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>

## Die Inbox anpassen

In Swift konfigurieren Sie den Controller über den Werttyp `PushwooshInboxKitAttributes`. In Objective-C verwenden Sie die `@objc`-freundlichen Setter auf dem Controller – `PushwooshInboxKitAttributes` ist eine Swift-Struktur und wird nicht überbrückt.

<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>

Die `Style`-Struktur legt alle Farben, Schriftarten, Eckradien und den Datumsformatierer offen, die von den Standardzellen verwendet werden. Jeder Wert ist standardmäßig eine semantische Farbe von Apple, sodass die Inbox automatisch auf den systemweiten Dunkelmodus reagiert.

<img src="/setting-up-pushwoosh-inboxkit-ios-custom.webp" alt="Benutzerdefinierter InboxKit-Feed mit Markenfarben für Titel und Ungelesen-Anzeige" width="280" style="display: block; margin: 0 auto;"/>

<p style="text-align: center; opacity: 0.7; font-size: 0.875rem; margin-top: 0.5rem;">Zelle mit Beschriftung und einem benutzerdefinierten Thema, das über <code>PushwooshInboxKitAttributes.Style</code> angewendet wurde.</p>

## Taps und Aktualisierungen handhaben

Konformieren Sie mit `PushwooshInboxKitDelegate`, um auf Benutzeraktionen und Aktualisierungsereignisse zu reagieren. Jede Methode hat eine Standardimplementierung, sodass Sie nur das überschreiben, was Sie benötigen:

<Tabs syncKey="code-example">
<TabItem label="Swift">
```swift
final class InboxCoordinator: NSObject, PushwooshInboxKitDelegate {
    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didSelect message: PWInboxMessageProtocol) -> Bool {
        // Geben Sie true zurück, damit das SDK die Nachrichten-URL oder Rich Media öffnet.
        // Geben Sie false zurück, wenn Sie den Tap vollständig selbst behandelt haben (z. B. auf einen benutzerdefinierten Bildschirm weitergeleitet haben).
        return true
    }

    func inboxKit(_ vc: PushwooshInboxKitViewController,
                  didRefreshWith messages: [PWInboxMessageProtocol],
                  error: Error?) {
        // Zeigen Sie hier bei Bedarf Ihren eigenen Leer- oder Fehlerzustand an.
    }
}

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

Das SDK liefert Massenoperationen als `@objc`-Methoden auf dem Controller, sodass Sie sie direkt mit einem `UIBarButtonItem` verbinden können:

<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="Persistenz">
„Als gelesen markieren“, „Alle als gelesen markieren“, „Löschen“ und „Gelesene löschen“ werden alle im lokalen Pushwoosh-Inbox-Speicher gespeichert, bevor die Netzwerkanfrage gesendet wird. Der Zustand überlebt einen Neustart des Prozesses, auch wenn das Backend die Änderung noch nicht bestätigt hat.
</Aside>

## Nächste Schritte

<LinkCard
  title="PushwooshInboxKit API-Referenz"
  description="Generierte DocC-Dokumentation für jeden öffentlichen Typ."
  href="https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshInboxKit/documentation/pushwooshinboxkit/"
/>