# gRPC Transport

`PushwooshGRPC` মডিউল একটি ঐচ্ছিক gRPC ট্রান্সপোর্ট লেয়ার প্রদান করে যা Pushwoosh সার্ভারের সাথে যোগাযোগের জন্য নেটওয়ার্ক পারফরম্যান্স উন্নত করতে পারে। যখন উপলব্ধ থাকে, SDK স্বয়ংক্রিয়ভাবে সমর্থিত API মেথডগুলির জন্য gRPC ব্যবহার করে এবং gRPC অনুপলব্ধ হলে REST-এ ফলব্যাক করে।

<Aside type="note">
**SDK সংস্করণ 7.0.18** থেকে উপলব্ধ।
</Aside>

## এটি কিভাবে কাজ করে

ডিফল্টভাবে, Pushwoosh SDK সার্ভারের সাথে HTTPS এর মাধ্যমে REST API ব্যবহার করে যোগাযোগ করে। `PushwooshGRPC` মডিউল একটি বিকল্প gRPC ট্রান্সপোর্ট যোগ করে যা বিভিন্ন সুবিধা প্রদান করে:

- **কম লেটেন্সি** — gRPC পারসিস্টেন্ট সংযোগের সাথে HTTP/2 ব্যবহার করে
- **ছোট পেলোড সাইজ** — প্রোটোকল বাফার JSON এর চেয়ে বেশি কম্প্যাক্ট
- **মাল্টিপ্লেক্সিং** — একটি সংযোগের মাধ্যমে একাধিক অনুরোধ পাঠানো যায়

### স্বয়ংক্রিয় ফলব্যাক

মডিউলটিতে বিল্ট-ইন রেজিলিয়েন্স অন্তর্ভুক্ত রয়েছে:

| দৃশ্যকল্প | আচরণ |
|----------|----------|
| gRPC উপলব্ধ | gRPC ট্রান্সপোর্ট ব্যবহার করে |
| gRPC অনুপলব্ধ | REST-এ ফলব্যাক করে |
| নেটওয়ার্ক ত্রুটি | REST দিয়ে পুনরায় চেষ্টা করে |

<Aside type="tip">
আপনার কোডে ট্রান্সপোর্ট নির্বাচন পরিচালনা করার প্রয়োজন নেই। SDK স্বয়ংক্রিয়ভাবে সেরা উপলব্ধ ট্রান্সপোর্ট বেছে নেয়।
</Aside>

## প্রয়োজনীয়তা

| প্রয়োজনীয়তা | সংস্করণ |
|-------------|---------|
| iOS | 13.0+ |
| Xcode | 14.0+ |
| Swift | 5.0+ |

## ইনস্টলেশন

### Swift Package Manager

Pushwoosh SDK ইন্টিগ্রেট করার সময় আপনার টার্গেটে `PushwooshGRPC` যোগ করুন:

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` — লাইভ অ্যাক্টিভিটিস সাপোর্ট
* `PushwooshVoIP` — VoIP পুশ নোটিফিকেশন
* `PushwooshForegroundPush` — কাস্টম ফোরগ্রাউন্ড নোটিফিকেশন
</TabItem>
</Tabs>

### CocoaPods

আপনার `Podfile`-এ gRPC সাবস্পেক যোগ করুন:

```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 সাপোর্ট |
|--------|--------------|
| ডিভাইস রেজিস্ট্রেশন | হ্যাঁ |
| ট্যাগ (সেট/গেট) | হ্যাঁ |
| অ্যাপ ওপেন ট্র্যাকিং | হ্যাঁ |
| পুশ পরিসংখ্যান | হ্যাঁ |

<Aside type="note">
উপরে তালিকাভুক্ত নয় এমন মেথডগুলি REST ট্রান্সপোর্ট ব্যবহার করতে থাকবে। SDK এটি স্বচ্ছভাবে পরিচালনা করে।
</Aside>

## ব্যবহারের ক্ষেত্র

`PushwooshGRPC` মডিউলটি বিশেষভাবে উপযোগী:

- **উচ্চ-ফ্রিকোয়েন্সি ইভেন্ট ট্র্যাকিং** — যে অ্যাপগুলি অনেক ইভেন্ট পাঠায় তাদের জন্য ওভারহেড হ্রাস করে
- **রিয়েল-টাইম অ্যাপ্লিকেশন** — সময়-সংবেদনশীল অপারেশনের জন্য কম লেটেন্সি
- **ব্যান্ডউইথ-সীমাবদ্ধ পরিবেশ** — ছোট পেলোড সাইজ ডেটা সাশ্রয় করে

## সমস্যা সমাধান

### মডিউলটি সক্রিয় কিনা তা যাচাই করা

আপনার অ্যাপ লঞ্চ করার সময় Xcode কনসোল লগগুলি পরীক্ষা করুন। আপনার এই ধরনের একটি লগ বার্তা দেখা উচিত:

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

### REST ট্রান্সপোর্ট জোর করে ব্যবহার করা

ডিবাগিংয়ের জন্য যদি আপনাকে সাময়িকভাবে gRPC নিষ্ক্রিয় করতে হয়, তাহলে আপনি আপনার টার্গেট থেকে `PushwooshGRPC` মডিউলটি সরিয়ে ফেলতে পারেন। gRPC উপলব্ধ না থাকলে SDK স্বয়ংক্রিয়ভাবে REST ট্রান্সপোর্ট ব্যবহার করবে।

<Aside type="caution">
আপনার অ্যাপে gRPC এবং REST উভয় ট্রান্সপোর্ট কোড অন্তর্ভুক্ত করবেন না — SDK মডিউলের প্রাপ্যতার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ট্রান্সপোর্ট নির্বাচন পরিচালনা করে।
</Aside>