# Persistente Geräte-ID (Keychain)

Das `PushwooshKeychain`-Modul bietet eine persistente Geräteidentifikation (HWID), die eine Neuinstallation der App überdauert. Dies ist nützlich für Test- und Entwicklungsszenarien, in denen Sie dieselbe Geräteidentität auch nach einer Neuinstallation der App beibehalten müssen.

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

## Wie es funktioniert

Standardmäßig generiert iOS bei jeder Neuinstallation einer App einen neuen `identifierForVendor` (IDFV), was dazu führt, dass eine neue HWID bei Pushwoosh registriert wird. Das `PushwooshKeychain`-Modul speichert die HWID im iOS Keychain, der über App-Neuinstallationen hinweg bestehen bleibt.

### Umgebungserkennung

Das Modul erkennt automatisch die App-Umgebung und verhält sich unterschiedlich:

| Umgebung | Persistente HWID |
|---|---|
| Simulator | Aktiviert |
| Debug/Entwicklung | Aktiviert |
| TestFlight | Aktiviert |
| App Store | **Deaktiviert** |

<Aside type="caution" title="Wichtig">
Das Modul wird in App-Store-Builds zur Einhaltung des Datenschutzes **automatisch deaktiviert**. Dies stellt sicher, dass Produktionsbenutzer bei einer Neuinstallation Ihrer App immer eine neue HWID erhalten.

Wenn Sie es vorziehen, dieses Modul überhaupt nicht in Ihre Produktions-App aufzunehmen, können Sie `PushwooshKeychain` sicher aus Ihrer Release-Build-Konfiguration entfernen oder eine bedingte Verknüpfung nur für Debug/TestFlight-Builds verwenden.
</Aside>

## Installation

### Swift Package Manager

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

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

<Tabs>
<TabItem label="Erforderliche Frameworks">
* `PushwooshFramework`
* `PushwooshCore`
* `PushwooshBridge`
</TabItem>
<TabItem label="Optionale Frameworks">
* `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 das Keychain-Subspec zu Ihrer `Podfile`-Datei hinzu:

```ruby
target 'MyApp' do
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshXCFramework/PushwooshKeychain'
end
```

Führen Sie dann aus:

```bash
pod install
```

## Verwendung

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

1. Beim ersten Start der App generiert das Modul eine HWID und speichert sie im Keychain
2. Bei nachfolgenden Starts (einschließlich nach einer Neuinstallation) ruft das Modul die gespeicherte HWID ab
3. Das SDK verwendet diese persistente HWID für die Geräteregistrierung bei Pushwoosh

## Anwendungsfälle

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

- **QA-Tests** — Behalten Sie dieselbe Geräteidentität über mehrere App-Installationen während des Testens bei
- **Entwicklung** — Halten Sie ein konsistentes Geräte-Targeting bei, während Sie an Ihrer App iterieren
- **TestFlight-Beta-Tests** — Verfolgen Sie dieselben Beta-Tester über App-Updates und Neuinstallationen hinweg

<Aside type="tip">
Da das Modul in App-Store-Builds deaktiviert ist, müssen Sie es nicht bedingt einbinden — es ist sicher, es mit Ihrer Produktions-App auszuliefern.
</Aside>

## Fehlerbehebung

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

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

```
[Pushwoosh] Detected environment: Debug. Persistent HWID: ENABLED
```

oder

```
[Pushwoosh] Detected environment: App Store. Persistent HWID: DISABLED
```

### Löschen der gespeicherten HWID

Wenn Sie die persistente HWID während der Entwicklung zurücksetzen müssen, können Sie aufrufen:

<Tabs>
<TabItem label="Swift">
```swift
import PushwooshFramework

// Gespeicherte HWID aus dem Keychain löschen
Pushwoosh.Keychain.clearPersistentHWID()
```
</TabItem>
<TabItem label="Objective-C">
```objective-c
@import PushwooshFramework;

// Gespeicherte HWID aus dem Keychain löschen
[Pushwoosh.Keychain clearPersistentHWID];
```
</TabItem>
</Tabs>

<Aside type="note">
Nach dem Löschen wird beim nächsten Start der App eine neue HWID generiert und gespeichert.
</Aside>