iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
0
Mobile Development

想知道自己iOS具現化系能力有多強嗎?實作幾個App就知道了系列 第 30

Day30-終於完賽啦之用iOS本地推播來慶祝一下!!

很難得,有一件事情能持續以恆地堅持一個月(除了變胖這件事以外),最後的分享就來講講本地推播吧:

本地推播:

要執行本地推播,必須跟使用者取得權限,我想要讓App一開始運行的時候就跟使用者要權限,所以我寫在這個開始運行時會呼叫的方法內

首先在Appdelegate.swift內找到這個方法:func application(_:didFinishLaunchingWithOptions),這個方法的定義可以參考官網的開發者文檔說明:
https://ithelp.ithome.com.tw/upload/images/20201015/20129144k22eKnMxhd.png


在這個方法內,先實例化一個通知中心,並且向使用者要權限,如果成功,則呼叫sendMyMessage()

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert,.sound,.badge]) { (success, error) in
            if success
            {
                self.sendMyMessage()
            }else
            {
                print("在",#function,"發生了錯誤,錯誤訊息為:",error?.localizedDescription)
            }
        }
        return true
    }

上述有提到獲取使用者權限成功後會呼叫sendMyMessage(),現在來實作這個方法的內容,由於我在跟使用者要全限時,我要了文字、聲音、圖示通知這三種權限,所以我在推播的內容也要輸入這些內容:

 func sendMyMessage()
    {
        let content = UNMutableNotificationContent()
        content.title = "今天是鐵人賽第三十天"
        content.body = "我終於挑戰成功啦!!"
        content.badge = 999
        content.sound = UNNotificationSound.default
        
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)
        let request = UNNotificationRequest(identifier: "weakJimmy", content: content, trigger: trigger)
        let center = UNUserNotificationCenter.current()
        center.add(request)
    }

現在只要打開App之後,在trigger設定的時間內跳到桌面,就會在第十秒的時候跳出通知:
https://ithelp.ithome.com.tw/upload/images/20201015/20129144HHLPY9N1U8.png


上一篇
Day29-使用CollectionView來實作廣告自動輪播
系列文
想知道自己iOS具現化系能力有多強嗎?實作幾個App就知道了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
ytyubox
iT邦新手 5 級 ‧ 2020-10-15 18:51:04

鐵人賽的網站的 code block 有些麻煩,針對下面的程式碼我會改寫

print("在",#function,"發生了錯誤,錯誤訊息為:",error?.localizedDescription)

改寫成

print("在",
      #function,
      "發生了錯誤,錯誤訊息為:",
      error?.localizedDescription)

相對簡單閱讀一點 XD

好的,感謝~好閱讀很多,這個方法我知道,只是常常忘記用...

0
ytyubox
iT邦新手 5 級 ‧ 2020-10-15 18:51:18

恭喜完賽~

謝謝!!也恭喜游諭哥在Objective-C的路上愈走愈遠!!

我要留言

立即登入留言