# نقل gRPC

توفر وحدة `PushwooshGRPC` طبقة نقل gRPC اختيارية يمكنها تحسين أداء الشبكة للاتصال بخوادم Pushwoosh. عند توفرها، يستخدم SDK تلقائيًا gRPC لأساليب API المدعومة ويعود إلى REST إذا كان gRPC غير متاح.

<Aside type="note">
متوفر بدءًا من **إصدار SDK 7.0.18**.
</Aside>

## كيف يعمل

بشكل افتراضي، يتصل Pushwoosh SDK بالخوادم باستخدام REST API عبر HTTPS. تضيف وحدة `PushwooshGRPC` طبقة نقل gRPC بديلة تقدم العديد من المزايا:

- **زمن استجابة أقل** — يستخدم gRPC بروتوكول HTTP/2 مع اتصالات مستمرة
- **حجم حمولة أصغر** — تكون Protocol Buffers أكثر ضغطًا من JSON
- **تعدد الإرسال** — يمكن إرسال طلبات متعددة عبر اتصال واحد

### العودة التلقائية إلى REST

تتضمن الوحدة مرونة مدمجة:

| السيناريو | السلوك |
|----------|----------|
| gRPC متاح | يستخدم نقل gRPC |
| gRPC غير متاح | يعود إلى REST |
| خطأ في الشبكة | يعيد المحاولة باستخدام REST |

<Aside type="tip">
لا تحتاج إلى التعامل مع اختيار وسيلة النقل في الكود الخاص بك. يختار SDK تلقائيًا أفضل وسيلة نقل متاحة.
</Aside>

## المتطلبات

| المتطلب | الإصدار |
|-------------|---------|
| iOS | 13.0+ |
| Xcode | 14.0+ |
| Swift | 5.0+ |

## التثبيت

### Swift Package Manager

أضف `PushwooshGRPC` إلى هدفك عند دمج Pushwoosh SDK:

1. في Xcode، اذهب إلى **File → Add Package Dependencies**
2. أدخل عنوان URL للحزمة: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`
3. اختر `PushwooshGRPC` بالإضافة إلى الأطر المطلوبة

<Tabs>
<TabItem label="الأطر المطلوبة">
* `PushwooshFramework`
* `PushwooshCore`
* `PushwooshBridge`
</TabItem>
<TabItem label="الأطر الاختيارية">
* `PushwooshGRPC` — نقل gRPC
* `PushwooshKeychain` — معرّف جهاز دائم
* `PushwooshLiveActivities` — دعم Live Activities
* `PushwooshVoIP` — إشعارات VoIP
* `PushwooshForegroundPush` — إشعارات مخصصة في المقدمة
</TabItem>
</Tabs>

### CocoaPods

أضف المواصفة الفرعية لـ gRPC إلى ملف `Podfile` الخاص بك:

```ruby
target 'MyApp' do
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshXCFramework/PushwooshGRPC'
end
```

ثم قم بتشغيل:

```bash
pod install
```

## الاستخدام

**لا يلزم إجراء أي تغييرات في الكود.** بمجرد إضافة وحدة `PushwooshGRPC` إلى مشروعك، فإنها تعمل تلقائيًا:

1. عند تشغيل التطبيق، يكتشف SDK أن نقل gRPC متاح
2. يتم توجيه استدعاءات API عبر gRPC عندما يكون ذلك ممكنًا
3. إذا فشل gRPC، يعود SDK تلقائيًا إلى REST

## الأساليب المدعومة

تدعم أساليب API التالية نقل gRPC:

| الأسلوب | دعم gRPC |
|--------|--------------|
| تسجيل الجهاز | نعم |
| العلامات (Tags) (set/get) | نعم |
| تتبع فتح التطبيق | نعم |
| إحصائيات الإشعارات | نعم |

<Aside type="note">
الأساليب غير المذكورة أعلاه ستستمر في استخدام نقل REST. يتعامل SDK مع هذا الأمر بشفافية.
</Aside>

## حالات الاستخدام

تعتبر وحدة `PushwooshGRPC` مفيدة بشكل خاص في الحالات التالية:

- **تتبع الأحداث عالي التردد** — تقليل العبء على التطبيقات التي ترسل العديد من الأحداث
- **التطبيقات في الوقت الفعلي** — زمن استجابة أقل للعمليات الحساسة للوقت
- **البيئات ذات النطاق الترددي المحدود** — أحجام الحمولة الأصغر توفر البيانات

## استكشاف الأخطاء وإصلاحها

### التحقق من أن الوحدة نشطة

تحقق من سجلات وحدة التحكم في Xcode عند تشغيل تطبيقك. يجب أن ترى رسالة سجل مثل:

```
[Pushwoosh] gRPC transport: ENABLED
```

### فرض استخدام نقل REST

إذا كنت بحاجة إلى تعطيل gRPC مؤقتًا لتصحيح الأخطاء، يمكنك إزالة وحدة `PushwooshGRPC` من هدفك. سيستخدم SDK تلقائيًا نقل REST عندما لا يكون gRPC متاحًا.

<Aside type="caution">
لا تقم بتضمين كود نقل gRPC و REST معًا في تطبيقك — يتعامل SDK مع اختيار وسيلة النقل تلقائيًا بناءً على توفر الوحدة.
</Aside>