こんにちは!株式会社メモリアインクの福嶋です!
この記事では、ユーザーのデバイスに重要なリマインダーやアラートを直接送信できるようにするために、UserNotificationsフレームワークを使用した通知処理(今回はローカル通知)について解説したいと思います。
この記事を読んで分かること…
・UserNotificationsフレームワークの基本
・ローカル通知をデバイスに送る方法
・フォアグラウンドでも通知を受け取る方法
UserNotificationsフレームワークとは?
UserNotifications
フレームワークは、iOS 10以降で利用可能になった、アプリ内でユーザーに通知を送るためのフレームワークです。ローカル通知だけでなく、プッシュ通知の管理もこのフレームワークを通じて行います。
ローカル通知の基本設定
info.plistの設定
システムに通知機能を利用することを知らせるために、info.plistを設定します。
①info.plistを開いて、+アイコンをタップする
②「Privacy – User Notifications Usage Description」を検索して設定する
③通知機能を利用する理由を書く(通知機能使用許可を得る際のダイアログにここの理由が表示されます)
通知機能を利用するためのユーザの許可を得る
ローカル通知を使用する前に、アプリが通知を送るためのユーザーの許可を得る必要があります。以下のコードは、アプリ起動時に通知の許可を求める例です。
@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
}
...
この関数は、AppDelegate
のapplication(_:didFinishLaunchingWithOptions:)
メソッド内で呼び出すことを推奨します。
アプリインストール後、main画面表示時に以下のダイアログが表示されます。
出力結果:
//「許可」をタップした場合
許可されました!
//「許可しない」をタップした場合
許可されませんでした!
通知のスケジュール方法
前提:
通知を送信するためのボタンをView上に配置していること
ローカル通知をスケジュールするには、以下のステップを踏みます。
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です!
フォアグラウンドでの通知の受け取り方法
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エンジニアを目指すなら【ユニゾンキャリア】
コメント
コメント一覧 (1件)
[…] […]