# iOS SDK के अक्सर पूछे जाने वाले प्रश्न

### iOS इंटीग्रेशन FAQ

#### प्रश्न: मैं अपने iOS प्रोजेक्ट में Pushwoosh SDK कैसे इंस्टॉल कर सकता हूँ?
आप Swift Package Manager या CocoaPods का उपयोग करके Pushwoosh SDK को इंटीग्रेट कर सकते हैं।

#### प्रश्न: मैं Swift Package Manager का उपयोग करके Pushwoosh SDK कैसे इंस्टॉल करूं?
Xcode में, **Package Dependencies** सेक्शन में जाएं और निम्नलिखित URL का उपयोग करके पैकेज जोड़ें: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`।

#### प्रश्न: मैं CocoaPods का उपयोग करके Pushwoosh SDK कैसे इंस्टॉल करूं?
अपने प्रोजेक्ट की `Podfile` खोलें और `pod 'PushwooshXCFramework'` लाइन जोड़ें। फिर, टर्मिनल में `pod install` कमांड चलाएं।

#### प्रश्न: पुश नोटिफिकेशन सक्षम करने के लिए मुझे अपने प्रोजेक्ट में कौन सी कैपेबिलिटीज़ जोड़ने की आवश्यकता है?
अपने प्रोजेक्ट सेटिंग्स के Signing & Capabilities सेक्शन में, आपको `Push Notifications` और `Background Modes` कैपेबिलिटीज़ जोड़ने की आवश्यकता है। `Background Modes` जोड़ते समय, सुनिश्चित करें कि आप `Remote notifications` के लिए बॉक्स को चेक करें।

#### प्रश्न: टाइम सेंसिटिव नोटिफिकेशन के लिए कौन सी अतिरिक्त कैपेबिलिटी की आवश्यकता है?
यदि आप टाइम सेंसिटिव नोटिफिकेशन (iOS 15+) का उपयोग करना चाहते हैं, तो आपको `Time Sensitive Notifications` कैपेबिलिटी भी जोड़नी होगी।

#### प्रश्न: मुझे Pushwoosh इनिशियलाइज़ेशन कोड कहाँ जोड़ना होगा?
इनिशियलाइज़ेशन कोड को आपके `AppDelegate` क्लास में जोड़ा जाना चाहिए।

#### प्रश्न: मुझे SwiftUI के AppDelegate में कौन सा इनिशियलाइज़ेशन कोड जोड़ना चाहिए?
कृपया [SwiftUI प्रोजेक्ट में Pushwoosh को इंटीग्रेट करने के लिए दिए गए स्विफ्ट कोड उदाहरण](/hi/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate) को देखें।

#### प्रश्न: मुझे एक मानक स्विफ्ट AppDelegate में कौन सा इनिशियलाइज़ेशन कोड जोड़ना चाहिए?
कृपया [एक मानक स्विफ्ट प्रोजेक्ट में Pushwoosh को इंटीग्रेट करने के लिए दिए गए स्विफ्ट कोड उदाहरण](/hi/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate) को देखें।

#### प्रश्न: मुझे एक Objective-C AppDelegate में कौन सा इनिशियलाइज़ेशन कोड जोड़ना चाहिए?
कृपया [एक Objective-C प्रोजेक्ट में Pushwoosh को इंटीग्रेट करने के लिए दिए गए Objective-C कोड उदाहरण](/hi/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate) को देखें।

#### प्रश्न: मुझे अपनी Info.plist फ़ाइल में कौन सी कीज़ जोड़ने की आवश्यकता है?
आपको अपने ऐप की `Info.plist` फ़ाइल में `Pushwoosh_APPID` की को अपने एप्लिकेशन कोड पर सेट करना होगा और `PW_API_TOKEN` की को अपने API टोकन पर सेट करना होगा।

#### प्रश्न: मैसेज डिलीवरी ट्रैकिंग का उद्देश्य क्या है?
Pushwoosh नोटिफिकेशन सर्विस एक्सटेंशन का उपयोग करके पुश नोटिफिकेशन के लिए डिलीवरी इवेंट्स को ट्रैक करने का समर्थन करता है।

#### प्रश्न: मैं अपने प्रोजेक्ट में नोटिफिकेशन सर्विस एक्सटेंशन कैसे जोड़ूं?
Xcode में, **File** > **New** > **Target...** पर जाएं, **Notification Service Extension** चुनें, और **Next** दबाएं। एक टारगेट नाम दर्ज करें और **Finish** दबाएं। जब सक्रिय करने के लिए कहा जाए, तो **Cancel** दबाएं।

#### प्रश्न: मैं नोटिफिकेशन सर्विस एक्सटेंशन में Pushwoosh SDK कैसे जोड़ूं?
अपने नोटिफिकेशन सर्विस एक्सटेंशन की मुख्य `.swift` या `.m` फ़ाइल में [दिए गए स्विफ्ट या Objective-C कोड स्निपेट](/hi/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#add-pushwoosh-sdk-to-notification-service-extension) को जोड़ें। यह कोड नोटिफिकेशन अनुरोध को संभालने के लिए `PWNotificationExtensionManager` का उपयोग करता है।

#### प्रश्न: ऐप ग्रुप्स का उद्देश्य क्या है?
ऐप ग्रुप्स कैपेबिलिटी की आवश्यकता नोटिफिकेशन सर्विस एक्सटेंशन को मुख्य एप्लिकेशन के साथ संवाद करने की अनुमति देने के लिए होती है।

#### प्रश्न: मैं अपने मुख्य टारगेट और नोटिफिकेशन सर्विस एक्सटेंशन के लिए ऐप ग्रुप्स कैसे सक्षम करूं?
दोनों टारगेट्स के लिए, **Signing & Capabilities** पर जाएं, **App Groups** कैपेबिलिटी जोड़ें, और + बटन दबाकर एक नया ग्रुप बनाएं। सुनिश्चित करें कि ग्रुप का नाम `group.` से शुरू हो और दोनों टारगेट्स के लिए एक ही ग्रुप नाम का उपयोग करें।

#### प्रश्न: मुझे ऐप ग्रुप्स के लिए अपने मुख्य टारगेट की Info.plist में कौन सी कीज़ जोड़ने की आवश्यकता है?
अपने मुख्य टारगेट की `Info.plist` में, `PW_APP_GROUPS_NAME` की जोड़ें और इसका मान अपने ऐप ग्रुप्स ग्रुप के नाम पर सेट करें।

#### प्रश्न: मुझे अपने नोटिफिकेशन सर्विस एक्सटेंशन की Info.plist में कौन सी कीज़ जोड़ने की आवश्यकता है?
अपने नोटिफिकेशन सर्विस एक्सटेंशन की `Info.plist` में, `PW_APP_GROUPS_NAME` की (अपने ऐप ग्रुप्स नाम पर सेट) और `Pushwoosh_APPID` की (अपने एप्लिकेशन कोड पर सेट) जोड़ें।

#### प्रश्न: मैं Pushwoosh इंटीग्रेशन को कैसे सत्यापित करूं?
अपने प्रोजेक्ट को बनाने और चलाने के बाद, Pushwoosh कंट्रोल पैनल पर जाएं और अपने एप्लिकेशन को एक पुश नोटिफिकेशन भेजें। आपको अपने डिवाइस पर नोटिफिकेशन दिखाई देना चाहिए।

#### प्रश्न: Pushwoosh SDK में पुश नोटिफिकेशन को संभालने के लिए दो मुख्य कॉलबैक कौन से हैं?
दो मुख्य कॉलबैक `onMessageReceived` और `onMessageOpened` हैं।

#### प्रश्न: `onMessageReceived` कॉलबैक कब लागू होता है?
`onMessageReceived` मेथड तब कॉल किया जाता है जब एप्लिकेशन द्वारा एक पुश नोटिफिकेशन प्राप्त होता है।

#### प्रश्न: `onMessageOpened` कॉलबैक कब लागू होता है?
`onMessageOpened` मेथड तब कॉल किया जाता है जब उपयोगकर्ता एक पुश नोटिफिकेशन के साथ इंटरैक्ट करता है और उसे खोलता है।

#### प्रश्न: मैं प्राप्त या खोले गए पुश नोटिफिकेशन के पेलोड तक कैसे पहुंच सकता हूँ?
एक `PWMessage` ऑब्जेक्ट का पेलोड (`onMessageReceived` और `onMessageOpened` कॉलबैक को पास किया गया) उसकी `payload` प्रॉपर्टी के माध्यम से एक्सेस किया जा सकता है।

#### प्रश्न: मैं Pushwoosh में एक यूजर आईडी कैसे सेट कर सकता हूँ?
`Pushwoosh.sharedInstance()` ऑब्जेक्ट के `setUserId(_:)` मेथड का उपयोग करें, उपयोगकर्ता की आईडी को एक आर्ग्यूमेंट के रूप में पास करें।

#### प्रश्न: मैं Pushwoosh में उपयोगकर्ता का ईमेल पता कैसे सेट कर सकता हूँ?
`Pushwoosh.sharedInstance()` ऑब्जेक्ट के `setEmail(_:)` मेथड का उपयोग करें, उपयोगकर्ता का ईमेल प्रदान करें।

#### मैं Pushwoosh में टैग के रूप में अतिरिक्त उपयोगकर्ता जानकारी कैसे सेट कर सकता हूँ?
`Pushwoosh.sharedInstance()` ऑब्जेक्ट के `setTags(_:)` मेथड का उपयोग करें, एक डिक्शनरी पास करें जहां कीज़ टैग नाम हैं और वैल्यूज़ संबंधित टैग वैल्यूज़ हैं।

#### मैं अतिरिक्त विशेषताओं के साथ एक उपयोगकर्ता ईवेंट को कैसे ट्रैक कर सकता हूँ?**
`PWInAppManager.shared()` के `postEvent(_:withAttributes:)` मेथड का उपयोग करें, ईवेंट का नाम (जैसे, `"login"`) और विशेषताओं की एक डिक्शनरी (जैसे, `"name"`, `"last_login"`) प्रदान करें।

#### प्रश्न: मैं उत्पाद विवरण के साथ उपयोगकर्ता खरीद ईवेंट को कैसे ट्रैक कर सकता हूँ?
`PWInAppManager.shared()` के `postEvent(_:withAttributes:)` मेथड का उपयोग करें, ईवेंट नाम `"purchase"` और उत्पाद विवरण जैसे `"product_id"`, `"product_name"`, `"price"`, और `"quantity"` वाली एक डिक्शनरी के साथ।

#### प्रश्न: मैं रिच मीडिया प्रस्तुति को संभालने के लिए एक डेलीगेट कैसे सेट करूं?
अपने व्यू कंट्रोलर या किसी अन्य उपयुक्त क्लास में, `PWRichMediaPresentingDelegate` प्रोटोकॉल का पालन करें और `PWRichMediaManager.shared()` की `delegate` प्रॉपर्टी को अपने अनुरूप इंस्टेंस पर सेट करें।

#### प्रश्न: मैं रिच मीडिया की प्रस्तुति शैली को कैसे कॉन्फ़िगर कर सकता हूँ?
`PWModalWindowConfiguration.shared()` ऑब्जेक्ट का उपयोग करके मोडल विंडो की स्थिति और `configureModalWindow(with:present:dismiss:)` मेथड का उपयोग करके प्रेजेंट/डिसमिस एनिमेशन जैसी प्रॉपर्टीज़ को कॉन्फ़िगर करें।

#### प्रश्न: मैं रिच मीडिया डेलीगेट मेथड्स में कौन सी जानकारी एक्सेस कर सकता हूँ?**
डेलीगेट मेथड्स `PWRichMedia` ऑब्जेक्ट तक पहुंच प्रदान करते हैं, जिसमें रिच मीडिया सामग्री के बारे में जानकारी होती है, जिसमें उसका `pushPayload` भी शामिल है। `presentingDidFailForRichMedia:withError:` मेथड विफलता का वर्णन करने वाला एक `Error` ऑब्जेक्ट भी प्रदान करता है।


### समस्या निवारण

<Aside type="caution">
लोड बैलेंसिंग उद्देश्यों के लिए हमें आपके एप्लिकेशन में API एंडपॉइंट्स को बदलने की आवश्यकता हो सकती है। यह स्वचालित रूप से होता है और हमारे SDK द्वारा संभाला जाता है। **कृपया सुनिश्चित करें कि आपके ऐप में कुछ भी \*.pushwoosh.com वाले किसी भी URL तक पहुंच को ब्लॉक नहीं कर रहा है।**
</Aside>

<Aside type="note">
#### यदि आप फ़ायरवॉल के पीछे हैं या आपका वाईफ़ाई राउटर फ़ायरवॉल के रूप में कार्य करता है

यदि आपका डिवाइस वाईफाई के माध्यम से इंटरनेट से जुड़ा है, और संदेश डिवाइस तक नहीं पहुंच रहे हैं, तो कृपया **सुनिश्चित करें कि APNs पोर्ट आपके फ़ायरवॉल द्वारा ब्लॉक नहीं किए गए हैं।**\
पुश प्रदाता, iOS डिवाइस और मैक कंप्यूटर अक्सर फ़ायरवॉल के पीछे होते हैं। नोटिफिकेशन भेजने के लिए, आपको पोर्ट 2195 पर इनबाउंड और आउटबाउंड TCP पैकेट की अनुमति देनी होगी। **वाई-फाई पर पुश सेवा से जुड़ने वाले डिवाइस और कंप्यूटर को पोर्ट 5223 पर इनबाउंड और आउटबाउंड TCP पैकेट की अनुमति देनी होगी।**\
पुश सेवा के लिए IP एड्रेस रेंज बदल सकती है; प्रदाताओं से अपेक्षा की जाती है कि वे IP एड्रेस के बजाय होस्टनाम से कनेक्ट हों। पुश सेवा एक लोड बैलेंसिंग स्कीम का उपयोग करती है जो एक ही होस्टनाम के लिए एक अलग IP एड्रेस देती है। हालांकि, पूरा 17.0.0.0/8 एड्रेस ब्लॉक Apple को सौंपा गया है, इसलिए आप अपने फ़ायरवॉल नियमों में उस रेंज को निर्दिष्ट कर सकते हैं।
</Aside>

#### प्रश्न: "Your provisioning profile does not have APS entry" त्रुटि

यदि आपको "Your provisioning profile does not have APS entry." त्रुटि संदेश दिखाई देता है, तो सुनिश्चित करें कि आपका प्रोविजनिंग प्रोफाइल पुश संगत है और इसमें `production` या `development` मान के साथ `aps-environment` स्ट्रिंग है। जांचने का सबसे आसान तरीका यह है कि मोबाइल प्रोविजनिंग प्रोफाइल को किसी भी टेक्स्ट एडिटर में खोलें और `aps-environment` स्ट्रिंग को देखें। यह वहां होना चाहिए।

यदि यह है, और आपको त्रुटि मिलती रहती है, तो इसका मतलब है कि XCode अभी भी एक "नॉन पुश-कम्पैटिबल" प्रोफाइल चुन रहा है। कृपया सुनिश्चित करें कि आप सही वाले के साथ साइन करते हैं - कभी-कभी यदि आपके पास एक ही ऐप आईडी के लिए दो प्रोफाइल हैं तो XCode चीजों को गड़बड़ कर देता है और पुराने वाले के साथ साइन करता है।

अनुशंसित कदम हैं:

1. सभी XCode प्रोफाइल [हटाएं](https://stackoverflow.com/questions/18923095/delete-provisioning-profile-from-xcode-5);
2. एक और केवल नया प्रोफाइल जोड़ें;
3. ऐप को फिर से बनाएं।

#### प्रश्न: iOS पुश टोकन और hwid कैसा दिखता है?

iOS डिवाइस पुश टोकन 64 हेक्साडेसिमल प्रतीकों वाली स्ट्रिंग्स हैं। पुश टोकन उदाहरण:\
`03df25c845d460bcdad7802d2vf6fc1dfde97283bf75cc993eb6dca835ea2e2f`\
सुनिश्चित करें कि आपके API अनुरोधों में विशिष्ट उपकरणों को लक्षित करते समय आप जिन iOS पुश टोकन का उपयोग करते हैं, वे **लोअर केस** में हैं।

Pushwoosh डिवाइस HWID के रूप में IDFV का उपयोग करता है। ध्यान दें कि यदि उपयोगकर्ता किसी विशिष्ट विक्रेता से सभी ऐप्स को फिर से इंस्टॉल करता है तो यह बदल सकता है।

`CBAF8ED1-17FB-49A3-73BD-DC79B63AEF93`

#### प्रश्न: जब मेरा ऐप चल रहा हो तो मैं बैनर को चालू और बंद कैसे करूं?

डिफ़ॉल्ट रूप से हमारा नवीनतम iOS SDK नोटिफिकेशन बैनर प्रदर्शित करता है जब ऐप फोरग्राउंड में चल रहा होता है।\
आप Info.plist में निम्नलिखित फ़्लैग्स को बदलकर इस व्यवहार को नियंत्रित कर सकते हैं:

फ़्लैग `Pushwoosh_ALERT_TYPE` – स्ट्रिंग प्रकार, मान हैं:

* `BANNER` – डिफ़ॉल्ट मान, इन-ऐप अलर्ट बैनर प्रदर्शित करता है
* `ALERT` – अलर्ट नोटिफिकेशन
* `NONE` – जब ऐप फोरग्राउंड में हो तो नोटिफिकेशन न दिखाएं

#### प्रश्न: मैं टेस्ट डिवाइसेस में उपयोग करने के लिए अपना iOS डिवाइस पुश टोकन कैसे प्राप्त करूं?

अपना iOS डिवाइस पुश टोकन प्राप्त करने के लिए,

1. Xcode => Devices & Simulators खोलें;
2. टेस्ट डिवाइस को अपने कंप्यूटर से कनेक्ट करें;
3. बाईं ओर उपकरणों की सूची में अपने कनेक्टेड डिवाइस का चयन करें;
4. Open Console बटन पर क्लिक करें।

<img src="/ios-push-notifications-ios-faq-1.webp" alt=""/>

जिस एप्लिकेशन के लिए आपको डिवाइस पुश टोकन चाहिए, उसे लॉन्च करें, और "Registered for push notifications" लाइन में अपने 64 हेक्साडेसिमल वर्णों वाले डिवाइस पुश टोकन का पता लगाएं:

<img src="/ios-push-notifications-ios-faq-2.webp" alt=""/>

#### प्रश्न: जब मैं अपने ऐप को अनइंस्टॉल करता हूँ और थोड़े समय में इसे फिर से इंस्टॉल करता हूँ तो बैज क्यों नहीं हटाए जाते हैं?

यह एक अपेक्षित व्यवहार है - बैज iOS द्वारा ही संभाले जाते हैं और उनके मान एप्लिकेशन प्राथमिकताओं में संग्रहीत होते हैं, जो आपके ऐप को अनइंस्टॉल करने पर तुरंत नहीं हटाए जाते हैं। तत्काल पुनः स्थापना के मामले में एक बैज मान कुछ समय के लिए वहां रहता है, जिसके परिणामस्वरूप ऐप को फिर से इंस्टॉल करने के बाद वही बैज दिखाए जाते हैं।