Swift Academy · บทเรียน

การลงทะเบียนรับการแจ้งเตือนแบบพุช

ขอสิทธิ์และรับโทเค็นของอุปกรณ์

บทเรียน 1 จาก 413 ขั้นตอน

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

การทำงานของพุชตั้งแต่ต้นจนจบ

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

// Flow: App registers -> APNs returns device token ->
// you send token to your server -> server pushes via APNs

ศูนย์การแจ้งเตือน

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

import UserNotifications
let center = UNUserNotificationCenter.current()
// All notification configuration goes through center

การขออนุญาต

คุณต้องขอผู้ใช้ก่อนแสดงการแจ้งเตือน requestAuthorization(options:) จะแสดงข้อความแจ้งเตือนของระบบและส่งกลับว่าผู้ใช้ยอมรับหรือไม่ ให้ขอเฉพาะตัวเลือกที่จำเป็น ได้แก่ .alert, .sound และ .badge

import UserNotifications
func requestAuth() async throws -> Bool {
    let center = UNUserNotificationCenter.current()
    return try await center.requestAuthorization(
        options: [.alert, .sound, .badge])
}

การลงทะเบียนกับ APNs

การอนุญาตแยกจากการลงทะเบียน หลังจากได้รับอนุญาตหรือดำเนินการพร้อมกัน ให้เรียก registerForRemoteNotifications() บนตัวดำเนินการหลัก การเรียกนี้จะขอโทเค็นอุปกรณ์จาก APNs และต้องทำงานบนเธรดหลัก

import UIKit
@MainActor
func registerForPush() {
    UIApplication.shared.registerForRemoteNotifications()
}

การรับโทเค็นอุปกรณ์

เมื่อสำเร็จ เมธอด didRegisterForRemoteNotificationsWithDeviceToken ของตัวมอบหมายแอปจะทำงานพร้อมโทเค็น Data คุณจะแปลงโทเค็นนี้เป็นสตริงเลขฐานสิบหกแล้วส่งไปยังเซิร์ฟเวอร์ ซึ่งจะใช้โทเค็นเพื่อระบุอุปกรณ์นี้

import UIKit
func application(
    _ app: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken
    deviceToken: Data) {
    let token = deviceToken.map {
        String(format: "%02x", $0) }.joined()
    print("APNs token:", token)
    // send token to your backend
}

การจัดการเมื่อลงทะเบียนไม่สำเร็จ

การลงทะเบียนอาจไม่สำเร็จได้ เช่น ไม่มีเครือข่าย ไม่มีสิทธิ์ APNs หรือทำงานในสภาพแวดล้อมที่ไม่รองรับ ให้ใช้งาน didFailToRegisterForRemoteNotificationsWithError เพื่อบันทึกข้อผิดพลาดและกู้คืนอย่างเหมาะสม แทนที่จะทำให้แอปล่ม

import UIKit
func application(
    _ app: UIApplication,
    didFailToRegisterForRemoteNotificationsWithError
    error: Error) {
    print("Push registration failed:", error)
}

โทเค็นอาจเปลี่ยนแปลงได้

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

// Best practice: register on each launch,
// always upload the freshly received token,
// never cache a token as permanent.
let rule = "re-register every launch"
_ = rule

การตรวจสอบการตั้งค่าปัจจุบัน

ผู้ใช้อาจยกเลิกการอนุญาตภายหลังในการตั้งค่า ก่อนพึ่งพาการแจ้งเตือน ให้เรียกใช้ getNotificationSettings เพื่ออ่านสถานะการอนุญาตปัจจุบันและตรวจสอบว่าฟีเจอร์ใดได้รับอนุญาต

import UserNotifications
func currentStatus() async -> UNAuthorizationStatus {
    let settings = await UNUserNotificationCenter
        .current().notificationSettings()
    return settings.authorizationStatus
}

การอนุญาตชั่วคราว

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

import UserNotifications
func requestQuiet() async throws -> Bool {
    try await UNUserNotificationCenter.current()
        .requestAuthorization(
            options: [.alert, .sound, .provisional])
}

ความสามารถที่จำเป็น

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

// Xcode target > Signing & Capabilities:
//   + Push Notifications
//   + Background Modes > Remote notifications
let caps = "entitlements required"
_ = caps

การรวมขั้นตอนการลงทะเบียน

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

import UIKit
import UserNotifications
func setupPush() async {
    let center = UNUserNotificationCenter.current()
    let granted = (try? await center.requestAuthorization(
        options: [.alert, .sound, .badge])) ?? false
    if granted {
        await MainActor.run {
            UIApplication.shared.registerForRemoteNotifications()
        }
    }
}

ตรวจสอบอย่างรวดเร็ว

ทบทวนความสัมพันธ์ระหว่างการอนุญาตและการลงทะเบียน

สรุป

คุณได้เรียนรู้วิธีสมัครรับการแจ้งเตือนแบบพุชแล้ว:

  • ใช้ UNUserNotificationCenter เพื่อขอสิทธิ์ .alert/.sound/.badge
  • การขอสิทธิ์และการ register เป็นคนละขั้นตอนกัน โดยเรียก registerForRemoteNotifications() บน main actor
  • แปลงโทเค็น Data เป็นเลขฐานสิบหกแล้วอัปโหลด โดย register ใหม่ทุกครั้งที่เปิดแอป เพราะโทเค็นอาจเปลี่ยนได้
  • เปิดใช้ความสามารถ Push Notifications และพิจารณาขอสิทธิ์แบบ .provisional
เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

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

คอร์ส
122
บทเรียน
409

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

บทเรียน “การลงทะเบียนรับการแจ้งเตือนแบบพุช” ฟรีหรือไม่

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

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

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

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

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

บทเรียน “การลงทะเบียนรับการแจ้งเตือนแบบพุช” ใช้เวลานานแค่ไหน

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

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

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

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

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