# iOS SDK 7.0+ অ্যাডভান্সড ইন্টিগ্রেশন গাইড

import { Badge } from '@astrojs/starlight/components';

এই বিভাগটি Pushwoosh iOS SDK-এর অ্যাডভান্সড ইন্টিগ্রেশন সম্পর্কে তথ্য প্রদান করে।

## ব্যাকগ্রাউন্ড মোড

<Aside type="caution" title="">
ডিফল্টরূপে, iOS অ্যাপগুলিকে ব্যাকগ্রাউন্ডে থাকাকালীন পুশ নোটিফিকেশন প্রসেস করার অনুমতি দেয় না। এর মধ্যে সাইলেন্ট পুশ নোটিফিকেশনও অন্তর্ভুক্ত, যা ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই অ্যাপের ডেটা আপডেট করার জন্য দরকারি।
</Aside>

এই কার্যকারিতা সক্রিয় করতে, আপনাকে অবশ্যই আপনার প্রজেক্টে ব্যাকগ্রাউন্ড মোড যোগ করতে হবে।


#### ব্যাকগ্রাউন্ড মোড সক্রিয় করার ধাপসমূহ

১. আপনার প্রজেক্টটি **Xcode**-এ খুলুন এবং **Project Navigator**-এ এটি নির্বাচন করুন।
২. বাম প্যানেল থেকে আপনার অ্যাপ টার্গেটটি বেছে নিন।
৩. **Signing & Capabilities** ট্যাবে নেভিগেট করুন।
৪. উপরের-বাম কোণায় **+ Capability** বোতামে ক্লিক করুন।
৫. তালিকা থেকে **Background Modes** অনুসন্ধান করুন এবং নির্বাচন করুন।
৬. **Background Modes** বিভাগে, বক্সটি চেক করে **Remote notifications** সক্রিয় করুন।

একবার সম্পন্ন হলে, আপনার অ্যাপ ব্যাকগ্রাউন্ডে চলার সময় সাইলেন্ট পুশ নোটিফিকেশন সহ পুশ নোটিফিকেশনগুলি হ্যান্ডেল করতে সক্ষম হবে।

## ফোরগ্রাউন্ড মোড

ডিফল্টরূপে, Pushwoosh iOS SDK অ্যাপটি ফোরগ্রাউন্ডে চলার সময় নোটিফিকেশন ব্যানার প্রদর্শন করে।

আপনি আপনার কোডে নিম্নলিখিত বুলিয়ান ফ্ল্যাগ সেট করে এই আচরণ নিয়ন্ত্রণ করতে পারেন (যেমন, আপনার `AppDelegate`-এ):

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    // ফোরগ্রাউন্ড নোটিফিকেশন নিষ্ক্রিয় করতে false সেট করুন, সক্রিয় করতে true সেট করুন
    Pushwoosh.configure.showPushnotificationAlert = true
    ```

    <LinkCard
        title="উদাহরণ (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/ViewController.swift#L30"
    />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  // ফোরগ্রাউন্ড নোটিফিকেশন নিষ্ক্রিয় করতে 0 সেট করুন, সক্রিয় করতে 1 সেট করুন
  [[Pushwoosh configure] setShowPushnotificationAlert:0];
  ```

    <LinkCard
        title="উদাহরণ (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/ViewController.m#L35"
    />

  </TabItem>
</Tabs>

## লগ লেভেল

Pushwoosh iOS SDK নিম্নলিখিত লগিং লেভেলগুলি সমর্থন করে:

- `NONE` - SDK থেকে কোনো লগ নেই।
- `ERROR` - কনসোলে শুধুমাত্র ত্রুটির বার্তা প্রদর্শন করে।
- `WARNING` - ত্রুটির পাশাপাশি সতর্কতা প্রদর্শন করে।
- `INFO` - তথ্যমূলক বার্তা অন্তর্ভুক্ত করে (ডিফল্ট সেটিং)।
- `DEBUG` - বিস্তারিত ডিবাগ তথ্য অন্তর্ভুক্ত করে।

ডিফল্টরূপে, লগিং লেভেল INFO-তে সেট করা থাকে, যা নিশ্চিত করে যে SDK ডেভেলপার কনসোলকে বিশৃঙ্খল না করে প্রাসঙ্গিক তথ্য প্রদান করে।

লগিং লেভেল পরিবর্তন করতে, আপনার অ্যাপের `Info.plist` ফাইলে `Pushwoosh_LOG_LEVEL` কী আপডেট করুন:

```xml
<key>Pushwoosh_LOG_LEVEL</key>
<string>YOUR_LOG_LEVEL</string>
```

বিকল্পভাবে, আপনি নীচের কোড স্নিপেট ব্যবহার করে লগ লেভেল পরিবর্তন করতে পারেন:

