كل ما تريد معرفته دائمًا عن الإشعارات في iOS

تنبيهات صغيرة جدا ..؟

الإخطارات هي وسيلة لإعلام المستخدمين عندما تصبح البيانات الجديدة متاحة لتطبيقاتهم ، حتى عندما لا يكون التطبيق قيد التشغيل في المقدمة.

على سبيل المثال ، قد يُتيح تطبيق المراسلة للمستخدم معرفة وقت وصول رسالة جديدة ، وقد يُعلم تطبيق التقويم المستخدم بموعد قادم.

مع إصدار iOS-10 ، قدمت Apple أطر عمل جديدة لدعم الإشعارات ، سواء كانت محلية أو بعيدة.ركز هذا الإصدار على الإشعارات المخصصة .

دون إضاعة أي وقت ، دعنا ننتقل بسرعة إلى التفاصيل.

أنواع الإخطارات

يمكننا تصنيف الإخطارات على نطاق واسع إلى فئتين:

  • الإخطارات المحلية - يقوم التطبيق بتكوين تفاصيل الإشعار محليًا ويمرر تلك التفاصيل إلى النظام. ثم يتعامل النظام مع تسليم الإشعار عندما لا يكون التطبيق في المقدمة.
  • الإخطارات عن بُعد - يمكنك استخدام أحد خوادم شركتك لإرسال البيانات إلى أجهزة المستخدمين عبر خدمة إشعارات Apple Push (APNs).

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

ما الجديد في iOS-10 للإشعارات؟

مع إصدار iOS-10 ، قدمت Apple إطارين جديدين للتعامل مع الإشعارات:

  • إطار إخطارات المستخدم - يدير كل من الإشعارات المحلية والبعيدة.
  • User Notifications UI Framework - يخصص مظهر واجهة إعلامات النظام.

سنستخدم هذين الإطارين وبعض واجهات برمجة التطبيقات الخاصة بالنظام الأساسي لتكوين إشعاراتنا.

إلى جانب الأطر ، امتداد تطبيق خدمة الإعلامتم تقديمه أيضًا والذي يسمح لك بتعديل محتوى الإشعارات عن بُعد قبل تسليمها.

تسمح Apple أيضًا بتخصيص واجهة مستخدم الإشعارات من خلال امتداد محتوى الإخطار .

هل هناك الكثير لنتذكره؟ نعم ... بالتأكيد هو كذلك. لكن لا تقلق. سنرى كل شيء خطوة بخطوة مع الكود ذي الصلة. خذ الموضوع ببساطة. ؟

أول الأشياء أولاً - قم بتكوينها!

طلب الإذن

لجعل تطبيقنا يخطر المستخدم بأي شيء ، نحتاج إلى معرفة ما إذا كان الشخص الذي يستخدمه يريد ذلك بالفعل في المقام الأول. ربما لا يحبون رنين هواتفهم وعرض التنبيهات طوال الوقت؟ أو ربما يريدون بالفعل التحديثات ، لكن ليس هذا الصوت المزعج ... ناحه! ☠️

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

تحتاج إلى كتابة هذا الرمز في AppDelegate’sالطريقة - application:didFinishLaunchingWithOptions:قبل العودة منه.

يرجى ملاحظة ما يلي: نظرًا لأن النظام يحفظ استجابة المستخدم ، فإن استدعاءات requestAuthorization(options:completionHandler:)الأسلوب أثناء عمليات التشغيل اللاحقة لا تطالب المستخدم مرة أخرى.

إضافة الفئات والإجراءات - إخطارات قابلة للتنفيذ

يدعم إطار عمل إشعارات المستخدم إضافة فئات وإجراءات إلى الإخطارات.

الفئات - حدد أنواع الإشعارات التي يدعمها التطبيق وأبلغ النظام بكيفية تقديم الإخطار.

الإجراءات - يمكن أن تحتوي كل فئة على ما يصل إلى أربعة إجراءات مرتبطة بها. الإجراءات عبارة عن أزرار مخصصة بشكل أساسي ، والتي عند النقر عليها تجاهل واجهة الإشعارات وإعادة توجيه الإجراء المحدد إلى التطبيق للمعالجة الفورية.

حسنًا! وماذا يعني ذلك..؟؟؟ قد تساعدك بعض التعليمات البرمجية على فهم أفضل:

في الكود أعلاه ، أنشأنا ببساطة فئة باسم INVITATIONمع أربعة إجراءات مختلفة - remindLater ، استعرض ، تراجع ، وتعليق .

