0Pricing
Swift Academy · บทเรียน

การจัดการข้อมูลการแจ้งเตือน

ตอบสนองต่อการแจ้งเตือนขณะอยู่เบื้องหน้าและเบื้องหลัง

การจัดการข้อมูลการแจ้งเตือน เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

โครงสร้างเพย์โหลด

การแจ้งเตือนระยะไกลคือพจนานุกรม JSON ที่เซิร์ฟเวอร์ของคุณส่งไปยังบริการแจ้งเตือนของ Apple คีย์สงวน aps เก็บเนื้อหาที่ผู้ใช้มองเห็น ได้แก่ การแจ้งเตือน เสียง และป้ายตัวเลข ส่วนคีย์อื่นที่อยู่ระดับเดียวกันจะเก็บข้อมูลที่กำหนดเอง เช่น รหัสรายการที่จะใช้เปิด

// Example payload JSON:
// {
//   "aps": { "alert": { "title": "Hi", "body": "..." },
//            "sound": "default", "badge": 1 },
//   "itemId": "42"
// }

พจนานุกรม aps

ภายใน aps ค่า alert อาจเป็นสตริง หรือออบเจ็กต์ที่มี title, body และ subtitle ส่วน sound, badge รวมถึงแฟล็กอย่าง content-available และ mutable-content ก็อยู่ที่นี่เช่นกัน ทุกสิ่งที่อยู่นอก aps เป็นข้อมูลที่คุณกำหนดเองได้

// aps keys:
//   alert: { title, subtitle, body }
//   sound: "default" or critical sound object
//   badge: Int
//   content-available: 1  (silent / background)
//   mutable-content: 1    (allow modification)

การส่งเมื่อแอปอยู่เบื้องหน้า

โดยค่าเริ่มต้น การแจ้งเตือนที่มาถึงขณะที่แอปอยู่เบื้องหน้าจะไม่ถูกแสดง หากต้องการแสดงอยู่ดี ให้ใช้งาน willPresent ของผู้รับมอบหมาย และส่งคืนตัวเลือกการแสดงผลที่ต้องการ เช่น แบนเนอร์และเสียง

import UserNotifications
func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    willPresent notification: UNNotification
) async -> UNNotificationPresentationOptions {
    return [.banner, .sound, .badge]
}

การตอบสนองเมื่อแตะ

เมื่อผู้ใช้แตะการแจ้งเตือน ไม่ว่าแอปจะอยู่เบื้องหลังหรือถูกปิดไปแล้ว เมธอด didReceive response ของผู้รับมอบหมายจะทำงาน จุดนี้เป็นที่ที่คุณอ่านเพย์โหลดและนำทางไปยังหน้าจอที่ถูกต้อง

import UserNotifications
func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    didReceive response: UNNotificationResponse
) async {
    let info = response.notification.request
        .content.userInfo
    if let id = info["itemId"] as? String {
        print("open item", id)
    }
}

การอ่าน userInfo

เพย์โหลดทั้งหมด รวมถึงคีย์ที่กำหนดเองของคุณ จะอยู่ใน content.userInfo ซึ่งเป็นพจนานุกรม [AnyHashable: Any] ให้แปลงชนิดของแต่ละค่าอย่างระมัดระวัง อย่าบังคับแกะค่า เพราะเพย์โหลดที่มีรูปแบบไม่ถูกต้องไม่ควรทำให้แอปหยุดทำงาน

import UserNotifications
func route(_ userInfo: [AnyHashable: Any]) {
    guard let screen = userInfo["screen"] as? String
    else { return }
    switch screen {
    case "profile": print("go to profile")
    case "cart":    print("go to cart")
    default:        break
    }
}

การแจ้งเตือนแบบเงียบ (เบื้องหลัง)

การตั้งค่า content-available: 1 และไม่ใส่การแจ้งเตือน จะสร้างการแจ้งเตือนแบบ เงียบ ที่ปลุกแอปให้ทำงานเบื้องหลังเพื่อดึงข้อมูล โดยไม่มีส่วนติดต่อผู้ใช้ การแจ้งเตือนประเภทนี้ถูกระบบจำกัดความถี่ และต้องเปิดใช้โหมดเบื้องหลัง Remote notifications

// Silent payload — no alert, just a wake-up:
// { "aps": { "content-available": 1 }, "sync": true }
let silent = "content-available wakes app quietly"
_ = silent

ตัวจัดการการดึงข้อมูลเบื้องหลัง

การแจ้งเตือนแบบเงียบจะมาถึงเมธอด didReceiveRemoteNotification แบบอะซิงโครนัสในตัวแทนแอป คุณจะดึงข้อมูล แล้วส่งคืนค่า UIBackgroundFetchResult เพื่อให้ระบบทราบว่ามีข้อมูลใหม่เข้ามาหรือไม่ และจัดสรรโอกาสปลุกแอปในอนาคตได้เหมาะสม

