# iOS SDK एडवांस्ड इंटीग्रेशन गाइड

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

यह सेक्शन Pushwoosh iOS SDK के एडवांस्ड इंटीग्रेशन के बारे में जानकारी प्रदान करता है।

## बैकग्राउंड मोड्स

<Aside type="caution" title="">
डिफ़ॉल्ट रूप से, iOS ऐप्स को बैकग्राउंड में होने पर पुश नोटिफिकेशन प्रोसेस करने की अनुमति नहीं देता है। इसमें साइलेंट पुश नोटिफिकेशन शामिल हैं, जो यूज़र इंटरेक्शन के बिना ऐप डेटा को अपडेट करने के लिए उपयोगी हैं।
</Aside>

इस कार्यक्षमता को सक्षम करने के लिए, आपको अपने प्रोजेक्ट में बैकग्राउंड मोड्स जोड़ना होगा।

#### बैकग्राउंड मोड्स को सक्षम करने के चरण

1. **Xcode** में अपना प्रोजेक्ट खोलें और इसे **प्रोजेक्ट नेविगेटर** में चुनें।
2. बाएं पैनल से अपना ऐप टारगेट चुनें।
3. **साइनिंग और क्षमताएं** टैब पर नेविगेट करें।
4. ऊपरी-बाएं कोने में **+ क्षमता** बटन पर क्लिक करें।
5. सूची से **बैकग्राउंड मोड्स** खोजें और चुनें।
6. **बैकग्राउंड मोड्स** सेक्शन में, बॉक्स को चेक करके **रिमोट नोटिफिकेशन** को सक्षम करें।

एक बार पूरा हो जाने पर, आपका ऐप बैकग्राउंड में चलते समय पुश नोटिफिकेशन, जिसमें साइलेंट नोटिफिकेशन भी शामिल हैं, को संभालने में सक्षम होगा।

## फोरग्राउंड मोड्स

डिफ़ॉल्ट रूप से, Pushwoosh iOS SDK ऐप के फोरग्राउंड में चलने पर नोटिफिकेशन बैनर प्रदर्शित करता है।

आप अपने कोड में (यानी, अपने `AppDelegate` में) निम्नलिखित बूलियन फ़्लैग सेट करके इस व्यवहार को नियंत्रित कर सकते हैं:

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    // फोरग्राउंड नोटिफिकेशन को डिसेबल करने के लिए false सेट करें, इसे इनेबल करने के लिए true सेट करें
    Pushwoosh.sharedInstance().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 sharedInstance] 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 को इसके बारे में सूचित करना चाहिए। आप इसे Pushwoosh इंस्टेंस की `notificationCenterDelegateProxy` प्रॉपर्टी के साथ कर सकते हैं:

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    Pushwoosh.sharedInstance().notificationCenterDelegateProxy?.add(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.sharedInstance.notificationCenterDelegateProxy 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/>
```

**उपयोग के मामले**
1. **नियंत्रित SDK इनिशियलाइज़ेशन** – Pushwoosh_LAZY_INITIALIZATION फ़्लैग Pushwoosh SDK स्टार्टअप में देरी करने की अनुमति देता है, जिससे पुश सेवाएं कब सक्रिय होती हैं, इस पर अधिक नियंत्रण मिलता है।

2. **आस्थगित पुश सक्रियण** – कुछ एप्लिकेशन में, पुश नोटिफिकेशन केवल विशिष्ट शर्तों के तहत ही इनिशियलाइज़ किए जाने चाहिए। इस फ़्लैग को सक्षम करने से यह सुनिश्चित होता है कि Pushwoosh SDK केवल स्पष्ट रूप से अनुरोध किए जाने पर ही शुरू होता है।

3. **उपयोगकर्ता-विशिष्ट पुश कॉन्फ़िगरेशन** – कुछ एप्लिकेशन को उपयोगकर्ता की प्राथमिकताओं या खाता सेटिंग्स के आधार पर पुश नोटिफिकेशन सेटिंग्स को अनुकूलित करने की आवश्यकता हो सकती है। लेज़ी इनिशियलाइज़ेशन के साथ, Pushwoosh SDK केवल उपयुक्त कॉन्फ़िगरेशन निर्धारित होने के बाद ही शुरू होता है।
## Info.plist प्रॉपर्टीज़ की पूरी सूची

| प्रॉपर्टी | विवरण | संभावित मान |
|---|---|---|
| `Pushwoosh_APPID` | प्रोडक्शन बिल्ड के लिए Pushwoosh एप्लिकेशन आईडी सेट करता है। | `XXXXX-XXXXX` <br /> **प्रकार**: स्ट्रिंग |
| `Pushwoosh_APPID_Dev` | डेवलपमेंट बिल्ड के लिए Pushwoosh एप्लिकेशन आईडी सेट करता है। | `XXXXX-XXXXX` <br /> **प्रकार**: स्ट्रिंग |
| `Pushwoosh_SHOW_ALERT` | नोटिफिकेशन फोरग्राउंड अलर्ट दिखाता है। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_ALERT_TYPE` | नोटिफिकेशन अलर्ट स्टाइल सेट करता है। | `BANNER` *(डिफ़ॉल्ट)* / `ALERT` / `NONE` <br /> **प्रकार**: स्ट्रिंग |
| `Pushwoosh_BASEURL` | Pushwoosh सर्वर बेस URL को ओवरराइड करता है। | [`https://cp.pushwoosh.com/json/1.3/`](https://cp.pushwoosh.com/json/1.3/) *(डिफ़ॉल्ट)* <br /> **प्रकार**: स्ट्रिंग |
| `Pushwoosh_AUTO_ACCEPT_DEEP_LINK_FOR_SILENT_PUSH` | यदि `YES`, तो साइलेंट पुश में प्राप्त डीप लिंक स्वचालित रूप से प्रोसेस किए जाएंगे। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_ALLOW_SERVER_COMMUNICATION` | SDK को Pushwoosh सर्वर पर नेटवर्क अनुरोध भेजने की अनुमति देता है। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_DATA` | SDK को डिवाइस डेटा (OS संस्करण, लोकेल, और मॉडल) एकत्र करने और सर्वर पर भेजने की अनुमति देता है। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_OS_VERSION` | SDK को डिवाइस के OS संस्करण को एकत्र करने और सर्वर पर भेजने की अनुमति देता है। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_LOCALE` | SDK को डिवाइस लोकेल एकत्र करने और सर्वर पर भेजने की अनुमति देता है। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_ALLOW_COLLECTING_DEVICE_MODEL` | SDK को डिवाइस मॉडल एकत्र करने और सर्वर पर भेजने की अनुमति देता है। | `YES` *(डिफ़ॉल्ट)* / `NO` <br /> **प्रकार**: बूलियन |
| `Pushwoosh_LOG_LEVEL` | Pushwoosh SDK लॉगिंग स्तर। विवरण के लिए, [लॉग स्तर को नियंत्रित करना](#log-level) देखें। | `NONE` / `ERROR` / `WARNING` / `INFO` *(डिफ़ॉल्ट)* / `DEBUG` / `VERBOSE` <br /> **प्रकार**: स्ट्रिंग |
| `Pushwoosh_PURCHASE_TRACKING_ENABLED` | SDK को इन-ऐप खरीदारी को ट्रैक करने की अनुमति देता है। Customer Journey Builder के लिए आवश्यक है। | `YES` / `NO` *(डिफ़ॉल्ट)* <br /> **प्रकार**: बूलियन |