يتم تحديد الفئات والإجراءات بشكل فريد من خلال معرفاتها. عندما يتم تسليم إشعار بفئة ، يقدم النظام الإشعار إلى جانب جميع الإجراءات المرتبطة بهذه الفئة بمجرد أن يقوم المستخدم بتوسيعها. هذا ما سيبدو عليه:؟

حدد جميع الفئات والإجراءات أدناه مباشرةً حيث قمت بتكوين الإشعارات في application:didFinishLaunchingWithOptions:الطريقة.

قم بتضمين معرّف الفئة (مثل: دعوة) عند جدولة إشعارك سواء محليًا أو عن بُعد. سنرى كيفية القيام بذلك في القسم التالي.

جدولة الإخطارات المحلية

الآن بعد أن انتهينا من تكوين إشعاراتنا ، دعنا نرى كيفية جدولة واحدة بالفعل من داخل التطبيق .

تتطلب جدولة إشعار محلي ثلاث خطوات بسيطة فقط:

  1. تحضير المحتوى
  2. أضف مشغلًا - عندما يجب إطلاق الإشعار
  3. جدولة للتسليم

دعنا نتعامل مع الكود بسرعة ، حتى لا يتم الخلط بيننا وبين كل ما يحدث هنا. هههه ؟

في الكود أعلاه ، إلى جانب المحتوى الآخر ، قدمنا ​​أيضًا categoryIdentifierدعمًا للإشعارات القابلة للتنفيذ. في حالة عدم قيامنا بذلك ، سيعتمد النظام سلوكه الافتراضي.

هذا هو. هذا كل ما هو مطلوب. ونعم إنه يعمل بالتأكيد ... هاهاها.؟ جربها قبل المضي قدمًا. يمكنك تنزيل النموذج من هنا.

الرجاء ملاحظة ما يلي: تتصرف التطبيقات بشكل مختلف في الخلفية وحالة المقدمة كلما تم تسليم إشعار.

  1. التطبيق لا يعمل / التطبيق في الخلفية - يعرض النظام الإخطارات المحلية مباشرة للمستخدم. لا نحصل على أي رد في التطبيق لذلك.
  2. التطبيق في المقدمة - يمنح النظام التطبيق الفرصة للتعامل مع الإشعار داخليًا. يكتم النظام إخطارات التطبيقات الأمامية افتراضيًا .

عندما يكون التطبيق في المقدمة أثناء تسليم الإشعار ، نحصل على UNUserNotificationCenterDelegate'sطريقة رد الاتصال - userNotificationCenter(_:willPresent:withCompletionHandler:)حيث يمكنك تحديد ما إذا كنت تريد التعامل مع الإشعار بصمت أو تنبيه المستخدم بشأنه.

لا تنسى أن تتفق AppDelegateعلى UNUserNotificationCenterDelegateالبروتوكول ووضع على أنها مندوب UNUserNotificationCenterالكائن المشترك في application:didFinishLaunchingWithOptions:.

let center = UNUserNotificationCenter.current()
center.delegate = self

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

الاستجابة لإجراءات المستخدم

تكوين الإخطارات؟ ✔ جدولة الإخطارات؟ ✔

ماذا عن التنصت على إشعار أو أي إجراء مخصص في الإعلام؟ إلى أين ستقود؟ في كلتا الحالتين ، يخطر النظام التطبيق باختيار المستخدم.

عندما يقوم المستخدم بأي إجراء في الإشعار ، يتم إرسال الرد إلى UNUserNotificationCenterDelegate'sالطريقة - userNotificationCenter(_:didReceive:withCompletionHandler:)حيث يمكننا توفير معالجة محددة لكل إجراء.

يرجى ملاحظة: إذا كان التطبيق لا يعمل عند تلقي استجابة ، يقوم النظام بتشغيل التطبيق في الخلفية لمعالجة الاستجابة.

الإخطارات عن بعد

تعد الإشعارات الفورية أو الإخطارات عن بُعد ، بغض النظر عن ما نطلق عليه ، واحدة من أكثر التطبيقات استخدامًا مع الكثير والكثير من حالات الاستخدام.

سواء كانت وسائل التواصل الاجتماعي أو التقويم أو أي من تطبيقات المرافق ، يمكننا رؤيتها في كل مكان تقريبًا. من تطبيقات الأخبار التي تخطرنا بآخر محتوى ، إلى ميديوم نفسها التي تنبهنا بأحدث المقالات المنشورة.

