# إدارة موافقة المستخدم

يدعم 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>

#### التسجيل لتلقي الإشعارات الفورية

بمجرد تمكين الاتصال، قم بالتسجيل صراحةً لتلقي الإشعارات الفورية:

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

#### التسجيل لتلقي الإشعارات الفورية

بعد تمكين الاتصال، قم بالتسجيل صراحةً لتلقي الإشعارات الفورية:

<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);
```

#### التسجيل لتلقي الإشعارات الفورية

بمجرد تمكين الاتصال، يمكنك تسجيل الجهاز لتلقي الإشعارات الفورية:

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

#### تمكين الاشتراك بعد الموافقة

بمجرد تعطيل الاشتراك التلقائي، يمكنك مطالبة المستخدم بالاشتراك في أي وقت. عندما يوافق المستخدم على تلقي الإشعارات الفورية (على سبيل المثال، عن طريق النقر على زر "اشتراك" في واجهة المستخدم المخصصة الخاصة بك)، يمكنك تمكين الاتصال عن طريق استدعاء طريقة `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);
```