Swift Academy · Pelajaran

Mengendalikan Muatan Pemberitahuan

Balas pemberitahuan di latar hadapan dan latar belakang.

Pelajaran 2 daripada 413 langkah

Mengendalikan Muatan Pemberitahuan ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Struktur Muatan

Pemberitahuan jauh ialah kamus JSON yang dihantar oleh pelayan anda kepada APNs. Kunci terpelihara aps mengandungi kandungan yang boleh dilihat oleh pengguna — makluman, bunyi dan lencana — manakala kunci lain membawa data tersuai anda, seperti id item untuk dibuka.

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

Kamus aps

Di dalam aps, alert boleh berupa rentetan atau objek tajuk/badan/sari kata. sound, badge dan bendera seperti content-available serta mutable-content juga berada di sini. Segala-galanya di luar aps boleh anda tentukan sendiri.

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

Penghantaran di Latar Hadapan

Secara lalai, pemberitahuan yang tiba ketika aplikasi anda berada di latar hadapan tidak dipaparkan. Untuk tetap memaparkannya, laksanakan willPresent pada wakil dan pulangkan pilihan paparan yang anda mahu, seperti sepanduk dan bunyi.

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

Menjawab Ketukan

Apabila pengguna mengetik pemberitahuan (sama ada aplikasi berada di latar belakang atau telah ditamatkan), didReceive response pada wakil akan dijalankan. Di sinilah anda membaca muatan dan menavigasi ke skrin yang betul.

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)
    }
}

Membaca userInfo

Muatan penuh, termasuk kunci tersuai anda, tersedia sebagai content.userInfo — kamus [AnyHashable: Any]. Tukarkan setiap nilai dengan teliti; jangan nyahbungkus secara paksa kerana muatan yang tidak sah tidak sepatutnya menyebabkan aplikasi ranap.

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
    }
}

Pemberitahuan Senyap (Latar Belakang)

Menetapkan content-available: 1 dan tidak menyertakan makluman menghasilkan tolakan senyap yang membangunkan aplikasi di latar belakang untuk mengambil data, tanpa antara muka pengguna. Pemberitahuan ini dihadkan oleh sistem dan memerlukan mod latar belakang Pemberitahuan jauh.

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

Pengendali Pengambilan Latar Belakang

Tolakan senyap tiba dalam kaedah tak segerak didReceiveRemoteNotification wakil aplikasi. Anda melakukan pengambilan data dan memulangkan UIBackgroundFetchResult supaya sistem mengetahui sama ada data baharu tiba dan boleh memperuntukkan belanjawan untuk pembangkitan masa hadapan.

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

Kandungan Boleh Diubah dan Sambungan Perkhidmatan

Dengan mutable-content: 1, satu Sambungan Perkhidmatan Pemberitahuan boleh memintas tolakan sebelum dipaparkan — untuk menyahsulit badan, memuat turun lampiran imej atau menulis semula tajuk. Sambungan itu mempunyai tempoh masa yang singkat untuk selesai.

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

Menyetempatkan Makluman

Untuk menyetempatkan teks pada sisi pelayan, hantar title-loc-key dan loc-key yang merujuk kepada kunci dalam rentetan penyetempatan aplikasi anda, serta loc-args untuk penggantian. Peranti memaparkannya dalam bahasa pengguna tanpa anda perlu menghantar salinan yang telah diterjemahkan terlebih dahulu.

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

Mengemas Kini Lencana

Nilai badge menetapkan nombor pada ikon aplikasi. Menghantar badge: 0 mengosongkannya. Anda juga boleh menetapkannya dalam kod melalui setBadgeCount selepas pengguna membaca kandungan, supaya lencana sentiasa sepadan dengan keadaan belum dibaca.

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

Pengendali Teguh

Gabungkan semua bahagian: paparkan pemberitahuan di latar hadapan, halakan pengguna apabila mengetik dan sahkan setiap penukaran jenis. Pengendali tidak akan ranap akibat muatan yang tidak dijangka dan sentiasa mendapatkan perkara yang boleh diekstraknya.

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)
}

Semakan Pantas

Ingat kembali cara bertindak balas terhadap ketukan pemberitahuan.

Imbas Kembali

Anda telah mempelajari cara mengendalikan muatan:

  • Kamus aps menyimpan kandungan yang boleh dilihat oleh pengguna; kunci lain menyimpan data anda, yang dibaca melalui userInfo.
  • Gantikan willPresent untuk memaparkan pemberitahuan di latar hadapan dan didReceive response untuk mengendalikan ketukan.
  • content-available: 1 memulakan pengambilan data senyap di latar belakang yang memulangkan UIBackgroundFetchResult.
  • mutable-content mendayakan sambungan perkhidmatan; loc-key menyetempatkan teks pada peranti.
Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Mengendalikan Muatan Pemberitahuan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Mengendalikan Muatan Pemberitahuan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mengendalikan Muatan Pemberitahuan”?

Balas pemberitahuan di latar hadapan dan latar belakang. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Mengendalikan Muatan Pemberitahuan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mendaftar untuk Pemberitahuan Tolak
  2. Mengendalikan Muatan Pemberitahuan
  3. Tugas Latar Belakang dan Penyegaran
  4. Tindakan dan Kategori Pemberitahuan
← Kembali ke Swift Academy