هل تساءلت يومًا كيف فعلوا ذلك؟ الإخطارات المحلية ؟؟ يمكن أن يكون ... يفعل نفس الشيء - أليس كذلك؟ ربما يمكننا إجراء المزيد من التكوين في الجهاز المحلي نفسه وتشغيل ذلك؟

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

حسنًا ، ما رأيك في إرسال الإشعار من نقطة ما وإظهاره في مرحلة أخرى - هل سيجيب هذا على سؤالنا؟ نعم ، بالتأكيد ستفعل. ولكن كيف نفعل ذلك؟ الإخطارات عن بعد هو عليه.

هذا هو بالضبط ما يفعلونه. هذه هي الميزة التي حلت المشكلة الكبرى المتمثلة في "مواكبة التطورات".

المصطلح

  • APNs - حجر الزاوية في ميزة الإخطارات عن بعد. إنها خدمة سحابية تسمح لتطبيقات الجهات الخارجية المعتمدة المثبتة على أجهزة Apple بإرسال إشعارات من خادم بعيد إلى المستخدمين عبر اتصال آمن.
  • رمز الجهاز - رمز مميز خاص بالتطبيق فريد عالميًا ويحدد مجموعة واحدة من التطبيقات والجهاز. يتيح الاتصال بين المزود و APNs والجهاز.
  • الموفر - الخادم الذي يرسل بالفعل الإخطار عن بُعد بما في ذلك الرمز المميز للجهاز والمعلومات الأخرى إلى APNs.

ملاحظة مهمة : لا تقم أبدًا بتخزين الرموز المميزة للجهاز مؤقتًا في تطبيقك. بدلاً من ذلك ، احصل عليها من النظام عندما تحتاج إليها.

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

عندما تحاول جلب رمز مميز لجهاز ولكن لم يتغير ، تعود طريقة الجلب بسرعة.

يرجى ملاحظة ما يلي: تتطلب قدرة APNs على إرسال إشعارات عن بُعد إلى تطبيق غير قيد التشغيل أن يكون التطبيق قد تم تشغيله مرة واحدة على الأقل.

كيف يعمل في الواقع

يوجد أدناه شرح صغير وسريع لكيفية عمل جميع التقنيات المذكورة أعلاه معًا بشكل متزامن لإكمال سير عمل الإشعارات عن بُعد.

  1. تطبيقالمسجلين مع APNs
  2. ترسل APNs رمز الجهاز إلى الجهاز مع ثم ترسله إلى التطبيق
  3. يرسل التطبيق هذا الرمز المميز للجهاز إلى المزود
  4. يرسل الموفر إشعارات برمز الجهاز هذا إلى APNs والذي يرسله بعد ذلك إلى الجهاز الذي يرسله بعد ذلك إلى التطبيق .

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

تعامل معها في التطبيق

الآن بعد أن أدركنا ماهية الإشعارات عن بُعد والأشياء اللازمة لجعلها تعمل ، فلننتقل الآن إلى كيفية جعل تطبيقنا يدعمها. لأن لا شيء يحدث من تلقاء نفسه؟ نحن بحاجة إلى إجراء بعض التكوينات لهم للعمل.

لتتمكن من التعامل مع الإشعارات عن بُعد ، يجب على تطبيقنا:

  1. قم بتمكين الإشعارات عن بُعد في الإمكانات - بنقرة واحدة فقط ، وقد انتهيت من هذه الخطوة. في علامة التبويب " القدرات" في مشروع Xcode الخاص بنا ، قم بتمكين خيار دفع الإخطارات . تأكد من إضافة الإخطارات إلى معرف التطبيق الذي نستخدمه للمشروع.

2. قم بالتسجيل في خدمة Apple Push Notification (APNs) واستقبل رمز جهاز خاص بالتطبيق

طلب التسجيل في APNs سريع وسهل. ما عليك UIApplicationDelegate’sسوى إضافة الكود أدناه في الطريقة - application:didFinishLaunchingWithOptions:قبل العودة منه.

UIApplication.shared.registerForRemoteNotifications()

الآن هناك احتمالان: إما أن يتم تسجيلنا بنجاح أو تفشل العملية.

على نجاح عملية التسجيل، ابنس استراتيجية الحد يرسل جهاز التطبيق محددة رمزية إلى الجهاز في UIApplicationDelegate’sمن طريقة application:didRegisterForRemoteNotificationsWithDeviceToken:.

