🫥

SwiftUIでローカルプッシュの送信&受信時の処理(AppDelegate)

2024/08/26に公開

前回のおさらい

前回の記事では、SwiftUIでAppDelegateクラスを作成し、アプリ起動時にイベントを検知してログ出力を行う方法を紹介しました。これにより、SwiftUIアプリでも従来のAppDelegate機能を利用できるようになりました。前回の記事はこちら

今回の目的

今回は、以下の2つの機能を実装します。

  1. アプリ起動時に指定した秒数後にローカルプッシュ通知を送信する。
  2. プッシュ通知をタップしてアプリが起動された際に、そのイベントを検知してログを出力する。

実装手順

1. AppDelegateクラスの変更

まずは、前回作成したAppDelegateクラスに、プッシュ通知の許諾と送信、受信時の処理を追加します。

// UNUserNotificationCenterDelegateプロトコルを追加
class AppDelegate: NSObject, UIApplicationDelegate,UNUserNotificationCenterDelegate {
    
    /// <#Description#>
    /// アプリ起動時の処理
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        
        print("___application:didFinishLaunchingWithOptions")
        
        //=====追加========================================================
        // Push通知許諾処理
        let center = UNUserNotificationCenter.current()
        center.delegate = self // 追加
        center.requestAuthorization(options: [.alert, .sound, .badge]) { _, error in //
            if let error {
                // 通知が拒否された場合
                print(error.localizedDescription)
            } else {
                print("Push通知許諾OK")
                sendPush()
            }
        }
        application.registerForRemoteNotifications()

        // 5秒後にPushを送る
        sendPush()
        //===============================================================
        return true
    }
    // 追加
    /// Push通知押下時の処理
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        print("___userNotificationCenter:didReceive")
        print("Pushがタップされました。")
        completionHandler()
    }  
}

2. プッシュ通知を送信するメソッドの追加

次にPush通知を登録する処理を追加する

// 追加
///10秒後にPushを送る
func sendPush() {
    let content = UNMutableNotificationContent()
    content.title = "Pushテスト"
    content.body = "アプリ起動から10秒にPush通知"
    content.sound = .default

    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)
    let request = UNNotificationRequest(identifier: "notification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}

動作確認

このコードを実装した状態でアプリを起動すると、以下のことが確認できます。

  • 初回起動時には、プッシュ通知の許可を求めるポップアップが表示されます。許可が得られた場合、アプリ起動後10秒後にプッシュ通知が送信されます。
  • 送信されたプッシュ通知をタップしてアプリを起動すると、コンソールに「Pushがタップされました。」とログが出力されます。

お願い

実務経験も少なく、Swiftは学習中の段階であるため、記事の内容にご指摘やアドバイス等ありましたらコメントいただけると幸いです。

Discussion