# Gestión del consentimiento del usuario

Pushwoosh apoya el cumplimiento de las normativas de privacidad (p. ej., GDPR, CCPA) permitiendo a los desarrolladores controlar cuándo el SDK comienza la comunicación con los servidores de Pushwoosh. Esto ayuda a garantizar que no se recopilen datos antes de que el usuario dé su consentimiento explícito.

### Resumen

Por defecto, el SDK de Pushwoosh comienza la comunicación y la recopilación de datos del dispositivo inmediatamente después de la inicialización. Sin embargo, puede cambiar este comportamiento para que no haya comunicación hasta que el usuario dé su consentimiento.

Con esta configuración:

*   Si el usuario da su consentimiento, el SDK se inicializa y comienza a recopilar datos.

*   Si el usuario no da su consentimiento, el SDK permanece inactivo y no recopila ningún dato.

*   Si el usuario retira posteriormente su consentimiento, el SDK detiene toda actividad y se desconecta de los servidores.


Pushwoosh proporciona mecanismos para gestionar este flujo en iOS, Android y Unity.

### iOS

#### Deshabilitar la comunicación del servidor del SDK al inicio

Por defecto, la comunicación con el SDK está habilitada. Para deshabilitar toda comunicación con los servidores de Pushwoosh hasta que el usuario otorgue explícitamente su consentimiento, agregue la siguiente clave a su **`Info.plist`**:

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

```

#### Comprobar el estado de la comunicación

Utilice los siguientes métodos para determinar si la comunicación está permitida actualmente:

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

#### Habilitar la comunicación del SDK después del consentimiento

Una vez que el usuario ha otorgado su consentimiento, habilite la comunicación de la siguiente manera:

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

#### Registrarse para notificaciones push

Una vez que la comunicación está habilitada, regístrese explícitamente para las notificaciones 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>

#### Deshabilitar la comunicación

Para detener la comunicación con los servidores de Pushwoosh (p. ej., si el usuario revoca el consentimiento):

<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

#### Deshabilitar la comunicación del servidor del SDK al inicio

Por defecto, la comunicación está habilitada. Para evitar que se envíen datos a los servidores de Pushwoosh hasta que se obtenga el consentimiento del usuario, agregue lo siguiente a su `AndroidManifest.xml`:

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

#### Comprobar el estado de la comunicación

Utilice los siguientes métodos para determinar si la comunicación con el servidor está permitida actualmente:

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

#### Habilitar la comunicación del SDK después del consentimiento

Una vez que el usuario ha otorgado su consentimiento, habilite la comunicación de la siguiente manera:

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

#### Registrarse para notificaciones push

Después de habilitar la comunicación, regístrese explícitamente para las notificaciones 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>

#### Deshabilitar la comunicación

Para detener la comunicación con los servidores de Pushwoosh (p. ej., si el usuario revoca el consentimiento):

<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

#### Deshabilitar la comunicación del servidor del SDK al inicio

Por defecto, la comunicación con el SDK está habilitada. Para deshabilitar toda comunicación con los servidores de Pushwoosh hasta que el usuario otorgue explícitamente su consentimiento, aplique configuraciones específicas de la plataforma:

**Android**

Agregue lo siguiente a su proyecto de Unity en `AndroidManifest.xml`:

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

**iOS**

Modifique `Info.plist`:

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


**Nota:** Debe habilitar la comunicación antes de llamar a `RegisterForPushNotifications`.

#### Comprobar el estado de la comunicación

Utilice el siguiente método para comprobar si la comunicación con el servidor está permitida actualmente:

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

#### Habilitar la comunicación del SDK después del consentimiento

Para habilitar la comunicación después del consentimiento:

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

#### Registrarse para notificaciones push

Una vez que la comunicación está habilitada, puede registrar el dispositivo para las notificaciones push:

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

#### Deshabilitar la comunicación
Para detener la comunicación con los servidores de Pushwoosh (p. ej., si el usuario revoca el consentimiento):

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

### Web Push

#### Deshabilitar la suscripción automática al inicio

Por defecto, el SDK de Pushwoosh muestra el aviso de suscripción nativo tan pronto como se inicializa. Para evitar que el SDK muestre automáticamente el aviso de suscripción al inicializarse, establezca el parámetro `communicationEnabled` en `false` en la llamada `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', {
    // other initialization parameters...
    communicationEnabled: false, // Disable communication to prevent automatic subscription prompts
  }]);
</script>
```

#### Habilitar la suscripción después del consentimiento

Una vez que haya deshabilitado la suscripción automática, puede solicitar al usuario que se suscriba en cualquier momento. Cuando el usuario acepta recibir notificaciones push (p. ej., haciendo clic en un botón "Suscribirse" en su interfaz de usuario personalizada), puede habilitar la comunicación llamando al método `setCommunicationEnabled`. Llamar a `Pushwoosh.setCommunicationEnabled(true)` habilita la comunicación con los servicios de Pushwoosh. Una vez habilitado, el SDK procederá a mostrar el aviso de permiso nativo del navegador.

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

#### Deshabilitar la comunicación

Para detener la comunicación con los servicios de Pushwoosh (p. ej., si el usuario revoca el consentimiento), llame a `setCommunicationEnabled` con `false`.

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