iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Mobile Development

我將成為Swift之強者系列 第 13

Day13 - 仿刻 iOS 鬧鐘實作:AppDelegate 與通知權限設定

  • 分享至 

  • xImage
  •  

Day13 - 仿刻 iOS 鬧鐘實作:AppDelegate 與通知權限設定

在上一篇文章中,我們已經建立了基本的 鬧鐘資料結構 (AlarmData),並且準備好管理鬧鐘所需的基礎資料。
今天要帶大家進一步完成一個很重要的功能:通知權限請求

畢竟,如果我們沒有請求通知權限,系統就算排程了鬧鐘,也不會跳出提醒。那我們的鬧鐘 App 就完全失去意義了。


為什麼要設定通知權限?

iOS 的設計相當注重使用者隱私與體驗。
要顯示通知(無論是提醒事項、鬧鐘、還是其他推播),App 必須經過使用者授權。

而這個授權動作通常會在 App 第一次啟動時第一次要用到通知功能時 彈出詢問視窗。
這樣,使用者就能決定要不要允許通知。


在 AppDelegate 中加入通知授權請求

首先,我們需要在 AppDelegate 中導入 UserNotifications,並在
application(_:didFinishLaunchingWithOptions:) 內進行權限請求。

import UIKit
import UserNotifications

@main
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        // 設定通知中心的 delegate
        UNUserNotificationCenter.current().delegate = self
        
        // 向使用者請求通知權限
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
            if granted {
                print("✅ 使用者允許通知")
            } else {
                print("❌ 使用者拒絕通知")
            }
        }
        
        return true
    }
}

這段程式碼的重點有兩個:

  1. delegate 設定 → 讓 AppDelegate 可以處理通知相關的事件。
  2. requestAuthorization → 彈出 iOS 系統內建的通知授權視窗。

處理通知顯示:willPresent 方法

即使使用者允許通知,我們也要告訴系統 該如何呈現通知
這就是 userNotificationCenter(_:willPresent:withCompletionHandler:) 的用途。

func userNotificationCenter(_ center: UNUserNotificationCenter, 
                            willPresent notification: UNNotification, 
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        
        // 指定通知要如何顯示
        completionHandler([.alert, .sound, .badge])
}

說明:

  • .alert → 彈出視窗提醒
  • .sound → 播放鬧鐘聲音
  • .badge → 更新 App Icon 上的數字

這樣就能確保當鬧鐘時間到時,通知能正常跳出來,不會被系統靜默忽略。


成果展示

當我們完成以上設定,第一次啟動 App 時,會跳出系統的通知授權視窗:

「是否允許此 App 傳送通知?」

如果使用者選擇「允許」,那麼鬧鐘的提醒就能順利發送;
反之,若選擇「不允許」,就算你排程了鬧鐘,也不會響起。


小結

今天我們完成了 通知權限設定,這是鬧鐘 App 中不可或缺的一環。

  • 學會如何在 AppDelegate 中請求通知權限
  • 設定通知顯示方式(alert / sound / badge)
  • 確保鬧鐘能在前景或背景下正確跳出提醒

上一篇
Day12 - 仿刻IOS鬧鐘實作:Realm 資料庫模型設計
系列文
我將成為Swift之強者13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言