【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】通知処理(ローカル通知)をUserNotifications FWで実装する方法について分かりやすく解説!

【Swift】通知処理(ローカル通知)をUserNotifications FWで実装する方法について分かりやすく解説!
ふくしま

こんにちは!株式会社メモリアインクの福嶋です!

この記事では、ユーザーのデバイスに重要なリマインダーやアラートを直接送信できるようにするために、UserNotificationsフレームワークを使用した通知処理(今回はローカル通知)について解説したいと思います。

この記事を読んで分かること…
・UserNotificationsフレームワークの基本
・ローカル通知をデバイスに送る方法
・フォアグラウンドでも通知を受け取る方法

目次

UserNotificationsフレームワークとは?

UserNotificationsフレームワークは、iOS 10以降で利用可能になった、アプリ内でユーザーに通知を送るためのフレームワークです。ローカル通知だけでなく、プッシュ通知の管理もこのフレームワークを通じて行います。

ローカル通知の基本設定

info.plistの設定

システムに通知機能を利用することを知らせるために、info.plistを設定します。
①info.plistを開いて、+アイコンをタップする
②「Privacy – User Notifications Usage Description」を検索して設定する
③通知機能を利用する理由を書く(通知機能使用許可を得る際のダイアログにここの理由が表示されます)

【Swift】通知処理(ローカル通知)をUserNotifications FWで実装する方法について分かりやすく解説!

通知機能を利用するためのユーザの許可を得る

ローカル通知を使用する前に、アプリが通知を送るためのユーザーの許可を得る必要があります。以下のコードは、アプリ起動時に通知の許可を求める例です。

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let center = UNUserNotificationCenter.current()
            center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
                if granted {
                    print("許可されました!")
                } else {
                    print("許可されませんでした!")
                }
            }
        return true
    }

...

この関数は、AppDelegateapplication(_:didFinishLaunchingWithOptions:)メソッド内で呼び出すことを推奨します。

アプリインストール後、main画面表示時に以下のダイアログが表示されます。

【Swift】通知処理(ローカル通知)をUserNotifications FWで実装する方法について分かりやすく解説!

出力結果:

//「許可」をタップした場合
許可されました!

//「許可しない」をタップした場合
許可されませんでした!

通知のスケジュール方法

前提:
通知を送信するためのボタンをView上に配置していること

【Swift】通知処理(ローカル通知)をUserNotifications FWで実装する方法について分かりやすく解説!

ローカル通知をスケジュールするには、以下のステップを踏みます。

import UIKit
import UserNotifications

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func tapButton(_ sender: Any) {
        scheduleLocalNotification()
    }
    
    func scheduleLocalNotification() {
        let content = UNMutableNotificationContent()
        content.title = "タイトル"
        content.body = "メッセージ内容"
        content.badge = 1
        content.sound = .default

        // 5秒後に通知をトリガーする
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

        // リクエストの作成と登録
        let request = UNNotificationRequest(identifier: "uniqueIdentifier", content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request)
    }
}

コードの説明:
・import UserNotificationsをインポート(2行目)
UNMutableNotificationContentを使用して、通知の内容(タイトル、本文、サウンド)を設定します。(15-18行目)
UNTimeIntervalNotificationTriggerで通知をトリガーする時間を設定します。(5秒後にトリガー)(21行目)
UNNotificationRequestに内容とトリガーを設定し、UNUserNotificationCenterにリクエストを追加します。(24-25行目)

以下のように、ボタンをタップして、バックグラウンドに戻り、5秒後に通知が来ていればOKです!

【Swift】通知処理(ローカル通知)をUserNotifications FWで実装する方法について分かりやすく解説!

フォアグラウンドでの通知の受け取り方法

import UIKit
import UserNotifications

@main
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let center = UNUserNotificationCenter.current()
            center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
                if granted {
                    print("Notification permission granted.")
                } else {
                    print("Notification permission denied.")
                }
            }
        // 通知センターのデリゲートを設定
                UNUserNotificationCenter.current().delegate = self
        return true
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        // 通知がフォアグラウンドで受け取られた場合の処理
        // ここでアラート、サウンド、バッジを設定できます
        completionHandler([.banner, .list, .sound, .badge])
    }

・・・

コードの説明:
・UserNotificationsフレームワークをインポート(2行目)
・UNUserNotificationCenterDelegateを追加(5行目)
・通知センターのデリゲートを設定(17行目)
・フォアグラウンドで通知が到着したときにどのように処理するかをuserNotificationCenter(_:willPresent:withCompletionHandler:)メソッド内に実装
。このメソッド内でcompletionHandlerを呼び出し、どの通知オプション(アラート、通知センター、サウンド、バッジ)を使用するかを指定します。

まとめ

いかがでしたか?
この記事では、Swiftを使用してiOSデバイスにローカル通知を送信する方法を詳しく解説しました。UserNotificationsフレームワークを活用することで、アプリのユーザビリティとエンゲージメントを大きく向上させることができます。
この記事が皆様のお役に立てれば幸いです!

ふくしま

この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

目次