# iOS SDK 7.0+ Erweiterte Integrationsanleitung

import { Badge } from '@astrojs/starlight/components';

Dieser Abschnitt enthält Informationen zur erweiterten Integration des Pushwoosh iOS SDK.

## Hintergrundmodi

<Aside type="caution" title="">
Standardmäßig erlaubt iOS Apps nicht, Push-Benachrichtigungen zu verarbeiten, wenn sie sich im Hintergrund befinden. Dies schließt stille Push-Benachrichtigungen ein, die nützlich sind, um App-Daten ohne Benutzerinteraktion zu aktualisieren.
</Aside>

Um diese Funktionalität zu aktivieren, müssen Sie Ihrem Projekt Hintergrundmodi hinzufügen.


#### Schritte zum Aktivieren der Hintergrundmodi

1. Öffnen Sie Ihr Projekt in **Xcode** und wählen Sie es im **Project Navigator** aus.
2. Wählen Sie Ihr App-Ziel im linken Bereich aus.
3. Navigieren Sie zum Tab **Signing & Capabilities**.
4. Klicken Sie auf die Schaltfläche **+ Capability** in der oberen linken Ecke.
5. Suchen Sie nach **Background Modes** und wählen Sie es aus der Liste aus.
6. Aktivieren Sie im Abschnitt **Background Modes** die Option **Remote notifications**, indem Sie das Kontrollkästchen aktivieren.

Nach Abschluss kann Ihre App Push-Benachrichtigungen, einschließlich stiller, verarbeiten, während sie im Hintergrund läuft.

## Vordergrundmodi

Standardmäßig zeigt das Pushwoosh iOS SDK das Benachrichtigungsbanner an, wenn die App im Vordergrund läuft.

Sie können dieses Verhalten steuern, indem Sie das folgende boolesche Flag in Ihrem Code setzen (d.h. in Ihrem `AppDelegate`):

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    // Auf false setzen, um Vordergrundbenachrichtigungen zu deaktivieren, auf true, um sie zu aktivieren
    Pushwoosh.configure.showPushnotificationAlert = true
    ```

    <LinkCard
        title="Beispiel (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/ViewController.swift#L30"
    />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  // Auf 0 setzen, um Vordergrundbenachrichtigungen zu deaktivieren, auf 1, um sie zu aktivieren
  [[Pushwoosh configure] setShowPushnotificationAlert:0];
  ```

    <LinkCard
        title="Beispiel (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/ViewController.m#L35"
    />

  </TabItem>
</Tabs>

## Log-Level

Das Pushwoosh iOS SDK unterstützt die folgenden Logging-Level:

- `NONE` - Keine Logs vom SDK.
- `ERROR` - Zeigt nur Fehlermeldungen in der Konsole an.
- `WARNING` - Zeigt zusätzlich zu Fehlern auch Warnungen an.
- `INFO` - Enthält informative Nachrichten (Standardeinstellung).
- `DEBUG` - Enthält detaillierte Debug-Informationen.

Standardmäßig ist der Logging-Level auf INFO eingestellt, um sicherzustellen, dass das SDK relevante Informationen liefert, ohne die Entwicklerkonsole zu überladen.

Um den Logging-Level zu ändern, aktualisieren Sie den Schlüssel `Pushwoosh_LOG_LEVEL` in der `Info.plist`-Datei Ihrer App:

```xml
<key>Pushwoosh_LOG_LEVEL</key>
<string>YOUR_LOG_LEVEL</string>
```

Alternativ können Sie den Log-Level mit dem folgenden Code-Snippet ändern:

```swift
Pushwoosh.Debug.setLogLevel(.PW_LL_DEBUG)
```

Ersetzen Sie `YOUR_LOG_LEVEL` durch den gewünschten Level (z. B. `DEBUG` oder `ERROR`).

## Benutzerdefinierter `UNNotificationCenterDelegate`

Wenn Sie Ihren eigenen `UNNotificationCenterDelegate` verwenden möchten (zum Beispiel für lokale Benachrichtigungen), sollten Sie das Pushwoosh SDK darüber informieren, um ein korrektes Verhalten sicherzustellen. Sie können dies mit der Methode `addNotificationCenterDelegate` tun:

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    Pushwoosh.configure.addNotificationCenterDelegate(my_delegate)
    ```

    <LinkCard
        title="Beispiel (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift#L23"
    />

    </TabItem>

    <TabItem label="Objective-C">
    ```objective-c
    [Pushwoosh.configure addNotificationCenterDelegate:my_delegate];
    ```

    <LinkCard
        title="Beispiel (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m#L28"
    />

    </TabItem>
</Tabs>

Implementieren Sie dann die `UNNotificationCenterDelegate`-Methoden in Ihrem Delegate:

<Tabs syncKey="code-example">
  <TabItem label="Swift">

  ```swift
  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      willPresent notification: UNNotification,
      withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(notification.request.content.userInfo)) {
          // Ihre Benachrichtigung verarbeiten
          completionHandler(UNNotificationPresentationOptions.alert)
      }
  }

  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      didReceive response: UNNotificationResponse,
      withCompletionHandler completionHandler: @escaping () -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(response.notification.request.content.userInfo)) {
          // Ihre Benachrichtigung verarbeiten
          completionHandler()
      }
  }
  ```

  <LinkCard title="Beispiel (Swift)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift" />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  - (void)userNotificationCenter:(UNNotificationCenter *)center
          willPresentNotification:(UNNotification *)notification
          withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
      if (![PWMessage isPushwooshMessage:notification.request.content.userInfo]) {
          // Ihre Nachricht verarbeiten
          completionHandler(UNNotificationPresentationOptionAlert);
      }
  }

  - (void)userNotificationCenter:(UNNotificationCenter *)center
          didReceiveNotificationResponse:(UNNotificationResponse *)response
          withCompletionHandler:(void (^)(void))completionHandler {
      if (![PWMessage.isPushwooshMessage:response.notification.request.content.userInfo]) {
          // Ihre Nachricht verarbeiten
          completionHandler();
      }
  }
  ```

  <LinkCard title="Beispiel (Objective-C)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m" />

  </TabItem>
