تخصيص إشعارات iOS
عندما يتلقى جهاز iOS إشعارًا يحتوي على تنبيه، يعرض النظام محتويات التنبيه على مرحلتين. في البداية، يعرض لافتة مختصرة تحتوي على العنوان والعنوان الفرعي وسطرين إلى أربعة أسطر من نص الرسالة من الإشعار. إذا ضغط المستخدم على اللافتة المختصرة، يعرض iOS واجهة الإشعار الكاملة، بما في ذلك أي إجراءات متعلقة بالإشعار. يوفر النظام واجهة اللافتة المختصرة، ولكن يمكنك تخصيص الواجهة الكاملة باستخدام ملحق تطبيق محتوى الإشعار.

يدير ملحق تطبيق محتوى الإشعار وحدة تحكم عرض (view controller) تعرض واجهة الإشعار المخصصة الخاصة بك. يمكن لوحدة تحكم العرض هذه أن تكمل أو تحل محل واجهة النظام الافتراضية لإشعاراتك. يمكنك استخدام وحدة تحكم العرض الخاصة بك من أجل:
- تخصيص موضع العناصر، بما في ذلك عنوان التنبيه والعنوان الفرعي ونص الرسالة.
- استبدال خطوط أو أنماط مختلفة لعناصر الواجهة.
- عرض بيانات خاصة بالتطبيق — على سبيل المثال، البيانات المخزنة في مفاتيح خاصة بالتطبيق في حمولة الإشعار.
- تضمين صور مخصصة أو علامات تجارية.
يجب أن يقوم ملحق التطبيق الخاص بك بتكوين وحدة تحكم العرض الخاصة به باستخدام البيانات المتاحة على الفور، مثل محتويات الإشعار والملفات الموجودة في حزمة ملحق التطبيق الخاص بك. إذا كنت تستخدم مجموعة تطبيقات (app group) لمشاركة البيانات بين تطبيقك وملحق التطبيق الخاص بك، فيمكنك أيضًا استخدام أي ملفات موجودة في مجموعة التطبيقات. لضمان تسليم إشعاراتك في الوقت المناسب، قم بتكوين طرق العرض بأسرع ما يمكن. لا تقم بأي مهام طويلة الأمد، مثل محاولة استرداد البيانات عبر الشبكة.
إضافة ملحق تطبيق محتوى الإشعار إلى مشروعك
Anchor link toلإضافة ملحق تطبيق محتوى الإشعار إلى تطبيق iOS الخاص بك:
- اختر File > New > Target في Xcode.
- حدد Notification Content Extension من iOS Application Extension.
- انقر على Next.
- قدم اسمًا لملحق التطبيق الخاص بك.
- انقر على Finish.
إضافة طرق عرض إلى view controller الخاص بك
Anchor link toيتضمن القالب الذي يوفره Xcode لوحة قصة (storyboard) ووحدة تحكم عرض (view controller) لتكوينها. قم ببناء واجهة الإشعار المخصصة الخاصة بك عن طريق إضافة طرق عرض إلى وحدة تحكم العرض الخاصة بك. على سبيل المثال، استخدم التسميات لعرض العنوان والعنوان الفرعي ونص الرسالة للإشعار. يمكنك أيضًا إضافة طرق عرض الصور وطرق العرض التي تعرض محتوى غير تفاعلي. لا تحتاج إلى توفير أي محتوى أولي لطرق العرض الخاصة بك.
يمكنك إضافة عناصر تحكم تفاعلية (على سبيل المثال، أزرار أو مفاتيح) في iOS 12 والإصدارات الأحدث. لمزيد من المعلومات، راجع دعم عناصر التحكم التفاعلية.
تكوين view controller الخاص بك
Anchor link toاستخدم طريقة didReceive(_:) لوحدة تحكم العرض الخاصة بك لتحديث تسمياتها وطرق العرض الأخرى. تحتوي حمولة الإشعار على البيانات التي يجب استخدامها عند تكوين وحدة تحكم العرض الخاصة بك. يمكنك أيضًا استخدام بيانات من الملفات الأخرى لملحق التطبيق الخاص بك. القائمة 1 تعرض إصدارًا من هذه الطريقة يسترد العنوان ونص الرسالة من حمولة الإشعار ويعين السلاسل إلى عنصري تحكم UILabel، والتي يتم تخزينها كمخارج في وحدة تحكم العرض.
// Configuring the notification interface at runtime
func didReceive(_ notification: UNNotification) { self.bodyText?.text = notification.request.content.body self.headlineText?.text = notification.request.content.title}إذا وصل إشعار ثانٍ عندما تكون وحدة تحكم العرض الخاصة بك مرئية بالفعل، فإن النظام يستدعي طريقة didReceive(_:) مرة أخرى مع حمولة الإشعار الجديدة.
دعم عناصر التحكم التفاعلية
Anchor link toفي iOS 12 والإصدارات الأحدث، يمكنك تمكين تفاعلات المستخدم في إشعاراتك المخصصة. يتيح لك ذلك إضافة عناصر تحكم تفاعلية، مثل الأزرار والمفاتيح إلى واجهتك المخصصة.
لتمكين تفاعلات المستخدم:
- افتح ملف
info.plistالخاص بملحق محتوى الإشعار. - أضف مفتاح
UNNotificationExtensionUserInteractionEnabledإلى سمات الملحق الخاص بك. أعطه قيمة منطقية، معينة إلىYES.

إضافة Apple Pay إلى ملحق إشعار الدفع الخاص بك (مثال عرض)
Anchor link to
مثال على كتلة التعليمات البرمجية مع زر Apple Pay في ملحق إشعار الدفع
Anchor link toimport UIKitimport Foundationimport UserNotificationsimport UserNotificationsUIimport 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 } }}