iT邦幫忙

第 11 屆 iThome 鐵人賽

1
Software Development

iOS App 實作開發新手村系列 第 32

Day32 石虎的推播通知 (客製化版)

  • 分享至 

  • xImage
  •  

20191018

前言

今天我們要練習的是如何使用客製化的推播通知,主要參考ref6的文章來實作。

守護石虎,人人有責

現在,我們馬上開始!

練習過程

今天的練習將延續前一天(Day31)的專案

專案請參考 Day31
https://ithelp.ithome.com.tw/articles/10228613

  1. 修改『AppDelegate.swift』,加入以下代碼
// Day32 - 客製化通知
let likeAction = UNNotificationAction(identifier: "like", title: "守護石虎", options:
[.foreground])
let dislikeAction = UNNotificationAction(identifier: "dislike", title: "稍後再說",
options: [])

let category = UNNotificationCategory(identifier: "catMessage", actions:
[likeAction, dislikeAction], intentIdentifiers: [], options: [])
UNUserNotificationCenter.current().setNotificationCategories([category])
  • 加入兩個顯示按鈕『守護石虎』與『稍後在說』

  • 『catMessage』為通知的ID,先記下,後面要用

  1. 修改前面擴充AppDelegate的代碼 (最下方)
extension AppDelegate: UNUserNotificationCenterDelegate {
 
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent
notification: UNNotification, withCompletionHandler completionHandler: @escaping
(UNNotificationPresentationOptions) -> Void) {
        completionHandler([.badge, .sound, .alert])
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response:
UNNotificationResponse, withCompletionHandler completionHandler:  @escaping () ->
Void) {
        
        let content = response.notification.request.content
        print("title \(content.title)")
        print("userInfo \(content.userInfo)")
        print("actionIdentifier \(response.actionIdentifier)")
        
        completionHandler()
    }
}
  1. 回到ViewController.swift,在按鈕事件加入『content.categoryIdentifier = "catMessage"』
@IBAction func catButtonPressed(_ sender: UIButton) {
    let content = UNMutableNotificationContent()
    content.title = "守護石虎人人有責"
    content.subtitle = "石虎抱抱"
    content.body = """
    向親朋好友介紹石虎,讓他們更喜愛這種動物
    向親朋好友介紹石虎面臨的困境
    行車時若看見小心石虎的標誌請減速慢行
    (苗栗縣相關標誌類似附圖)
    不使用捕獸鋏、避免使用農藥和有毒餌劑
    不任意棄養寵物、不任意獵殺野生動物
    """
    content.badge = 3
    content.sound = UNNotificationSound.default
    content.categoryIdentifier = "catMessage"
    
    // 以下....略
}
  1. 在使用者點擊『守護石虎』後,可以再console看到如下訊息
使用者同意接收推播通知
title 守護石虎人人有責
userInfo [AnyHashable("link"): https://img5.cna.com.tw/www/WebPhotos/1024/20190828/960x960_268359289092.jpg]
actionIdentifier like

實機測試

  1. 點擊『接收石虎的訊息』,接者Home鍵

  1. 收到通知

  1. 由右邊往左邊滑動,並點擊檢視

  1. 預覽推播內容,出現兩個選項可以選擇
    『守護石虎』:開啟App
    『稍後在說』:關閉視窗

總結

在今天的文章裡,我們練習了客製化的推播通知,也可以從程式碼判斷使用者點擊的是哪一個按鈕。

今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 彼得潘的 Swift iOS App 開發問題解答集
    https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86

  2. iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
    https://www.udemy.com/course/ios-13-app-development-bootcamp/

  3. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  4. 心智圖軟體Xmind
    https://www.xmind.net/

  5. 南投縣友善石虎農作促進會《石虎家族的綠保運動》
    https://bnwinfor.com/2018/04/21/%E5%8D%97%E6%8A%95%E7%B8%A3%E5%8F%8B%E5%96%84%E7%9F%B3%E8%99%8E%E8%BE%B2%E4%BD%9C%E4%BF%83%E9%80%B2%E6%9C%83%E3%80%8A%E7%9F%B3%E8%99%8E%E5%AE%B6%E6%97%8F%E7%9A%84%E7%B6%A0%E4%BF%9D%E9%81%8B%E5%8B%95/

  6. 俄羅斯插畫家親繪石虎送台灣 有望登上彩繪列車!
    https://udn.com/news/story/7266/4013861

  7. 結合 iOS 10 的 User Notifications:傳送米花兒的幸福打氣通知
    https://www.appcoda.com.tw/ios10-user-notifications/

  8. apple dev doc notification center
    https://developer.apple.com/documentation/usernotifications/unusernotificationcenter

  9. Break in UIApplicationEndBackgroundTaskError() to debug
    https://forums.developer.apple.com/thread/22836

  10. UNUserNotificationCenter did receive response with completion handler is never called iOS10, swift 2.3
    https://stackoverflow.com/questions/38954496/unusernotificationcenter-did-receive-response-with-completion-handler-is-never-c

  11. "Can't end BackgroundTask" error message on iOS 13.0
    https://forums.developer.apple.com/thread/121990

  12. Sending Notification Requests to APNs
    https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns

  13. Learn How to Create iOS Apps
    https://www.devfright.com/use-usernotifications-framework-delegate-protocol/

  14. How to set local alerts using UNNotificationCenter
    https://www.hackingwithswift.com/example-code/system/how-to-set-local-alerts-using-unnotificationcenter


上一篇
Day31 石虎的推播通知
下一篇
Day33 WWDC 觀賞祕技
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言