Kami mengubah konten aplikasi notifikasi iOS

Hai

Dalam artikel ini saya ingin berbagi pengalaman saya menggunakan satu opsi yang tidak jelas (setidaknya untuk saya) untuk mengubah teks pemberitahuan aplikasi, mengirim data tambahan melalui UNUserNotificationCenter.

Saya harap artikel ini akan bermanfaat bagi pemula dalam pemrograman untuk iOS di Swift. Diasumsikan bahwa Anda memiliki setidaknya beberapa pengalaman pemrograman dengan Swift untuk iOS. Saya menggunakan Swift 5 dan Xcode 10.2.1. Jadi, mari kita mulai.


Tantangan


Saya memiliki aplikasi yang menunjukkan notifikasi pengguna. Pemberitahuan terdiri dari teks isi dan teks latar.

Jadi, idenya adalah untuk pertama-tama menunjukkan kepada pengguna hanya teks utama, dan jika pengguna ingin mengetahui teks sekunder, ia harus mengklik tombol "tampilkan" di notifikasi.

Saya menggunakan metode berikut untuk menampilkan pemberitahuan (semua penjelasan di bawah):

1. Pertama-tama, kita harus mendefinisikan instance UNUserNotificationCenter:

class NotificationService: NSObject, UNUserNotificationCenterDelegate { let notificationCenter = UNUserNotificationCenter.current() } 


2. Selanjutnya, kami mendeklarasikan metode yang akan kami gunakan untuk mengirim pemberitahuan:
Metode permintaan notifikasi saya
 // 1 //   ,      Tuple    . // showBody -     Bool,           . // withAction -     Bool,       ,   ""  . // atDate date -    Date,      ,      . func showNotification(with item: (String, String), showBody: Bool, withAction: Bool, atDate date: Date) { // 2 //    let content = UNMutableNotificationContent() // 3 //     let userActionsIdentifier = “showMe” // 4 //      . content.title = item.0 // 5 //    ,      false,  ,       . if showBody { content.body = item.1 } // 6 //     -    notificationCenter userInfo      . content.userInfo = [item.0: item.1] content.sound = UNNotificationSound.default // 7 //        withAction  true,      "Show me". if withAction { content.categoryIdentifier = userActionsIdentifier } // 8 //    ,        . let notificationID = item.0 // 9 //      . //       ,      . var dc = DateComponents() dc.hour = Calendar.current.component(.hour, from: date) dc.minute = Calendar.current.component(.minute, from: date) dc.second = Calendar.current.component(.second, from: date) // 10 //   .     ,       UNCalendarNotificationTrigger. let trigger = UNCalendarNotificationTrigger(dateMatching: dc, repeats: false) // 11 //        ,   . let request = UNNotificationRequest(identifier: notificationID, content: content, trigger: trigger) // 12 //     notificationCenter,     . notificationCenter.add(request) { (error) in error == nil ? print(“notifacation request was added at “, trigger.nextTriggerDate()!) : print(error.debugDescription) } // 13 //    .            .      . let action = UNNotificationAction(identifier: “showMe”, title: “Show me”, options: []) // 14 //   . let category = UNNotificationCategory(identifier:userActionsIdentifier, actions: [action], intentIdentifiers: [], options: []) // 15 //      notificationCenter. notificationCenter.setNotificationCategories([category]) } 



Ketika kita memanggil metode ini, kita akan melihat pemberitahuan pada waktu yang kita tentukan.
Jika pengguna menarik pemberitahuan ke bawah, tombol "Tunjukkan saya" akan muncul. Kemudian pengguna harus mengklik tombol ini untuk melihat teks latar belakang. Untuk melakukan ini, kita harus menggunakan metode delegasi UNUserNotificationCenterDelegate:

 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { … } 


Jadi, kode yang saya gunakan dalam metode delegasi ini adalah sebagai berikut:

Metode delegasi saya
 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print(“didReceive response”) // 1 //   switch     switch response.actionIdentifier { case “showMe”: print(“showMe action”) // 2 //      userInfo,      showNotification   6,      String. let mainText = response.notification.request.content.userInfo.keys.first! as! String // 3 //       userInfo,      showNotification   6,       String. let subText = response.notification.request.content.userInfo.values.first! as! String // 4 //       showNotificationlet,    : // showBody    true,  withAction  false (       ). self.showNotification(with: (mainText, subText), showBody: true, withAction: false, atDate: Date(timeInterval: 3, since: Date())) default: print(“defaul action”) } completionHandler() } 



Dan inilah tampilannya:



Di dalam proyek (yang dapat Anda unduh dari tautan di bawah) ada beberapa kode lagi, tetapi inti dari ide tersebut dijelaskan dalam artikel ini.

Terima kasih

Tautan ke proyek

Source: https://habr.com/ru/post/id451454/


All Articles