# iOS पुश कस्टमाइज़ेशन

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

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

नोटिफिकेशन कंटेंट ऐप एक्सटेंशन एक व्यू कंट्रोलर को मैनेज करता है जो आपके कस्टम नोटिफिकेशन इंटरफ़ेस को प्रदर्शित करता है। यह व्यू कंट्रोलर आपके नोटिफिकेशन के लिए डिफ़ॉल्ट सिस्टम इंटरफ़ेस को पूरक या प्रतिस्थापित कर सकता है। आप अपने व्यू कंट्रोलर का उपयोग कर सकते हैं:

* अलर्ट के शीर्षक, उपशीर्षक और बॉडी टेक्स्ट सहित आइटमों के प्लेसमेंट को कस्टमाइज़ करें।
* इंटरफ़ेस तत्वों के लिए अलग-अलग फ़ॉन्ट या स्टाइलिंग को प्रतिस्थापित करें।
* ऐप-विशिष्ट डेटा प्रदर्शित करें—उदाहरण के लिए, नोटिफिकेशन के पेलोड की ऐप-विशिष्ट कुंजियों में संग्रहीत डेटा।
* कस्टम चित्र या ब्रांडिंग शामिल करें।

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

<Aside type="caution">
नोटिफिकेशन कंटेंट ऐप एक्सटेंशन केवल iOS ऐप्स में समर्थित हैं।
</Aside>

### अपने प्रोजेक्ट में नोटिफिकेशन कंटेंट ऐप एक्सटेंशन जोड़ें

अपने iOS ऐप में एक नोटिफिकेशन कंटेंट ऐप एक्सटेंशन जोड़ने के लिए:

1. Xcode में **File** > **New** > **Target** चुनें।
2. iOS एप्लीकेशन एक्सटेंशन से **Notification Content Extension** चुनें।
3. **Next** पर क्लिक करें।
4. अपने ऐप एक्सटेंशन के लिए एक **नाम** प्रदान करें।
5. **Finish** पर क्लिक करें।

### अपने व्यू कंट्रोलर में व्यू जोड़ें

Xcode द्वारा प्रदान किए गए टेम्पलेट में आपके कॉन्फ़िगर करने के लिए एक स्टोरीबोर्ड और एक व्यू कंट्रोलर शामिल है। अपने व्यू कंट्रोलर में व्यू जोड़कर अपना कस्टम नोटिफिकेशन इंटरफ़ेस बनाएं। उदाहरण के लिए, नोटिफिकेशन के शीर्षक, उपशीर्षक और बॉडी टेक्स्ट को प्रदर्शित करने के लिए लेबल का उपयोग करें। आप इमेज व्यू और व्यू भी जोड़ सकते हैं जो गैर-इंटरैक्टिव सामग्री प्रदर्शित करते हैं। आपको अपने व्यू के लिए कोई प्रारंभिक सामग्री प्रदान करने की आवश्यकता नहीं है।

आप iOS 12 और बाद के संस्करणों में इंटरैक्टिव कंट्रोल (उदाहरण के लिए, बटन या स्विच) जोड़ सकते हैं। अधिक जानकारी के लिए, सपोर्ट इंटरैक्टिव कंट्रोल देखें।

<Aside type="caution">
अपने ऐप एक्सटेंशन या स्टोरीबोर्ड फ़ाइल में अतिरिक्त व्यू कंट्रोलर न जोड़ें। आपके ऐप एक्सटेंशन में ठीक एक व्यू कंट्रोलर होना चाहिए।
</Aside>

### अपने व्यू कंट्रोलर को कॉन्फ़िगर करें

