การจัดการข้อมูลการแจ้งเตือน
ตอบสนองต่อการแจ้งเตือนขณะอยู่เบื้องหน้าและเบื้องหลัง
การจัดการข้อมูลการแจ้งเตือน เป็นบทเรียน 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จะเรียกใช้การดึงข้อมูลเบื้องหลังแบบเงียบ ซึ่งส่งคืนค่าUIBackgroundFetchResultmutable-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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การลงทะเบียนรับการแจ้งเตือนแบบพุช
- การจัดการข้อมูลการแจ้งเตือน
- งานเบื้องหลังและการรีเฟรช
- แอ็กชันและหมวดหมู่การแจ้งเตือน