Swift Academy · درس

إجراءات الإشعارات وفئاتها

أضف إجراءات تفاعلية إلى الإشعارات.

الدرس 4 من 413 خطوة

إجراءات الإشعارات وفئاتها درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

الإشعارات التفاعلية

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

import UserNotifications
// Category = a set of actions
// Each delivered notification names its category
// so the system shows the right buttons

تعريف إجراء

يحتوي UNNotificationAction على معرّف تطابقونه لاحقًا، وعنوان موطّنًا يظهر على الزر، وخيارات مثل .destructive أو .foreground، التي تشغّل التطبيق.

import UserNotifications
let accept = UNNotificationAction(
    identifier: "ACCEPT",
    title: String(localized: "Accept"),
    options: [.foreground])
let decline = UNNotificationAction(
    identifier: "DECLINE",
    title: String(localized: "Decline"),
    options: [.destructive])

تجميع الإجراءات ضمن فئة

يجمع UNNotificationCategory الإجراءات ضمن معرّف فئة. ويطابق ترتيب الإجراءات في المصفوفة ترتيب الأزرار. سجّلوا الفئات مرة واحدة عند التشغيل باستخدام مركز الإشعارات.

import UserNotifications
let inviteCategory = UNNotificationCategory(
    identifier: "INVITE",
    actions: [accept, decline],
    intentIdentifiers: [],
    options: [])
UNUserNotificationCenter.current()
    .setNotificationCategories([inviteCategory])

إسناد فئة إلى إشعار

لكي تظهر الأزرار، يجب أن يضبط محتوى الإشعار categoryIdentifier على فئة مسجلة. وبالنسبة إلى إشعارات push البعيدة، يرسل الخادم "category": "INVITE" داخل قاموس aps.

import UserNotifications
let content = UNMutableNotificationContent()
content.title = String(localized: "New invite")
content.body = String(localized: "Ada invited you")
content.categoryIdentifier = "INVITE"

التعامل مع الإجراء المختار

عندما ينقر المستخدم على زر، تُستدعى didReceive response الخاصة بالمفوض، وتكون قيمة response.actionIdentifier هي معرّف الإجراء الخاص بكم. استخدموا switch عليها لتنفيذ العمل المناسب.

import UserNotifications
func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    didReceive response: UNNotificationResponse
) async {
    switch response.actionIdentifier {
    case "ACCEPT":  print("accepted")
    case "DECLINE": print("declined")
    default:        break
    }
}

المعرّفات الافتراضية ومعرّفات الإغلاق

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

import UserNotifications
func route(_ id: String) {
    switch id {
    case UNNotificationDefaultActionIdentifier:
        print("opened the app")
    case UNNotificationDismissActionIdentifier:
        print("dismissed")
    default:
        print("custom action", id)
    }
}

إجراءات إدخال النص

يعرض UNTextInputNotificationAction حقل نص مضمّنًا، وهو مناسب جدًا للردود السريعة. ويضيف عنوانًا للزر وعنصرًا نائبًا لمربع الإدخال.

import UserNotifications
let reply = UNTextInputNotificationAction(
    identifier: "REPLY",
    title: String(localized: "Reply"),
    options: [],
    textInputButtonTitle: String(localized: "Send"),
    textInputPlaceholder: String(localized: "Message"))

قراءة النص المكتوب

بالنسبة إلى إجراء نصي، تكون الاستجابة من النوع UNTextInputNotificationResponse. حوّلوا نوعها لقراءة userText، أي السلسلة التي كتبها المستخدم.

import UserNotifications
func handle(_ response: UNNotificationResponse) {
    if let textResponse = response
        as? UNTextInputNotificationResponse {
        let message = textResponse.userText
        print("reply:", message)
    }
}

خيارات الفئة

تضبط خيارات الفئة سلوكها بدقة: يمرر .customDismissAction حدث الإغلاق إلى المفوض، ويُظهر .hiddenPreviewsShowTitle العنوان حتى عند إخفاء المعاينات على شاشة القفل، ويسمح .allowInCarPlay بعرض الإشعار في CarPlay.

import UserNotifications
let category = UNNotificationCategory(
    identifier: "MESSAGE",
    actions: [reply],
    intentIdentifiers: [],
    options: [.customDismissAction,
              .hiddenPreviewsShowTitle])
_ = category

إجراءات الخلفية مقابل المقدمة

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

import UserNotifications
let snooze = UNNotificationAction(
    identifier: "SNOOZE",
    title: String(localized: "Snooze"),
    options: []) // background, no app launch
let open = UNNotificationAction(
    identifier: "OPEN",
    title: String(localized: "Open"),
    options: [.foreground]) // launches app
_ = (snooze, open)

تدفق رد مكتمل

اجمعوا بين إجراء نصي وفئة ومعالج يميّز الرد المكتوب من الفتح العادي. ويدعم هذا النمط الردود المضمّنة في تطبيقات المراسلة.

import UserNotifications
func handle(_ response: UNNotificationResponse) async {
    switch response.actionIdentifier {
    case "REPLY":
        let text = (response as?
            UNTextInputNotificationResponse)?.userText ?? ""
        print("send reply:", text)
    case UNNotificationDefaultActionIdentifier:
        print("open conversation")
    default:
        break
    }
}

اختبار سريع

تذكّروا كيف يعرف النظام الأزرار التي يجب عرضها.

مراجعة

لقد تعلمتم الإشعارات التفاعلية:

  • أنشئوا إجراءات UNNotificationAction، بما في ذلك UNTextInputNotificationAction، واجمعوها ضمن UNNotificationCategory.
  • سجّلوا الفئات عند التشغيل، واضبطوا categoryIdentifier في المحتوى، أو category في إشعار push، لعرض الأزرار.
  • تعاملوا مع response.actionIdentifier، بما في ذلك معرّفا الإجراء الافتراضي والإغلاق، واقرؤوا userText للردود.
  • احذفوا .foreground من إجراءات الخلفية مثل التأجيل.
البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
122
الدروس
409

الأسئلة الشائعة

هل درس «إجراءات الإشعارات وفئاتها» مجاني؟

نعم — نص درس «إجراءات الإشعارات وفئاتها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «إجراءات الإشعارات وفئاتها»؟

أضف إجراءات تفاعلية إلى الإشعارات. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إجراءات الإشعارات وفئاتها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

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

جميع الدروس في هذه الدورة

  1. التسجيل للإشعارات الفورية
  2. التعامل مع حمولات الإشعارات
  3. المهام والتحديثات في الخلفية
  4. إجراءات الإشعارات وفئاتها
← العودة إلى Swift Academy