# ID de Dispositivo Persistente (Keychain)

O módulo `PushwooshKeychain` fornece uma identificação de dispositivo (HWID) persistente que sobrevive à reinstalação do aplicativo. Isso é útil para cenários de teste e desenvolvimento onde você precisa manter a mesma identidade de dispositivo mesmo após reinstalar o aplicativo.

<Aside type="note">
Disponível a partir da **versão 7.0.16 do SDK**.
</Aside>

## Como funciona

Por padrão, o iOS gera um novo `identifierForVendor` (IDFV) cada vez que um aplicativo é reinstalado, o que resulta no registro de um novo HWID no Pushwoosh. O módulo `PushwooshKeychain` armazena o HWID no Keychain do iOS, que persiste entre as reinstalações do aplicativo.

### Detecção de ambiente

O módulo detecta automaticamente o ambiente do aplicativo e se comporta de maneira diferente:

| Ambiente | HWID Persistente |
|---|---|
| Simulador | Ativado |
| Depuração/Desenvolvimento | Ativado |
| TestFlight | Ativado |
| App Store | **Desativado** |

<Aside type="caution" title="Importante">
O módulo é **automaticamente desativado** em compilações da App Store para conformidade com a privacidade. Isso garante que os usuários de produção sempre obtenham um novo HWID quando reinstalam seu aplicativo.

Se você preferir não incluir este módulo em seu aplicativo de produção, pode remover com segurança o `PushwooshKeychain` da configuração de compilação de lançamento ou usar vinculação condicional apenas para compilações de Depuração/TestFlight.
</Aside>

## Instalação

### Swift Package Manager

Adicione `PushwooshKeychain` ao seu alvo ao integrar o SDK do Pushwoosh:

1. No Xcode, vá para **File → Add Package Dependencies**
2. Insira a URL do pacote: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`
3. Selecione `PushwooshKeychain` além dos frameworks obrigatórios

<Tabs>
<TabItem label="Frameworks obrigatórios">
* `PushwooshFramework`
* `PushwooshCore`
* `PushwooshBridge`
</TabItem>
<TabItem label="Frameworks opcionais">
* `PushwooshKeychain` — ID de dispositivo persistente
* `PushwooshLiveActivities` — Suporte para Live Activities
* `PushwooshVoIP` — Notificações push VoIP
* `PushwooshForegroundPush` — Notificações personalizadas em primeiro plano
</TabItem>
</Tabs>

### CocoaPods

Adicione o subspec Keychain ao seu `Podfile`:

```ruby
target 'MyApp' do
  use_frameworks!

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

Em seguida, execute:

```bash
pod install
```

## Uso

**Nenhuma alteração de código é necessária.** Depois de adicionar o módulo `PushwooshKeychain` ao seu projeto, ele funciona automaticamente:

1. No primeiro lançamento do aplicativo, o módulo gera um HWID e o armazena no Keychain
2. Em lançamentos subsequentes (incluindo após a reinstalação), o módulo recupera o HWID armazenado
3. O SDK usa este HWID persistente para o registro do dispositivo no Pushwoosh

## Casos de uso

O módulo `PushwooshKeychain` é particularmente útil para:

- **Testes de QA** — Mantenha a mesma identidade de dispositivo em várias instalações do aplicativo durante os testes
- **Desenvolvimento** — Mantenha o direcionamento de dispositivo consistente ao iterar em seu aplicativo
- **Testes beta no TestFlight** — Rastreie os mesmos testadores beta em atualizações e reinstalações do aplicativo

<Aside type="tip">
Como o módulo é desativado em compilações da App Store, você não precisa incluí-lo condicionalmente — é seguro enviá-lo com seu aplicativo de produção.
</Aside>

## Solução de problemas

### Verificando se o módulo está ativo

Verifique os logs do console do Xcode quando seu aplicativo for iniciado. Você deve ver uma mensagem de log como:

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

ou

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

### Limpando o HWID armazenado

Se você precisar redefinir o HWID persistente durante o desenvolvimento, pode chamar:

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

// Clear the stored HWID from Keychain
Pushwoosh.Keychain.clearPersistentHWID()
```
</TabItem>
<TabItem label="Objective-C">
```objective-c
@import PushwooshFramework;

// Clear the stored HWID from Keychain
[Pushwoosh.Keychain clearPersistentHWID];
```
</TabItem>
</Tabs>

<Aside type="note">
Após a limpeza, o próximo lançamento do aplicativo irá gerar e armazenar um novo HWID.
</Aside>