1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Swift】プッシュ通知の取得と、ローカルプッシュ通知の送信方法

Last updated at Posted at 2022-09-17

プッシュ通知の取得

手順1

info.plistに Privacy - User Notifications Usage Description を追記する。
※追記理由:Alertの文言をわかりやすいものに変更する為。
スクリーンショット 2022-09-17 13.00.46.png

手順2

AppDelegate.swiftにUserNotificationsをインポートする

AppDelegate.swift
import UserNotifications

手順3

フォアグラウンド(アプリが起動状態)で受け取れるようにする
※いらない人はスキップ

AppDelegate.swift
extension AppDelegate: UNUserNotificationCenterDelegate {
    // フォアグラウンドの場合でも通知を表示する
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.list, .sound,])
    }
}

スクリーンショット 2022-09-17 13.18.00.png

手順4

アプリのバッジの更新、サウンド、アラートの通知に関してユーザへ確認するためのアラートを表示する
delegate忘れずに。

AppDelegate.swift
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) {(granted, error) in
    if granted {
        print("許可する")
        UNUserNotificationCenter.current().delegate = self
    } else {
        print("許可しない")
    }
}

ローカルプッシュ通知の送信

説明

インスタンス生成

sample.swift
let content = UNMutableNotificationContent()

各項目を入力(初期値のままでいい場合、一部省略可能)

sample.swift
content.title = "タイトル"
content.subtitle = "サブタイトル"
content.body = "タップしてアプリを開いてください"
content.sound = UNNotificationSound.default

トリガー作成
timeInterval : (Int)何秒後に発火させるかを定義
repeats : (bool)リピート
参考:

sample.swift
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10,
                                                repeats: false)

request作成

identifier:(String)通知毎に一意の文字が好ましい。Date()とか。
content:(UNMutableNotificationContent)
trigger:(UNTimeIntervalNotificationTrigger)

sample.swift
let request = UNNotificationRequest(identifier: "Timer",
                                    content: content,
                                    trigger: trigger)

UNUserNotificationCenterにrequest

sample.swift
UNUserNotificationCenter.current().add(request) { (error) in
    if let error = error {
        print(error.localizedDescription)
    }
}

以下全文

使いたいクラスの関数に入れる。.swift
// タイトル、本文、サウンド設定の保持
let content = UNMutableNotificationContent()
content.title = "タイトル"
content.subtitle = "サブタイトル"
content.body = "タップしてアプリを開いてください"
content.sound = UNNotificationSound.default

// seconds後に起動するトリガーを保持
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10,
                                                repeats: false)
// 識別子とともに通知の表示内容とトリガーをrequestに内包する
let request = UNNotificationRequest(identifier: "Timer",
                                    content: content,
                                    trigger: trigger)

// UNUserNotificationCenterにrequest
UNUserNotificationCenter.current().add(request) { (error) in
    if let error = error {
        print(error.localizedDescription)
    }
}

サンプルプロジェクト

最後に

iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも🦾
色々やってます。もし良かったら見てってください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?