في حالة وجود خطأ ، نتلقى رد اتصال في UIApplicationDelegate’sالطريقة - application:didFailToRegisterForRemoteNotificationsWithError:.

3. إرسال رمز الجهاز إلى خادم مزود الإعلام

اعتبارًا من الآن ، تلقينا الرمز المميز للجهاز من APNs . الآن ، نحتاج إلى إرسال هذا الرمز المميز إلى مزودنا ، والذي سيستخدمه أثناء إرسال أي إشعارات إلى أجهزتنا.

نظرًا لأنه ليس لدينا مزود ، في الوقت الحالي يمكننا استخدام Easy APNs Provider لاختبار دفع الإشعارات. علاوة على ذلك ، سنرى كيف يمكننا بالضبط الاستفادة من هذه الأداة.

في الوقت الحالي ، ما عليك سوى تنزيله وتثبيته على جهاز Mac الخاص بك.

4. تنفيذ الدعم للتعامل مع الإخطارات الواردة عن بعد

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

ماذا الآن؟ ماذا سيحدث عندما يصل؟ كيف سيظهر على الجهاز؟ ماذا سيحدث عندما نضغط عليه؟ ماذا عن جميع الإجراءات التي قمنا بتكوينها مسبقًا؟ هل يمكننا الحصول عليها هنا؟

أسئلة كثيرة جدًا: حسنًا ، لا تقلق. سيكون لدينا إجابات لكل منهم واحدًا تلو الآخر.

ماذا سيحدث عندما يصل؟ سنحصل على رد في UIApplicationDelegate’sالطريقة-- application(_:didReceiveRemoteNotification:fetchCompletionHandler:). يخبر التطبيق بوصول إشعار عن بعد يشير إلى وجود بيانات سيتم جلبها.

كيف سيظهر على الجهاز؟ سيظهر مع واجهة الإخطار الافتراضية. إذا تم تكوين حمولة الإشعار مع الفئة ، فستظهر كإخطار قابل للتنفيذ مع جميع الإجراءات المرفقة بهذه الفئة. سنناقش الحمولة في القسم التالي.

ماذا سيحدث عندما نضغط عليه؟ مثل الإخطارات المحلية. UNUserNotificationCenterDelegate'sالطريقة - userNotificationCenter(_:didReceive:withCompletionHandler:)تسمى مع كائن الاستجابة.

تعامل معه على المزود

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

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

لذلك ، يتطلب دفع الإشعارات من المزود العناصر التالية:

  1. A رمز جهاز
  2. شهادة APNs - يمكننا الحصول عليها من حساب المطور
  3. الحمولة - أي بيانات مخصصة تريد إرسالها إلى تطبيقك ، وتتضمن معلومات حول كيفية قيام النظام بإخطار المستخدم. إنه ببساطة قاموس JSON مع بعض أزواج القيم الرئيسية. قد يساعدك الرسم التوضيحي أدناه على فهمه بشكل أفضل.

دعونا نرى كل ما في قاموس JSON هذا :

  1. apsقاموس- الأهم. يحتوي على مفاتيح معرّفة من قبل Apple ويستخدم لتحديد كيفية قيام النظام الذي يتلقى الإشعار بتنبيه المستخدم.
  2. إنذارقاموس- إنه عنصر لا يحتاج إلى شرح. يوفر محتوى الإخطار.
  3. فئة - للإخطارات القابلة للتنفيذ. ستكون جميع الإجراءات المرفقة بهذه الفئة متاحة في الإخطارات.
  4. المحتوى المتاح- لدعم إشعار تحديث الخلفية ، اضبط هذا المفتاح على 1.
  5. متغير المحتوى- لتمكين تعديل الإشعار من خلال ملحق تطبيق خدمة الإعلام ، قم بتعيينه على 1.

هنا يمكنك قراءة المزيد حول تخصيص الحمولة وفقًا لمتطلباتك. هذا إشارة إلى المفاتيح التي يمكننا إضافتها في قاموس aps

ملحق تطبيق خدمة الإعلام

في هذه المرحلة ، نعرف ما هي الإخطارات عن بعدهي ، كيف تعمل ، كل ما نحتاجه لجعلها تعمل - كل شيء تقريبًا! منذ أن جعلناهم يعملون على أكمل وجه.

