# การจัดการความยินยอมของผู้ใช้

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 notifications

เมื่อเปิดใช้งานการสื่อสารแล้ว ให้ลงทะเบียนเพื่อรับ push notifications อย่างชัดแจ้ง:

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

หลังจากเปิดใช้งานการสื่อสารแล้ว ให้ลงทะเบียนเพื่อรับ push notifications อย่างชัดแจ้ง:

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

เมื่อเปิดใช้งานการสื่อสารแล้ว คุณสามารถลงทะเบียนอุปกรณ์เพื่อรับ push notifications ได้:

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

#### ปิดใช้งานการสื่อสาร
หากต้องการหยุดการสื่อสารกับเซิร์ฟเวอร์ Pushwoosh (เช่น หากผู้ใช้เพิกถอนความยินยอม):

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

### Web Push

#### ปิดใช้งานการสมัครรับข้อมูลอัตโนมัติเมื่อเริ่มต้น

โดยค่าเริ่มต้น Pushwoosh SDK จะแสดงหน้าต่างขอสมัครรับข้อมูล (subscription prompt) ของเบราว์เซอร์ทันทีที่เริ่มต้น เพื่อป้องกันไม่ให้ 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 notifications (เช่น โดยการคลิกปุ่ม "Subscribe" บน UI ที่คุณกำหนดเอง) คุณสามารถเปิดใช้งานการสื่อสารได้โดยการเรียกเมธอด `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);
```