Menangani Payload Notifikasi
Tanggapi notifikasi di latar depan dan latar belakang.
Menangani Payload Notifikasi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Struktur Muatan
Notifikasi jarak jauh adalah kamus JSON yang dikirim server Anda ke APNs. Kunci khusus aps berisi content yang terlihat oleh pengguna — peringatan, suara, dan lencana — sedangkan kunci lain di tingkat yang sama membawa data khusus 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 dapat berupa string atau objek berisi judul, isi, dan subjudul. sound, badge, serta tanda seperti content-available dan mutable-content juga berada di sini. Semua yang berada di luar aps dapat 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)Pengiriman Saat Aplikasi Aktif
Secara default, notifikasi yang tiba saat aplikasi Anda berada di latar depan tidak ditampilkan. Untuk tetap menampilkannya, terapkan willPresent milik delegasi dan kembalikan opsi presentasi yang Anda inginkan, seperti banner dan suara.
import UserNotifications
func userNotificationCenter(
_ center: UNUserNotificationCenter,
willPresent notification: UNNotification
) async -> UNNotificationPresentationOptions {
return [.banner, .sound, .badge]
}Merespons Ketukan
Saat pengguna mengetuk notifikasi, baik ketika aplikasi berada di latar belakang maupun telah dihentikan, didReceive response milik delegasi dijalankan. Di sinilah Anda membaca muatan dan berpindah ke screen yang tepat.
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 lengkap, termasuk kunci khusus Anda, tersedia sebagai content.userInfo — kamus [AnyHashable: Any]. Konversikan setiap nilai dengan hati-hati; jangan pernah melakukan pembukaan paksa, karena muatan yang rusak seharusnya tidak membuat aplikasi mogok.
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
}
}Notifikasi Senyap (Latar Belakang)
Menetapkan content-available: 1 dan menghilangkan peringatan akan membuat push senyap yang membangunkan aplikasi di latar belakang untuk mengambil data, tanpa antarmuka pengguna. Notifikasi ini dibatasi frekuensinya oleh sistem dan memerlukan mode latar belakang Notifikasi Jarak Jauh.
// Silent payload — no alert, just a wake-up:
// { "aps": { "content-available": 1 }, "sync": true }
let silent = "content-available wakes app quietly"
_ = silentPenangan Pengambilan Data di Latar Belakang
Push senyap tiba di metode asinkron delegasi aplikasi didReceiveRemoteNotification. Anda melakukan pengambilan data lalu mengembalikan UIBackgroundFetchResult agar sistem mengetahui apakah data baru tiba dan dapat mengatur anggaran pembangkitan berikutnya.
import UIKit
func application(
_ app: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]
) async -> UIBackgroundFetchResult {
// fetch fresh data here
return .newData
}Konten yang Dapat Diubah dan Ekstensi Layanan
Dengan mutable-content: 1, Ekstensi Layanan Notifikasi dapat mencegat push sebelum ditampilkan — untuk mendekripsi isi, mengunduh lampiran gambar, atau menulis ulang judul. Ekstensi tersebut memiliki waktu singkat untuk menyelesaikannya.
// Service extension entry point (UNNotificationServiceExtension):
// override didReceive(_:withContentHandler:)
// modify bestAttemptContent, then call contentHandler
let mutable = "mutable-content enables interception"
_ = mutableMelokalkan Peringatan
Untuk melokalkan teks di sisi server, kirim title-loc-key dan loc-key yang merujuk pada kunci dalam string yang dapat dilokalkan di aplikasi Anda, serta loc-args untuk penggantian. Perangkat menampilkannya dalam bahasa pengguna tanpa Anda perlu mengirim teks yang telah diterjemahkan sebelumnya.
// Localized alert payload:
// "alert": {
// "loc-key": "NEW_MESSAGE",
// "loc-args": ["Ada"]
// }
let localized = "loc-key resolves on device"
_ = localizedMemperbarui Lencana
Nilai badge menetapkan angka pada ikon aplikasi. Mengirim badge: 0 akan menghapusnya. Anda juga dapat menetapkannya dalam kode melalui setBadgeCount setelah pengguna membaca content, sehingga lencana tetap selaras dengan status yang belum dibaca.
import UserNotifications
func clearBadge() async {
try? await UNUserNotificationCenter.current()
.setBadgeCount(0)
}Penangan yang Tangguh
Gabungkan semua bagian: tampilkan saat aplikasi berada di latar depan, route saat diketuk, dan validasi setiap konversi tipe. Penangan tidak pernah mogok karena muatan yang tidak terduga dan selalu mengekstrak data yang dapat diperolehnya.
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)
}Pemeriksaan Singkat
Ingat kembali cara merespons ketukan notifikasi.
Ringkasan
Anda telah mempelajari cara menangani muatan:
- Kamus
apsberisi content yang terlihat oleh pengguna; kunci lain di tingkat yang sama berisi data Anda, yang dibaca melaluiuserInfo. - Ganti
willPresentuntuk menampilkan notifikasi saat aplikasi berada di latar depan dandidReceive responseuntuk menangani ketukan. content-available: 1menjalankan pengambilan data senyap di latar belakang yang mengembalikanUIBackgroundFetchResult.mutable-contentmengaktifkan ekstensi layanan;loc-keymelokalkan teks di perangkat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menangani Payload Notifikasi” gratis?
Ya — teks lengkap “Menangani Payload Notifikasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menangani Payload Notifikasi”?
Tanggapi notifikasi di latar depan dan latar belakang. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Menangani Payload Notifikasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendaftarkan Notifikasi Push
- Menangani Payload Notifikasi
- Tugas Latar Belakang dan Penyegaran
- Tindakan dan Kategori Notifikasi