import UIKit
func application(
    _ app: UIApplication,
    didReceiveRemoteNotification userInfo: [AnyHashable: Any]
) async -> UIBackgroundFetchResult {
    // fetch fresh data here
    return .newData
}

เนื้อหาที่แก้ไขได้และส่วนขยายบริการ

เมื่อใช้ mutable-content: 1 ส่วนขยายบริการการแจ้งเตือน จะดักรับการแจ้งเตือนก่อนแสดงผลได้ เพื่อถอดรหัสเนื้อหา ดาวน์โหลดไฟล์แนบรูปภาพ หรือเขียนชื่อเรื่องใหม่ ส่วนขยายนี้มีเวลาจำกัดเพียงสั้น ๆ ในการทำงานให้เสร็จ

// Service extension entry point (UNNotificationServiceExtension):
// override didReceive(_:withContentHandler:)
//   modify bestAttemptContent, then call contentHandler
let mutable = "mutable-content enables interception"
_ = mutable

การแปลข้อความแจ้งเตือน

หากต้องการแปลข้อความบนเซิร์ฟเวอร์ ให้ส่ง title-loc-key และ loc-key ที่อ้างอิงคีย์ในสตริงที่แปลได้ของแอป พร้อม loc-args สำหรับค่าที่ใช้แทนที่ อุปกรณ์จะแสดงผลเป็นภาษาของผู้ใช้โดยที่คุณไม่ต้องส่งข้อความที่แปลไว้ล่วงหน้า

// Localized alert payload:
// "alert": {
//   "loc-key": "NEW_MESSAGE",
//   "loc-args": ["Ada"]
// }
let localized = "loc-key resolves on device"
_ = localized

การอัปเดตป้ายตัวเลข

ค่า badge จะกำหนดตัวเลขบนไอคอนแอป การส่ง badge: 0 จะล้างตัวเลขนั้น คุณยังสามารถตั้งค่าจากโค้ดผ่าน setBadgeCount หลังจากผู้ใช้อ่านเนื้อหาแล้ว เพื่อให้ป้ายตัวเลขตรงกับสถานะที่ยังไม่ได้อ่าน

import UserNotifications
func clearBadge() async {
    try? await UNUserNotificationCenter.current()
        .setBadgeCount(0)
}

ตัวจัดการที่รับมือได้อย่างมีประสิทธิภาพ

นำทุกส่วนมารวมกัน: แสดงผลเมื่ออยู่เบื้องหน้า นำทางเมื่อแตะ และตรวจสอบการแปลงชนิดทุกครั้ง ตัวจัดการจะไม่หยุดทำงานเมื่อได้รับเพย์โหลดที่ไม่คาดคิด และจะดึงข้อมูลทุกส่วนที่สามารถดึงได้เสมอ

import UserNotifications
func handleTap(_ response: UNNotificationResponse) {
    let info = response.notification.request
        .content.userInfo
    guard let id = info["itemId"] as? String else {
        print("no item id; open home")
        return
    }
    print("navigate to item", id)
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทบทวนวิธีตอบสนองต่อการแตะการแจ้งเตือน

สรุปทบทวน

คุณได้เรียนรู้วิธีจัดการเพย์โหลดแล้ว:

  • พจนานุกรม aps เก็บเนื้อหาที่ผู้ใช้มองเห็น ส่วนคีย์ระดับเดียวกันจะเก็บข้อมูลของคุณ ซึ่งอ่านผ่าน userInfo
  • แทนที่ willPresent เพื่อแสดงการแจ้งเตือนขณะอยู่เบื้องหน้า และใช้ didReceive response เพื่อจัดการการแตะ
  • content-available: 1 จะเรียกใช้การดึงข้อมูลเบื้องหลังแบบเงียบ ซึ่งส่งคืนค่า UIBackgroundFetchResult
  • mutable-content จะเปิดใช้ส่วนขยายบริการ ส่วน loc-key จะแปลข้อความบนอุปกรณ์

คำถามที่พบบ่อย

บทเรียน “การจัดการข้อมูลการแจ้งเตือน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดการข้อมูลการแจ้งเตือน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อมูลการแจ้งเตือน”

ตอบสนองต่อการแจ้งเตือนขณะอยู่เบื้องหน้าและเบื้องหลัง คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดการข้อมูลการแจ้งเตือน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การลงทะเบียนรับการแจ้งเตือนแบบพุช
  2. การจัดการข้อมูลการแจ้งเตือน
  3. งานเบื้องหลังและการรีเฟรช
  4. แอ็กชันและหมวดหมู่การแจ้งเตือน
← กลับไปที่ Swift Academy