```swift
Pushwoosh.Debug.setLogLevel(.PW_LL_DEBUG)
```

`YOUR_LOG_LEVEL`-কে কাঙ্ক্ষিত লেভেল দিয়ে প্রতিস্থাপন করুন (যেমন, `DEBUG` বা `ERROR`)।

## কাস্টম `UNNotificationCenterDelegate`

আপনি যদি আপনার নিজস্ব `UNNotificationCenterDelegate` ব্যবহার করতে চান (উদাহরণস্বরূপ, স্থানীয় নোটিফিকেশনের জন্য), সঠিক আচরণের জন্য আপনাকে Pushwoosh SDK-কে এটি সম্পর্কে জানাতে হবে। আপনি `addNotificationCenterDelegate` পদ্ধতি দিয়ে এটি করতে পারেন:

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    Pushwoosh.configure.addNotificationCenterDelegate(my_delegate)
    ```

    <LinkCard
        title="উদাহরণ (Swift)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift#L23"
    />

    </TabItem>

    <TabItem label="Objective-C">
    ```objective-c
    [Pushwoosh.configure addNotificationCenterDelegate:my_delegate];
    ```

    <LinkCard
        title="উদাহরণ (Objective-C)"
        href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m#L28"
    />

    </TabItem>
</Tabs>

তারপর, আপনার ডেলিগেটে `UNNotificationCenterDelegate` পদ্ধতিগুলি প্রয়োগ করুন:

<Tabs syncKey="code-example">
  <TabItem label="Swift">

  ```swift
  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      willPresent notification: UNNotification,
      withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(notification.request.content.userInfo)) {
          // আপনার নোটিফিকেশন হ্যান্ডেল করুন
          completionHandler(UNNotificationPresentationOptions.alert)
      }
  }

  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      didReceive response: UNNotificationResponse,
      withCompletionHandler completionHandler: @escaping () -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(response.notification.request.content.userInfo)) {
          // আপনার নোটিফিকেশন হ্যান্ডেল করুন
          completionHandler()
      }
  }
  ```

  <LinkCard title="উদাহরণ (Swift)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizing/Custom%20UNNotificationCenterDelegate/CustomNotificationCDViewConrtoller.swift" />

  </TabItem>

  <TabItem label="Objective-C">

  ```objective-c
  - (void)userNotificationCenter:(UNNotificationCenter *)center
          willPresentNotification:(UNNotification *)notification
          withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
      if (![PWMessage isPushwooshMessage:notification.request.content.userInfo]) {
          // আপনার বার্তা হ্যান্ডেল করুন
          completionHandler(UNNotificationPresentationOptionAlert);
      }
  }

  - (void)userNotificationCenter:(UNNotificationCenter *)center
          didReceiveNotificationResponse:(UNNotificationResponse *)response
          withCompletionHandler:(void (^)(void))completionHandler {
      if (![PWMessage.isPushwooshMessage:response.notification.request.content.userInfo]) {
          // আপনার বার্তা হ্যান্ডেল করুন
          completionHandler();
      }
  }
  ```

  <LinkCard title="উদাহরণ (Objective-C)" href="https://github.com/Pushwoosh/pushwoosh-quickstart-ios/blob/main/customizing/customizingObjC/customizingObjC/Custom%20UNNotificationCenterDelegate/PWCustomNotificationCDViewConrtoller.m" />

  </TabItem>
</Tabs>

## Pushwoosh লেজি ইনিশিয়ালাইজেশন

```Pushwoosh_LAZY_INITIALIZATION``` ফ্ল্যাগটি অ্যাপ্লিকেশন শুরু হওয়ার সময় Pushwoosh SDK-এর স্বয়ংক্রিয় ইনিশিয়ালাইজেশন প্রতিরোধ করে। এটি Pushwoosh SDK পরিষেবাগুলি কখন শুরু হবে তার উপর আরও নিয়ন্ত্রণ দেয়।

যখন এই ফ্ল্যাগটি সক্রিয় করা হয়, Pushwoosh SDK তার পরিষেবাগুলি শুরু করে না যতক্ষণ না Pushwoosh iOS SDK পদ্ধতিগুলি স্পষ্টভাবে কল করা হয়।

Info.plist-এ নিম্নলিখিত এন্ট্রি যোগ করুন:

```xml
<key>Pushwoosh_LAZY_INITIALIZATION</key>
<true/>
```

**ব্যবহারের ক্ষেত্র**
১. **নিয়ন্ত্রিত SDK ইনিশিয়ালাইজেশন** – Pushwoosh_LAZY_INITIALIZATION ফ্ল্যাগ Pushwoosh SDK স্টার্টআপ বিলম্বিত করার অনুমতি দেয়, পুশ পরিষেবাগুলি কখন সক্রিয় হবে তার উপর আরও নিয়ন্ত্রণ দেয়।

২. **বিলম্বিত পুশ অ্যাক্টিভেশন** – কিছু অ্যাপ্লিকেশনে, পুশ নোটিফিকেশন শুধুমাত্র নির্দিষ্ট শর্তে ইনিশিয়ালাইজ করা উচিত। এই ফ্ল্যাগটি সক্রিয় করা নিশ্চিত করে যে Pushwoosh SDK শুধুমাত্র স্পষ্টভাবে অনুরোধ করা হলেই শুরু হবে।

৩. **ব্যবহারকারী-নির্দিষ্ট পুশ কনফিগারেশন** – কিছু অ্যাপ্লিকেশনের ব্যবহারকারীর পছন্দ বা অ্যাকাউন্ট সেটিংসের উপর ভিত্তি করে পুশ নোটিফিকেশন সেটিংস কাস্টমাইজ করার প্রয়োজন হতে পারে। লেজি ইনিশিয়ালাইজেশনের সাথে, Pushwoosh SDK শুধুমাত্র উপযুক্ত কনফিগারেশন নির্ধারণ করার পরেই শুরু হয়।
## Info.plist প্রপার্টির সম্পূর্ণ তালিকা

| প্রপার্টি                                      | বর্ণনা                                                                  | সম্ভাব্য মান                                                                                  |
|-----------------------------------------------|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| `Pushwoosh_APPID`                             | প্রোডাকশন বিল্ডের জন্য Pushwoosh অ্যাপ্লিকেশন আইডি সেট করে।                     | `XXXXX-XXXXX` <br /> **প্রকার**: String                                                             |
| `Pushwoosh_APPID_Dev`                         | ডেভেলপমেন্ট বিল্ডের জন্য Pushwoosh অ্যাপ্লিকেশন আইডি সেট করে।                    | `XXXXX-XXXXX` <br /> **প্রকার**: String                                                             |
| `Pushwoosh_SHOW_ALERT`                        | নোটিফিকেশন ফোরগ্রাউন্ড অ্যালার্ট দেখায়।                                        | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_ALERT_TYPE`                        | নোটিফিকেশন অ্যালার্ট স্টাইল সেট করে।                                          | `BANNER` *(ডিফল্ট)* / `ALERT` / `NONE` <br /> **প্রকার**: String                                   |
| `Pushwoosh_BASEURL`                           | Pushwoosh সার্ভার বেস URL ওভাররাইড করে।                                    | [`https://cp.pushwoosh.com/json/1.3/`](https://cp.pushwoosh.com/json/1.3/) *(ডিফল্ট)* <br /> **প্রকার**: String |
| `Pushwoosh_AUTO_ACCEPT_DEEP_LINK_FOR_SILENT_PUSH` | যদি `YES` হয়, সাইলেন্ট পুশে প্রাপ্ত ডিপ লিঙ্কগুলি স্বয়ংক্রিয়ভাবে প্রসেস করা হবে। | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_ALLOW_SERVER_COMMUNICATION`        | SDK-কে Pushwoosh সার্ভারে নেটওয়ার্ক অনুরোধ পাঠানোর অনুমতি দেয়।               | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_DATA`      | SDK-কে ডিভাইসের ডেটা (OS সংস্করণ, লোকেল এবং মডেল) সংগ্রহ এবং সার্ভারে পাঠানোর অনুমতি দেয়। | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_OS_VERSION` | SDK-কে ডিভাইসের OS সংস্করণ সংগ্রহ এবং সার্ভারে পাঠানোর অনুমতি দেয়।   | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_LOCALE`    | SDK-কে ডিভাইসের লোকেল সংগ্রহ এবং সার্ভারে পাঠানোর অনুমতি দেয়।         | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_MODEL`     | SDK-কে ডিভাইসের মডেল সংগ্রহ এবং সার্ভারে পাঠানোর অনুমতি দেয়।          | `YES` *(ডিফল্ট)* / `NO` <br /> **প্রকার**: Boolean                                                 |
| `Pushwoosh_LOG_LEVEL`                         | Pushwoosh SDK লগিং লেভেল। বিস্তারিত জানতে, [লগ লেভেল নিয়ন্ত্রণ](#log-level) দেখুন। | `NONE` / `ERROR` / `WARNING` / `INFO` *(ডিফল্ট)* / `DEBUG` / `VERBOSE` <br /> **প্রকার**: String    |
| `Pushwoosh_PURCHASE_TRACKING_ENABLED`         | SDK-কে ইন-অ্যাপ পারচেজ ট্র্যাক করার অনুমতি দেয়। Customer Journey Builder-এর জন্য প্রয়োজন। | `YES` / `NO` *(ডিফল্ট)* <br /> **প্রকার**: Boolean                                                 |