السؤال الآن ، ماذا لو أردنا تعديل بعض المحتوى في الإشعار الوارد من المزود ، قبل تقديمه على الجهاز؟ ماذا لو احتوى الإشعار على بعض روابط الصور التي نحتاج إلى تنزيلها قبل تسليمها إلى المستخدم؟ هل يمكننا فعل ذلك بما نعرفه بالفعل؟ ليس لدينا وصول إلى المزود ... فكيف سنقوم بذلك؟

لا يمكننا في الواقع. لا يمكننا تغيير ما نحصل عليه ، لكن يمكننا بالتأكيد تغيير ما نقدمه.

هذا هو ما يدور حوله Notification Service App Extension - تعديل محتوى الإشعارات عن بُعد قبل التسليم. انها بسيطة كما تبدو لا يوجد رمز خيالي ، لا شيء. انها حقا بسيطة جدا.

إضافة تمديد خدمة الإعلام للمشروع

تتم إضافة الامتدادات في مشروع xcode كهدف. حدد ملف - جديد - هدف - تمديد خدمة الإعلام.

المتطلبات الأساسية

قبل أن نبدأ في تعديل المحتوى ، هناك بعض القيود على وقت السماح بتعديل المحتوى.

يمكن تعديل المحتوى فقط إذا:

  • تم تكوين الإعلام عن بعد لعرض تنبيه.
  • يتضمن قاموس aps الخاص بالإشعارات عن بُعد مفتاح المحتوى القابل للتغيير مع تعيين القيمة على 1.

لا يمكننا تعديل الإشعارات الصامتة أو تلك التي تشغل صوتًا فقط أو تضع شارة على أيقونة التطبيق.

لذلك ، لدعم أي تعديلات في محتوى الإشعارات ، يجب استيفاء هذه الشروط.

تعديل المحتوى

يحتوي هدف امتداد خدمة الإعلام الافتراضي الذي يوفره Xcode على فئة فرعية من UNNotificationServiceExtensionالفئة يمكننا تعديلها.

يحتوي على طريقتين:

  1. didReceive(_:withContentHandler:)- قم بإجراء أي تغييرات لازمة على الإشعار وإخطار النظام عند الانتهاء. هذه الطريقة لها فترة زمنية محدودة (حوالي 30 ثانية) لأداء مهمتها وتنفيذ كتلة الإكمال المقدمة.
  2. serviceExtensionTimeWillExpire()- يخبرنا أن التمديد على وشك الانتهاء. اعطنا فرصة أخيرة لإرسال تغييراتنا. إذا لم نقم بتحديث محتوى الإشعار قبل انتهاء الوقت ، فسيعرض النظام المحتوى الأصلي.

لنلقي نظرة على مثال. سنقوم بتغيير الجسم في الحمولة في Code Snippet 7 إلى " العنوان: Sea Shells Apartments ، Mumbai ".

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

ملحق محتوى الإخطار

إن وجود واجهة مستخدم لافتة للنظر دائمًا أفضل من واجهة مستخدم افتراضية بسيطة. إن إضافة بعض الألوان وبعض الخطوط الجميلة ليست فكرة سيئة أبدًا. سنفعل الشيء نفسه مع إشعاراتنا لجعلها تبدو مذهلة !؟

و و ... آبل هنا لإنقاذنا مرة أخرى. تمديد محتوى الإخطار هو. يقدم هذا واجهة مخصصة لمحلية تسليمهاأوالإخطار عن بعد .

إضافة ملحق محتوى الإخطار إلى المشروع

أعتقد أننا نعرف بالفعل كيف نفعل ذلك. أليس كذلك؟ سنقوم بنفس ما فعلناه لإضافة تمديد خدمة الإعلام . حدد ملف - جديد - هدف - امتداد محتوى الإخطار.

إضافة بعض المفاتيح إلى Info.plist الخاص بالملحق

لدعم واجهة المستخدم المخصصة للإشعارات المحلية والبعيدة ، نحتاج إلى إجراء بعض التغييرات في ملف Info.plist الخاص بامتداد المحتوى.

  1. UNNotificationExtensionCategory (reqd.) - سلسلة أو مصفوفة من السلاسل. تحتوي كل سلسلة على معرّف فئة تم التصريح عنها بواسطة التطبيق. يجب أن أقول أن الفئة مهمة حقًا للإشعارات. ستظهر واجهة المستخدم المخصصة فقط للإشعارات الموجودة في الفئات المحددة.
  2. UNNotificationExtensionInitialContentSizeRatio (مطلوب) - رقم فاصلة عائمة يمثل الحجم الأولي لعرض وحدة التحكم في العرض معبرًا عنه كنسبة ارتفاعها إلى عرضها . إنها وحدة التحكم في العرض التي سنستخدمها لإنشاء واجهة مستخدم مخصصة. سنناقش ذلك في القسم القادم.
  3. UNNotificationExtensionDefaultContentHidden - إذا كان هذا صحيحًا : اعرض المحتوى المخصص فقط. إذا كان خطأ : اعرض المحتوى المخصص + الافتراضي.
  4. UNNotificationExtensionOverridesDefaultTitle —إذا كان هذا صحيحًا : قم بتعيين عنوان الإشعار على عنوان وحدة التحكم في العرض. إذا كان خطأ : يتم تعيين عنوان الإشعار على اسم التطبيق.

