# Управление согласием пользователя

Pushwoosh поддерживает соблюдение правил конфиденциальности (например, GDPR, CCPA), позволяя разработчикам контролировать, когда SDK начинает обмен данными с серверами Pushwoosh. Это помогает гарантировать, что никакие данные не будут собираться до тех пор, пока пользователь не даст явное согласие.

### Обзор

По умолчанию Pushwoosh SDK начинает обмен данными и сбор данных об устройстве сразу после инициализации. Однако вы можете изменить это поведение, чтобы обмен данными не происходил до тех пор, пока пользователь не даст согласие.

При такой настройке:

*   Если пользователь дает согласие, SDK инициализируется и начинает сбор данных.

*   Если пользователь не дает согласия, SDK остается неактивным и не собирает никаких данных.

*   Если пользователь позже отзывает согласие, SDK прекращает всю активность и отключается от серверов.

Pushwoosh предоставляет механизмы для управления этим процессом в iOS, Android и Unity.

### iOS

#### Отключение обмена данными с сервером SDK при запуске

По умолчанию обмен данными с SDK включен. Чтобы отключить весь обмен данными с серверами Pushwoosh до тех пор, пока пользователь не даст явное согласие, добавьте следующий ключ в ваш **`Info.plist`**:

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

```

#### Проверка статуса обмена данными

Используйте следующие методы, чтобы определить, разрешен ли в данный момент обмен данными:

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

#### Включение обмена данными с SDK после получения согласия

После того как пользователь дал согласие, включите обмен данными следующим образом:

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

#### Регистрация для получения push-уведомлений

После включения обмена данными явно зарегистрируйтесь для получения 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>

#### Отключение обмена данными

Чтобы прекратить обмен данными с серверами Pushwoosh (например, если пользователь отзывает согласие):

<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

#### Отключение обмена данными с сервером SDK при запуске

По умолчанию обмен данными включен. Чтобы предотвратить отправку каких-либо данных на серверы Pushwoosh до получения согласия пользователя, добавьте следующее в ваш `AndroidManifest.xml`:

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

#### Проверка статуса обмена данными

Используйте следующие методы, чтобы определить, разрешен ли в данный момент обмен данными с сервером:

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

#### Включение обмена данными с SDK после получения согласия

После того как пользователь дал согласие, включите обмен данными следующим образом:

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

#### Регистрация для получения push-уведомлений

После включения обмена данными явно зарегистрируйтесь для получения 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>

#### Отключение обмена данными

Чтобы прекратить обмен данными с серверами Pushwoosh (например, если пользователь отзывает согласие):

<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

#### Отключение обмена данными с сервером SDK при запуске

По умолчанию обмен данными с SDK включен. Чтобы отключить весь обмен данными с серверами Pushwoosh до тех пор, пока пользователь не даст явное согласие, примените настройки для конкретной платформы:

**Android**

Добавьте следующее в ваш проект Unity в `AndroidManifest.xml`:

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

**iOS**

Измените `Info.plist`:

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

**Примечание:** Вы должны включить обмен данными перед вызовом `RegisterForPushNotifications`.

#### Проверка статуса обмена данными

Используйте следующий метод, чтобы проверить, разрешен ли в данный момент обмен данными с сервером:

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

#### Включение обмена данными с SDK после получения согласия

Чтобы включить обмен данными после получения согласия:

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

#### Регистрация для получения push-уведомлений

После включения обмена данными вы можете зарегистрировать устройство для получения push-уведомлений:

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

#### Отключение обмена данными

Чтобы прекратить обмен данными с серверами Pushwoosh (например, если пользователь отзывает согласие):

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

### Web Push

#### Отключение автоматической подписки при запуске

По умолчанию Pushwoosh SDK показывает нативный запрос на подписку сразу после инициализации. Чтобы предотвратить автоматическое отображение запроса на подписку при инициализации SDK, установите параметр `communicationEnabled` в `false` в вызове `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>
```

#### Включение подписки после получения согласия

После отключения автоматической подписки вы можете в любой момент предложить пользователю подписаться. Когда пользователь соглашается получать push-уведомления (например, нажимая кнопку «Подписаться» в вашем пользовательском интерфейсе), вы можете включить обмен данными, вызвав метод `setCommunicationEnabled`. Вызов `Pushwoosh.setCommunicationEnabled(true)` включает обмен данными со службами Pushwoosh. После включения SDK покажет нативный запрос на разрешение от браузера.

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

#### Отключение обмена данными

Чтобы прекратить обмен данными со службами Pushwoosh (например, если пользователь отзывает согласие), вызовите `setCommunicationEnabled` с параметром `false`.

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