</Tabs>

## Pushwoosh Lazy Initialization

Das Flag ```Pushwoosh_LAZY_INITIALIZATION``` verhindert die automatische Initialisierung des Pushwoosh SDK beim Start der Anwendung. Dies ermöglicht eine bessere Kontrolle darüber, wann die Dienste des Pushwoosh SDK gestartet werden.

Wenn dieses Flag aktiviert ist, startet das Pushwoosh SDK seine Dienste erst, wenn explizit Methoden des Pushwoosh iOS SDK aufgerufen werden.

Fügen Sie den folgenden Eintrag zur Info.plist hinzu:

```xml
<key>Pushwoosh_LAZY_INITIALIZATION</key>
<true/>
```

**Anwendungsfälle**
1. **Kontrollierte SDK-Initialisierung** – Das Flag Pushwoosh_LAZY_INITIALIZATION ermöglicht es, den Start des Pushwoosh SDK zu verzögern, was mehr Kontrolle darüber gibt, wann Push-Dienste aktiviert werden.

2. **Verzögerte Push-Aktivierung** – In einigen Anwendungen sollten Push-Benachrichtigungen nur unter bestimmten Bedingungen initialisiert werden. Die Aktivierung dieses Flags stellt sicher, dass das Pushwoosh SDK nur dann startet, wenn es explizit angefordert wird.

3. **Benutzerspezifische Push-Konfiguration** – Einige Anwendungen erfordern möglicherweise die Anpassung der Push-Benachrichtigungseinstellungen basierend auf Benutzereinstellungen oder Kontoeinstellungen. Mit der Lazy Initialization startet das Pushwoosh SDK erst, nachdem die entsprechende Konfiguration festgelegt wurde.
## Vollständige Liste der Info.plist-Eigenschaften

| Eigenschaft                                   | Beschreibung                                                                                             | Mögliche Werte                                                                                   |
|-----------------------------------------------|----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| `Pushwoosh_APPID`                             | Legt die Pushwoosh-Anwendungs-ID für den Produktions-Build fest.                                         | `XXXXX-XXXXX` <br /> **Typ**: String                                                             |
| `Pushwoosh_APPID_Dev`                         | Legt die Pushwoosh-Anwendungs-ID für den Entwicklungs-Build fest.                                        | `XXXXX-XXXXX` <br /> **Typ**: String                                                             |
| `Pushwoosh_SHOW_ALERT`                        | Zeigt eine Benachrichtigung im Vordergrund an.                                                           | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_ALERT_TYPE`                        | Legt den Stil der Benachrichtigungsanzeige fest.                                                         | `BANNER` *(Standard)* / `ALERT` / `NONE` <br /> **Typ**: String                                   |
| `Pushwoosh_BASEURL`                           | Überschreibt die Basis-URL des Pushwoosh-Servers.                                                        | [`https://cp.pushwoosh.com/json/1.3/`](https://cp.pushwoosh.com/json/1.3/) *(Standard)* <br /> **Typ**: String |
| `Pushwoosh_AUTO_ACCEPT_DEEP_LINK_FOR_SILENT_PUSH` | Wenn `YES`, werden Deep Links, die in stillen Pushes empfangen werden, automatisch verarbeitet.           | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_ALLOW_SERVER_COMMUNICATION`        | Erlaubt dem SDK, Netzwerkanfragen an Pushwoosh-Server zu senden.                                          | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_DATA`      | Erlaubt dem SDK, Gerätedaten (Betriebssystemversion, Locale und Modell) zu sammeln und an den Server zu senden. | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_OS_VERSION` | Erlaubt dem SDK, die Betriebssystemversion des Geräts zu sammeln und an den Server zu senden.              | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_LOCALE`    | Erlaubt dem SDK, die Locale des Geräts zu sammeln und an den Server zu senden.                             | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_MODEL`     | Erlaubt dem SDK, das Gerätemodell zu sammeln und an den Server zu senden.                                  | `YES` *(Standard)* / `NO` <br /> **Typ**: Boolean                                                 |
| `Pushwoosh_LOG_LEVEL`                         | Logging-Level des Pushwoosh SDK. Details finden Sie unter [Log-Level steuern](#log-level).                 | `NONE` / `ERROR` / `WARNING` / `INFO` *(Standard)* / `DEBUG` / `VERBOSE` <br /> **Typ**: String    |
| `Pushwoosh_PURCHASE_TRACKING_ENABLED`         | Erlaubt dem SDK, In-App-Käufe zu verfolgen. Erforderlich für den Customer Journey Builder.                 | `YES` / `NO` *(Standard)* <br /> **Typ**: Boolean                                                 |