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

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

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

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

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

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


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

1. अपने प्रोजेक्ट को **Xcode** में खोलें और इसे **प्रोजेक्ट नेविगेटर** में चुनें।
2. बाएं पैनल से अपना ऐप टारगेट चुनें।
3. **Signing & Capabilities** टैब पर नेविगेट करें।
4. ऊपरी-बाएं कोने में **+ Capability** बटन पर क्लिक करें।
5. सूची से **Background Modes** खोजें और चुनें।
6. **Background Modes** सेक्शन में, बॉक्स को चेक करके **Remote notifications** को सक्षम करें।

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

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

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

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

<Tabs syncKey="code-example">
    <TabItem label="Swift">
    ```swift
    // Set false to disable foreground notifications, true to enable it
    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
  // Set 0 to disable foreground notifications, 1 to enable it
  [[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)) {
          // Handle your notification
          completionHandler(UNNotificationPresentationOptions.alert)
      }
  }

  func userNotificationCenter(
      _ center: UNUserNotificationCenter,
      didReceive response: UNNotificationResponse,
      withCompletionHandler completionHandler: @escaping () -> Void
  ) {
      if (!PWMessage.isPushwooshMessage(response.notification.request.content.userInfo)) {
          // Handle your notification
          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:(UNUserNotificationCenter *)center
          willPresentNotification:(UNNotification *)notification
          withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
      if (![PWMessage isPushwooshMessage:notification.request.content.userInfo]) {
          // Handle your message
          completionHandler(UNNotificationPresentationOptionAlert);
      }
  }

  - (void)userNotificationCenter:(UNUserNotificationCenter *)center
          didReceiveNotificationResponse:(UNNotificationResponse *)response
          withCompletionHandler:(void (^)(void))completionHandler {
      if (![PWMessage.isPushwooshMessage:response.notification.request.content.userInfo]) {
          // Handle your message
          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_ALLOW_COLLECTING_SCREEN_NAME`      | SDK को वर्तमान स्क्रीन नाम को `PW_ScreenOpen`, `PW_UserIdle`, और `PW_ApplicationExit` ईवेंट्स से जोड़ने की अनुमति देता है। | `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 /> **प्रकार**: बूलियन                                                 |

उन प्लेटफॉर्म पर जो Info.plist (Cordova, OutSystems) को संपादित नहीं कर सकते, इसके बजाय रनटाइम समकक्ष का उपयोग करें: `Pushwoosh.configure.setAllowCollectingScreenName:`।