فيما يلي توضيح يمكن أن يساعدنا في فهم المفاتيح المذكورة أعلاه بشكل أفضل.

في الرسم التوضيحي أعلاه ، تم تكوين المفاتيح في Info.plist على النحو التالي:

  1. UNNotificationExtensionCategory - دعوة
  2. UNNotificationExtensionInitialContentSizeRatio - 1
  3. UNNotificationExtensionDefaultContentHidden - false
  4. UNNotificationExtensionOverridesDefaultTitle - خطأ

إنشاء واجهة المستخدم المخصصة

يزودنا امتداد محتوى الإخطار بما UIViewControllerيتوافق مع UNNotificationContentExtensionالبروتوكول. تقدم وحدة التحكم هذه واجهة الإخطار. يحتوي Storyboardالملف الموجود في الامتداد على ViewController واحد يمكننا استخدامه لإنشاء أي واجهة مستخدم نريد أن يقدمها الإشعار.

بمجرد إنشاء واجهة المستخدم ، نحتاج إلى توصيل العناصر من NotificationViewControllerأجل ملء التفاصيل. عندما يصل إشعار بفئة متوقعة ، نتلقى رد اتصال في UNNotificationContentExtension’sالطريقة - didReceive(_:). هذا هو المكان الذي يمكننا فيه إضافة تفاصيل إلى واجهة المستخدم المخصصة الخاصة بنا.

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

المحتوى + واجهة مستخدم جميلة + إجراءات مخصصة - تم إنجاز كل شيء. ما اكثر من ذلك يمككنا ان نسأله؟ أبل ، أنت رائع !؟

نقطة أخيرة: يمكننا إضافة معالجة إلى الإجراءات المخصصة في الامتداد أيضًا. يستدعي النظام didReceive(_:completionHandler:)طريقة الرد على أي إجراءات محددة. إذا لم تنفذ وحدة التحكم في العرض هذه الطريقة ، فسيقوم النظام بتسليم الإجراء المحدد لتطبيقك للتعامل معه.

في حالة التنفيذ ، نحتاج إلى التعامل مع جميع الإجراءات الممكنة في هذه الطريقة. الشيء الوحيد المهم هنا هو completionالإغلاق.

completion: الكتلة المراد تنفيذها عند الانتهاء من تنفيذ الإجراء. يجب عليك استدعاء هذه الكتلة في مرحلة ما أثناء التنفيذ. الكتلة ليس لها قيمة عودة.

يقبل الإغلاق معلمة واحدة dismissمن النوع UNNotificationContentExtensionResponseOption. نحن نقدم الخيارات التالية:

  1. doNotDismiss - لا ترفض واجهة الإخطار.
  2. dismiss - استبعاد واجهة الإخطار.
  3. dismissAndForwardAction--ارفض واجهة الإشعارات وأعد توجيه الإشعار إلى التطبيق.

هذا يلخص إشعاراتنا. الكثير لنتذكره؟ الممارسة تجعل التقدم ؟ حاول عمل إشعاراتك الخاصة الآن!

مشروع عينة

يمكنك تنزيل نموذج المشروع من هنا.

ويمكن العثور على نموذج مشروع ملحق محتوى الإخطار هنا.

قراءة متعمقة

لا تنس قراءة مقالاتي الأخرى:

  1. كل شيء عن Codable في Swift 4
  2. قم بتلوينها باستخدام GRADIENTS - iOS
  3. الترميز لنظام iOS 11: كيفية السحب والإفلات في المجموعات والجداول
  4. كل ما تحتاج لمعرفته حول ملحقات Today (القطعة) في iOS 10
  5. UICollectionViewCell اختيار أسهل .. !!

لا تتردد في ترك تعليقات في حال كان لديك أي أسئلة.