अपने लेबल और अन्य व्यू को अपडेट करने के लिए अपने व्यू कंट्रोलर के `didReceive(_:)` मेथड का उपयोग करें। नोटिफिकेशन पेलोड में आपके व्यू कंट्रोलर को कॉन्फ़िगर करते समय उपयोग करने के लिए डेटा होता है। आप अपने ऐप एक्सटेंशन की अन्य फाइलों से भी डेटा का उपयोग कर सकते हैं। [लिस्टिंग 1](https://developer.apple.com/documentation/usernotificationsui/customizing_the_appearance_of_notifications#2950663) इस मेथड का एक संस्करण दिखाता है जो नोटिफिकेशन पेलोड से शीर्षक और बॉडी टेक्स्ट को पुनः प्राप्त करता है और स्ट्रिंग्स को दो [`UILabel`](https://developer.apple.com/documentation/uikit/uilabel) कंट्रोल को असाइन करता है, जो व्यू कंट्रोलर पर आउटलेट के रूप में संग्रहीत होते हैं।

<Tabs>
<TabItem label="Swift">
```swift
// Configuring the notification interface at runtime

func didReceive(_ notification: UNNotification) {
   self.bodyText?.text = notification.request.content.body
   self.headlineText?.text = notification.request.content.title
}
```
</TabItem>
</Tabs>

यदि आपका व्यू कंट्रोलर पहले से ही दिखाई दे रहा है और दूसरा नोटिफिकेशन आता है, तो सिस्टम नए नोटिफिकेशन पेलोड के साथ `didReceive(_:)` मेथड को फिर से कॉल करता है।

### इंटरैक्टिव कंट्रोल का समर्थन करें
iOS 12 और बाद के संस्करणों में आप अपने कस्टम नोटिफिकेशन में उपयोगकर्ता इंटरैक्शन को सक्षम कर सकते हैं। यह आपको अपने कस्टम इंटरफ़ेस में बटन और स्विच जैसे इंटरैक्टिव कंट्रोल जोड़ने की सुविधा देता है।

उपयोगकर्ता इंटरैक्शन को सक्षम करने के लिए:

1. अपने नोटिफिकेशन कंटेंट एक्सटेंशन की `info.plist` फ़ाइल खोलें।
2. अपने एक्सटेंशन विशेषताओं में `UNNotificationExtensionUserInteractionEnabled` कुंजी जोड़ें। इसे एक बूलियन मान दें, जिसे `YES` पर सेट किया गया हो।

<img src="/ios-push-notifications-ios-push-customization-2.webp" alt="नोटिफिकेशन एक्सटेंशन की info.plist फ़ाइल में उपयोगकर्ता इंटरैक्शन को सक्षम करना"/>

### अपने पुश नोटिफिकेशन एक्सटेंशन में Apple Pay जोड़ें (उदाहरण व्यू)
<br />
<img
  src="/ios-push-notifications-ios-push-customization-3.webp"
  alt=""
  style={{ display: "block", margin: "0 auto", maxWidth: "60%", height: "auto" }}
  width="400"
/>

### पुश नोटिफिकेशन एक्सटेंशन में Apple Pay बटन के साथ कोड ब्लॉक उदाहरण

<Tabs>
<TabItem label="Swift">
```swift
import UIKit
import Foundation
import UserNotifications
import UserNotificationsUI
import PassKit

class NotificationViewController: UIViewController, UNNotificationContentExtension, PKPaymentAuthorizationViewControllerDelegate {


    func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        controller.dismiss(animated: true, completion: nil)
    }


    @IBOutlet weak var buyWithApplePayButton: UIButton!
    @IBOutlet weak var containerView: UIView!
    @IBOutlet weak var payInAppButton: UIButton!
    @IBOutlet weak var segmentCustom: UISegmentedControl!

    private var amount: NSDecimalNumber = 0;

    override func viewDidLoad() {
        super.viewDidLoad()

        buttonCustomisation()

        amount = NSDecimalNumber.init(value: 5)
    }

    func buttonCustomisation () {
        self.buyWithApplePayButton.layer.masksToBounds = true
        self.buyWithApplePayButton.layer.cornerRadius = 10
        self.payInAppButton.layer.masksToBounds = true
        self.payInAppButton.layer.cornerRadius = 10
        self.containerView.layer.borderColor = UIColor.gray.cgColor
        self.containerView.layer.borderWidth = 0.7
        self.containerView.layer.masksToBounds = true
        self.containerView.layer.cornerRadius = 20
    }

    func didReceive(_ notification: UNNotification) {
        // Configuring the notification interface at runtime
    }

    @IBAction func buyWithApplePayAction(_ sender: Any) {
        let request = PKPaymentRequest()
        request.merchantIdentifier = "merchant.com.sample.ApplePayAction"
        request.supportedNetworks = [PKPaymentNetwork.visa, PKPaymentNetwork.masterCard, PKPaymentNetwork.amex]
        request.merchantCapabilities = PKMerchantCapability.capability3DS
        request.countryCode = "US"
        request.currencyCode = "USD"

        request.paymentSummaryItems = [
            PKPaymentSummaryItem(label: "Some Product", amount: amount)
        ]

        let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request)
        applePayController?.delegate = self
        self.present(applePayController!, animated: true, completion: nil)
    }

    @IBAction func payInAppButtonAction(_ sender: Any) {
        print("pay in app button tapped")
    }

    @IBAction func segmentAction(_ sender: Any) {
        switch segmentCustom.selectedSegmentIndex {
        case 0:
            amount = NSDecimalNumber.init(value: 5)
            break
        case 1:
            amount = NSDecimalNumber.init(value: 10)
            break
        case 2:
            amount = NSDecimalNumber.init(value: 20)
            break
        default:
            amount = NSDecimalNumber.init(value: 5)
            break
        }
    }
}
```
</TabItem>
</Tabs>