# Gerenciando o consentimento do usuário

A Pushwoosh apoia a conformidade com regulamentações de privacidade (por exemplo, GDPR, CCPA), permitindo que os desenvolvedores controlem quando o SDK inicia a comunicação com os servidores da Pushwoosh. Isso ajuda a garantir que nenhum dado seja coletado antes que o usuário dê seu consentimento explícito.

### Visão Geral

Por padrão, o SDK da Pushwoosh inicia a comunicação e a coleta de dados do dispositivo imediatamente após a inicialização. No entanto, você pode alterar esse comportamento para que nenhuma comunicação ocorra até que o usuário dê seu consentimento.

Com esta configuração:

*   Se o usuário der o consentimento, o SDK é inicializado e começa a coletar dados.

*   Se o usuário não der o consentimento, o SDK permanece inativo e não coleta nenhum dado.

*   Se o usuário retirar o consentimento posteriormente, o SDK interrompe todas as atividades e se desconecta dos servidores.

A Pushwoosh fornece mecanismos para gerenciar esse fluxo no iOS, Android e Unity.

### iOS

#### Desativar a comunicação do SDK com o servidor na inicialização

Por padrão, a comunicação com o SDK está ativada. Para desativar toda a comunicação com os servidores da Pushwoosh até que o consentimento seja explicitamente concedido pelo usuário, adicione a seguinte chave ao seu **`Info.plist`**:

```xml
<key>Pushwoosh_ALLOW_SERVER_COMMUNICATION</key>
<false/>

```

#### Verificar o status da comunicação

Use os seguintes métodos para determinar se a comunicação está atualmente permitida:

<Tabs>
<TabItem label="SwiftUI">

```swift
import SwiftUI
import PushwooshFramework

var serverCommunicationAllowed = PWCoreServerCommunicationManager.sharedInstance.isServerCommunicationAllowed
print("isServerCommunicationAllowed: ", serverCommunicationAllowed)
```
</TabItem>
<TabItem label="Swift">

```swift
import PushwooshFramework

var serverCommunicationAllowed = PWCoreServerCommunicationManager.sharedInstance.isServerCommunicationAllowed
print("isServerCommunicationAllowed: ", serverCommunicationAllowed)
```
</TabItem>
<TabItem label="Objective-C">

```objective-c
#import <PushwooshFramework/PushwooshFramework.h>

BOOL serverCommunicationAllowed = [PWCoreServerCommunicationManager sharedInstance].isServerCommunicationAllowed;
NSLog(@"isServerCommunicationAllowed: %d", serverCommunicationAllowed);
```
</TabItem>
</Tabs>

#### Ativar a comunicação do SDK após o consentimento

Depois que o usuário conceder o consentimento, ative a comunicação da seguinte forma:

<Tabs>
<TabItem label="SwiftUI">

```swift
import SwiftUI
import PushwooshFramework

Pushwoosh.sharedInstance().startServerCommunication()
```
</TabItem>
<TabItem label="Swift">

```swift
import PushwooshFramework

Pushwoosh.sharedInstance().startServerCommunication()
```
</TabItem>
<TabItem label="Objective-C">

```objective-c
#import <PushwooshFramework/PushwooshFramework.h>

[[Pushwoosh sharedInstance] startServerCommunication];
```
</TabItem>
</Tabs>

#### Registrar-se para notificações push

Depois que a comunicação estiver ativada, registre-se explicitamente para notificações push:

<Tabs>
<TabItem label="SwiftUI">

```swift
import SwiftUI
import PushwooshFramework

Pushwoosh.sharedInstance().registerForPushNotifications()
```
</TabItem>
<TabItem label="Swift">

```swift
import PushwooshFramework

Pushwoosh.sharedInstance().registerForPushNotifications()
```
</TabItem>
<TabItem label="Objective-C">

```objective-c
#import <PushwooshFramework/PushwooshFramework.h>

[[Pushwoosh sharedInstance] registerForPushNotifications];
```
</TabItem>
</Tabs>

#### Desativar a comunicação

Para interromper a comunicação com os servidores da Pushwoosh (por exemplo, se o usuário revogar o consentimento):

<Tabs>
<TabItem label="SwiftUI">

```swift
import SwiftUI
import PushwooshFramework

Pushwoosh.sharedInstance().stopServerCommunication()
```
</TabItem>
<TabItem label="Swift">

```swift
import PushwooshFramework

Pushwoosh.sharedInstance().stopServerCommunication()
```
</TabItem>
<TabItem label="Objective-C">

```objective-c
#import <PushwooshFramework/PushwooshFramework.h>

[[Pushwoosh sharedInstance] stopServerCommunication];
```
</TabItem>
</Tabs>

### Android

#### Desativar a comunicação do SDK com o servidor na inicialização

Por padrão, a comunicação está ativada. Para evitar que quaisquer dados sejam enviados para os servidores da Pushwoosh até que o consentimento do usuário seja obtido, adicione o seguinte ao seu `AndroidManifest.xml`:

```xml
<meta-data
  android:name="com.pushwoosh.allow_server_communication"
  android:value="false" />
```

#### Verificar o status da comunicação

Use os seguintes métodos para determinar se a comunicação com o servidor está atualmente permitida:

<Tabs>
<TabItem label="Java">

