【Swift】ローカルプッシュを送信する
今日はタイトルの通り、Swift
でローカルプッシュを送信する方法を紹介したいと思います👷♀️ ちなみに、実装は Swift5.3
で動作確認は iOS14.1
で行っておりやす。
それではやっていく🦅
まずは、通知を送信できるようにするためにユーザに許可してもらう必要があります。
func requestAuthorizationForNotification() { let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { granted, error in // リクエスト終了した時のハンドリング } }
requestAuthorization
の completionHandler
の第一引数、第二引数の内容は下記の通りになります。
granted
- 一つ以上のオプションが許可されたかどうかの
Boolean
。オプションについては こちら を参照してください。
- 一つ以上のオプションが許可されたかどうかの
error
- エラー情報を含むオブジェクト。
また、アプリがフォアグランド状態にある時もバックグランド時と同じように通知を表示させたいので AppDelegate
で下記のようにコードを付け加えます。ちなみに、イベントを受け取るために UNUserNotificationCenter.current().delegate = self
の設定は必要なので、起動時などに適所設定しましょう。
extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.badge, .sound, .alert]) } }
次に、ローカルプッシュを送信するためのコードを書いていきます。下記がメソッドが呼ばれてから 5秒後
に通知を送信するサンプルコードです。
func sendNotificationAfterFiveSeconds() { let content = UNMutableNotificationContent() content.title = "これはタイトルです" content.body = "これはボディです" content.sound = UNNotificationSound.default let request = UNNotificationRequest(identifier: "fiveSeconds", content: content, trigger: UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)) UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) }
UNMutableNotificationContent
は、通知のタイトルやメッセージ、サウンドなどのコンテンツを設定するためのクラスです。ちなみに、userInfo
などの通知のカスタム情報などもこのクラスで設定します。詳しくは下記を参照してみてください。
UNNotificationRequest
では、その名の通り通知のリクエストを作成します。引数の identifier
には通知の一意の識別子を、content
には前述した通知のコンテンツを、trigger
には通知を送信するトリガーをそれぞれ設定します。
トリガーには、主に下記の4つの種類がありますが、最後の UNPushNotificationTrigger
はリモートプッシュ通知が送信される際にシステムによってインスタンスが生成されるので、ローカルで通知を送信する際は上3つがトリガーになります。また、即時通知を送信したい場合は trigger
引数を nill
に設定します。
今回の場合だと、UNTimeIntervalNotificationTrigger
を使用して 5秒後
に通知を送信できるようにしています。その他にも UNCalendarNotificationTrigger
を使用すればイベントの予定日に通知を送ったり、UNLocationNotificationTrigger
を使用することで特定の場所に到着した時に通知を送るなんてこともできます。
ちなみに、UNUserNotificationCenter.current().add
で設定してリクエストで、既にスケジュールされている identifier
があるものはスケジュールが上書きされます。
という感じで今日は以上になります🦅
参考
- https://developer.apple.com/documentation/usernotifications/unmutablenotificationcontent
- https://developer.apple.com/documentation/usernotifications/unnotificationrequest/1649635-trigger
- https://qiita.com/Qiita/items/c686397e4a0f4f11683d