Konferensi WWDC diadakan, dan masih ada banyak laporan yang layak dilihat. Ada beberapa topik utama yang menjadi perhatian Apple. Inti ML, Pintasan Siri dan, tentu saja, berubah menjadi Pemberitahuan.
Karena tidak semua orang memiliki cukup waktu luang untuk berjalan melalui hutan dokumentasi, yang, seperti biasanya terjadi, menyisakan banyak yang diinginkan pada tahap pengujian beta, saya menyiapkan tinjauan fitur baru dan memperkuat materi dengan implementasi praktis. Baca, pahami, dan integrasikan ke dalam aplikasi Anda.
Mari kita mulai dengan ikhtisar fitur yang telah ditambahkan Apple.
Pengelompokan Pemberitahuan
Untuk menerapkan, Anda tidak perlu melakukan apa pun. iOS 12 akan secara otomatis mengelompokkan pesan untuk Anda. Tetapi ada nuansa yang berhubungan dengan penyesuaian, pelokalan dan pengelompokan, tetapi tidak didasarkan pada pengenal aplikasi, tetapi, misalnya, tergantung pada nama pengguna yang mengirim pemberitahuan.
Selain itu, jika Anda akan menguji pengelompokan notifikasi, perhatikan bahwa notifikasi hanya akan mulai dikemas jika semua notifikasi tidak dapat masuk ke layar sekaligus. Misalnya, pada layar iPhone 8 untuk ini, Anda perlu menempatkan 5 atau lebih pemberitahuan.
Agar tidak membebani materi ini, saya memasukkan informasi dalam artikel terpisah .
Perubahan pada API NSExtensionContext
Item berikutnya adalah peluang baru untuk pemberitahuan, dan khususnya kelas NSExtensionContext . Dia bertanggung jawab untuk berinteraksi dengan widget, Siri, memainkan konten media. Kami lebih tertarik pada notifikasi. Dua metode dan satu variabel ditambahkan:
var notificationActions: [UNNotificationAction] { get set }
Variabel memungkinkan penggantian set tindakan yang tersedia selama interaksi dengan pemberitahuan:
func dismissNotificationContentExtension() func performNotificationDefaultAction()
Metode membuka aplikasi atau menyembunyikan pemberitahuan.
Untuk menunjukkan kemungkinan kami akan menulis aplikasi kecil.
Pertama, tambahkan ke aplikasi mengirim pemberitahuan lokal:
let actions = [ UNNotificationAction(identifier: "like-action", title: "Like", options: []), UNNotificationAction(identifier: "open-app", title: "Open App", options: []), UNNotificationAction(identifier: "dismiss", title: "Dismiss", options: []), ] let simpleCategory = UNNotificationCategory(identifier: "category-simple", actions: actions, intentIdentifiers: [], options: []) UNUserNotificationCenter.current().setNotificationCategories([simpleCategory])
- Kami membuat beberapa tindakan. Header, pengidentifikasi yang memungkinkan Anda membedakan antara tindakan pemrosesan dan opsi diteruskan ke penginisialisasi. Opsi dapat menunjukkan bahwa otentikasi pengguna diperlukan untuk menyelesaikan tindakan.
- Kami mendefinisikan kategori dengan pengenal. Pengidentifikasi kategori memungkinkan Anda untuk memproses dan menampilkan berbagai jenis notifikasi dengan berbagai cara.
- Langkah terakhir adalah mengatur kategori untuk pusat notifikasi.
Metode kedua akan mengirim pemberitahuan lokal setelah periode waktu tertentu sehingga kami dapat meminimalkan aplikasi atau mengunci ponsel:
UNUserNotificationCenter.current().getNotificationSettings { (settings) in guard settings.authorizationStatus == .authorized else { return } let content = UNMutableNotificationContent() content.title = "Cat Title" content.subtitle = "Cat Subtitle" content.body = "Cat Body" content.sound = .default content.categoryIdentifier = "category-simple" let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false) let uuid = UUID().uuidString let request = UNNotificationRequest(identifier: uuid, content: content, trigger: trigger) UNUserNotificationCenter.current().add(request, withCompletionHandler: { (error) in }) }
- Periksa apakah pengguna mengizinkan kami mengirim pemberitahuan.
- Kami membuat pemberitahuan dengan tajuk dan teks dan menunjukkan kategori yang akan menjadi miliknya. Dalam hal ini, "kategori-sederhana".
- Atur pemicu setelah 3 detik.
- Isi permintaan untuk mengirim pemberitahuan. Dalam hal ini, kami menggunakan UUID sebagai pengenal. Pengidentifikasi ini mungkin diperlukan jika kami ingin membatalkan pemberitahuan yang dijadwalkan.
- Tambahkan permintaan kami ke pusat notifikasi.
Selanjutnya, Anda perlu menambahkan target Ekstensi Konten Pemberitahuan baru ke aplikasi. Ini memungkinkan Anda untuk menyesuaikan tampilan pemberitahuan dan pemrosesan tindakan.
File plist, ViewController dan Storyboard akan dibuat:
Dalam file plist, kami tertarik pada kunci-kunci berikut:
- UNNotificationExtensionCategory - nama kategori yang akan diproses. Seperti sebelumnya, tentukan "kategori-sederhana".
- UNNotificationExtensionInitialContentSizeRatio - rasio ketinggian pemberitahuan dengan lebarnya. Mempengaruhi ukuran notifikasi setelah ditampilkan secara penuh.
- UNNotificationExtensionUserInteractionEnabled - aktifkan atau nonaktifkan interaksi dengan kontrol khusus. Dalam kasus kami, itu akan menjadi tombol dengan hati.
- UNNotificationExtensionDefaultContentHidden - menyembunyikan konten pemberitahuan, yang dihasilkan secara default.
Di storyboard, buat UIImageView, UILabel untuk menampilkan judul notifikasi, dan UIButton untuk berinteraksi dengan aplikasi.
Di View Controller, kami membuat metode untuk membuka aplikasi dan menyembunyikan pemberitahuan:
func openApp() { extensionContext?.performNotificationDefaultAction() } func dismissNotification() { extensionContext?.dismissNotificationContentExtension() }
Kami menerapkan metode protokol UNNotificationContentExtension .
Yang pertama memungkinkan Anda untuk menampilkan teks yang diperlukan:
func didReceive(_ notification: UNNotification) { self.notificationTitleLabel.text = notification.request.content.body }
Yang kedua diperlukan untuk menangani tindakan dari UNNotificationAction . Dalam metode yang sama, tindakan diganti menggunakan ekstensi extensionContext? .NotificationActions :
func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) { switch response.actionIdentifier { case "like-action": let actions = [ UNNotificationAction(identifier: "1-star", title: "★", options: []), UNNotificationAction(identifier: "2-star", title: "★ ★", options: []), UNNotificationAction(identifier: "3-star", title: "★ ★ ★", options: []), ] extensionContext?.notificationActions = actions case "open-app": openApp() default: dismissNotification() } }
Pemrosesan keran jantung dilakukan seperti biasa melalui IBAction :
@IBAction func defaultButtonTapped(_ sender: UIButton) { openApp() }
Kami meluncurkan aplikasi dan melihat apa yang kami dapatkan:
- Penekanan dari UIButton diproses.
- Menggunakan UNNotificationAction memungkinkan Anda mengganti opsi yang tersedia untuk interaksi.
Interaksi dengan pengaturan notifikasi
Inovasi berikut memungkinkan Anda untuk menambahkan item menu baru ke pengaturan notifikasi. Ketika Anda mengetuknya, sebuah metode akan dipanggil yang dapat Anda implementasikan dalam aplikasi. Misalnya, pengguna dapat langsung masuk ke aplikasi Anda dari pengaturan sistem dan hanya menyertakan pemberitahuan yang benar-benar ingin ia terima. Apa yang perlu dilakukan untuk implementasi?
Pertama, saat mengotorisasi pemberitahuan, kami menambahkan satu parameter lagi - menyediakanAppNotificationSettings :
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound, .providesAppNotificationSettings])
Kedua, kami mengimplementasikan metode userNotificationCenter (_: openSettingsFor :) dari protokol UNUserNotificationCenterDelegate :
extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification?) { openSettings() } func openSettings() { let storyboard = UIStoryboard(name: "Settings", bundle: nil) let settings = storyboard.instantiateViewController(withIdentifier: "Settings") window?.rootViewController = settings } }
Notifikasi sementara
Pengguna tidak selalu mengerti jika dia ingin menerima pemberitahuan dari aplikasi Anda. Karena itu, ketika Anda pertama kali memulai aplikasi, sulit baginya untuk membuat pilihan seperti itu. Dengan probabilitas tinggi dia akan menolak tawaran Anda. Untuk situasi seperti itu, Apple menyarankan menggunakan Otorisasi Sementara. Saat meminta otorisasi untuk mengirim pemberitahuan, satu parameter lagi ditambahkan - sementara . status otorisasi untuk pemberitahuan tersebut juga masuk ke aplikasi dengan status sementara .
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .provisional])
Pengguna tidak akan menerima permintaan otorisasi saat memulai aplikasi. Namun, agar tidak mengganggunya, aplikasi tersebut ditempatkan di penjara yang disebut. Untuk pemberitahuan, suara, lencana dinonaktifkan; mereka hanya ditampilkan di Pusat Pemberitahuan. Mereka tidak akan muncul di layar yang terkunci atau dalam bentuk spanduk.
Saat pengguna menerima pemberitahuan, dua tombol tambahan muncul. Satu akan sepenuhnya memblokir notifikasi atau menawarkan untuk pergi ke pengaturan, dan yang kedua akan menerjemahkan notifikasi Anda ke dalam status resmi:
Lansiran kritis
Perubahan terbaru menambahkan jenis pemberitahuan lain - Peringatan Kritis . Pemberitahuan ini sepenuhnya mengabaikan pengaturan ponsel Anda, suara tidak bersuara atau tidak mengganggu mode. Apple merekomendasikan untuk menggunakannya dalam aplikasi medis (misalnya, tingkat gula melonjak tajam pada pengguna perangkat), serta untuk memastikan keamanan pengguna di rumah atau di tempat umum.
Permintaan otorisasi berisi karakter khusus:
Item baru ditambahkan dalam pengaturan, dan ikon tambahan ditampilkan pada layar pemberitahuan:
Untuk mengirim pemberitahuan kritis, Anda harus melalui proses validasi aplikasi Anda di situs web Apple .
Untuk menggunakan notifikasi, gunakan parameter criticalAlert :
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .criticalAlert])
Dan kami membentuk isi pemberitahuan:
let content = UNMutableNotificationContent() content.title = "WARNING" content.body = "Storm alert" content.categoryIdentifier = "storm-alert" content.sound = UNNotificationSound.defaultCriticalSound(withAudioVolume: 1.0)
Untuk Peringatan Kritis, Anda dapat menentukan volume yang dengannya pemberitahuan akan dipicu terlepas dari pengaturan pengguna.
Saya harap materi ini akan menyederhanakan proses pengenalan notifikasi baru ke dalam aplikasi Anda. Jika Anda tidak dapat menemukan beberapa langkah implementasi, saya sarankan Anda membiasakan diri dengan kode di github atau mengajukan pertanyaan di komentar.
Anda juga dapat menonton artikel e-Legion tentang pemberitahuan untuk iOS 10 atau laporan yang direkam dari WWDC - Apa yang Baru di Pemberitahuan Pengguna. Kami akan dapat membahas inovasi di MBLT DEV 2018 di Moskow pada 28 September.
Semoga harimu menyenangkan dan anjing laut berbulu untuk semua orang ^ _ ^
UPD: Bagian kedua artikel tentang pengelompokan notifikasi sudah ada di Habré.