```java
import com.pushwoosh.Pushwoosh;

boolean isCommunicationEnabled = Pushwoosh.getInstance().isServerCommunicationAllowed();
Log.d("Pushwoosh", "Communication enabled = " + isCommunicationEnabled);
```
</TabItem>
<TabItem label="Kotlin">

```kotlin
import com.pushwoosh.Pushwoosh

val isCommunicationEnabled = Pushwoosh.getInstance().isServerCommunicationAllowed()
Log.d("Pushwoosh", "Communication enabled = $isCommunicationEnabled")
```
</TabItem>
</Tabs>

#### Ativar a comunicação do SDK após o consentimento

Depois que o usuário conceder o consentimento, ative a comunicação da seguinte forma:

<Tabs>
<TabItem label="Java">

```java
import com.pushwoosh.Pushwoosh;

Pushwoosh.getInstance().startServerCommunication();
```
</TabItem>
<TabItem label="Kotlin">

```kotlin
import com.pushwoosh.Pushwoosh

Pushwoosh.getInstance().startServerCommunication()
```
</TabItem>
</Tabs>

#### Registrar-se para notificações push

Depois que a comunicação estiver ativada, registre-se explicitamente para notificações push:

<Tabs>
<TabItem label="Java">

```java
import com.pushwoosh.Pushwoosh;

Pushwoosh.getInstance().registerForPushNotifications();
```
</TabItem>
<TabItem label="Kotlin">

```kotlin
import com.pushwoosh.Pushwoosh

Pushwoosh.getInstance().registerForPushNotifications()
```
</TabItem>
</Tabs>

#### Desativar a comunicação

Para interromper a comunicação com os servidores da Pushwoosh (por exemplo, se o usuário revogar o consentimento):

<Tabs>
<TabItem label="Java">

```java
import com.pushwoosh.Pushwoosh;

Pushwoosh.getInstance().stopServerCommunication();
```
</TabItem>
<TabItem label="Kotlin">

```kotlin
import com.pushwoosh.Pushwoosh

Pushwoosh.getInstance().stopServerCommunication()
```
</TabItem>
</Tabs>

### Unity

#### Desativar a comunicação do SDK com o servidor na inicialização

Por padrão, a comunicação com o SDK está ativada. Para desativar toda a comunicação com os servidores da Pushwoosh até que o consentimento seja explicitamente concedido pelo usuário, aplique as configurações específicas da plataforma:

**Android**

Adicione o seguinte ao seu projeto Unity em `AndroidManifest.xml`:

```xml
 <meta-data android:name="com.pushwoosh.allow_server_communication" android:value="false" />
```

**iOS**

Modifique o `Info.plist`:

```xml
<key>Pushwoosh_ALLOW_SERVER_COMMUNICATION</key>
<false/>
```

**Nota:** Você deve ativar a comunicação antes de chamar `RegisterForPushNotifications`.

#### Verificar o status da comunicação

Use o seguinte método para verificar se a comunicação com o servidor está atualmente permitida:

```c#
bool enabled = Pushwoosh.Instance.IsCommunicationEnabled();
```

#### Ativar a comunicação do SDK após o consentimento

Para ativar a comunicação após o consentimento:

```c#
Pushwoosh.Instance.SetCommunicationEnabled(true);
```

#### Registrar-se para notificações push

Depois que a comunicação estiver ativada, você pode registrar o dispositivo para notificações push:

```c#
Pushwoosh.Instance.RegisterForPushNotifications();
```

#### Desativar a comunicação

Para interromper a comunicação com os servidores da Pushwoosh (por exemplo, se o usuário revogar o consentimento):

```c#
Pushwoosh.Instance.SetCommunicationEnabled(false);
```

### Web Push

#### Desativar a inscrição automática na inicialização

Por padrão, o SDK da Pushwoosh exibe o prompt de inscrição nativo assim que é inicializado. Para evitar que o SDK exiba automaticamente o prompt de inscrição na inicialização, defina o parâmetro `communicationEnabled` como `false` na chamada `init`.

```html
<script type="text/javascript" src="//cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js" async></script>
<script type="text/javascript">
  var Pushwoosh = Pushwoosh || [];
  Pushwoosh.push(['init', {
    // outros parâmetros de inicialização...
    communicationEnabled: false, // Desativa a comunicação para evitar prompts de inscrição automáticos
  }]);
</script>
```

#### Ativar a inscrição após o consentimento

Depois de desativar a inscrição automática, você pode solicitar que o usuário se inscreva a qualquer momento. Quando o usuário concorda em receber notificações push (por exemplo, clicando em um botão "Inscrever-se" na sua interface personalizada), você pode ativar a comunicação chamando o método `setCommunicationEnabled`. Chamar `Pushwoosh.setCommunicationEnabled(true)` ativa a comunicação com os serviços da Pushwoosh. Uma vez ativado, o SDK prosseguirá para exibir o prompt de permissão nativo do navegador.

```javascript
Pushwoosh.setCommunicationEnabled(true)
  .then(() => {
    console.log('User is subscribed to push notifications.');
  })
  .catch((error) => {
    console.error('Error subscribing user:', error);
  });
```

#### Desativar a comunicação

Para interromper a comunicação com os serviços da Pushwoosh (por exemplo, se o usuário revogar o consentimento), chame `setCommunicationEnabled` com `false`.

```javascript
Pushwoosh.setCommunicationEnabled(false);
```