# 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
    // फोरग्राउंड नोटिफिकेशन को अक्षम करने के लिए false सेट करें, इसे सक्षम करने के लिए true सेट करें
    Pushwoosh.configure.showPushnotificationAlert = true
    ```

    <LinkCard
        title="उदाहरण (स्विफ्ट)"
        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="उदाहरण (ऑब्जेक्टिव-सी)"
        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="उदाहरण (स्विफ्ट)"
        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="उदाहरण (ऑब्जेक्टिव-सी)"
        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="उदाहरण (स्विफ्ट)" 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="उदाहरण (ऑब्जेक्टिव-सी)" 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 /> **प्रकार**: बूलियन                                                 |