納豆の日(7/10)にLocalNotificationを飛ばす

はじめに

oh! natto!というアプリをリリースしているのですが、納豆をモチーフにしたアプリなので7月10日納豆の日にローカルプッシュ通知を出したいと思い実装しました。

LocalNotificationでユーザの復帰率が増やすことが目的です!

アプリによってイベント日などにLocalNotificationを飛ばすことは結構あるんじゃないかと思っています。参考になれば幸いです。

コード

AppDelegateで設定を行いました。

UNUserNotificationCenter.requestAuthorizationでプッシュ通知の許可のアラートを表示を行い、setLocalNotificationメソッド内で定義をしています。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .badge, .sound]) {(granted, error) in
            if granted {
                print("許可する")
            } else {
                print("許可しない")
            }
        }
        setLocalNotification(title:"今日は納豆の日です", message:"oh! natto!で納豆を混ぜてみませんか?",month: 7, day: 10)
        return true
    }

private func setLocalNotification(title:String = "", message:String, month: Int, day: Int,hour:Int = 9, minute:Int = 0, second:Int = 0 ){
        // タイトル、本文、サウンド設定の保持
        let content = UNMutableNotificationContent()
        content.title = title
        content.body = message
        content.sound = UNNotificationSound.default
        
        var notificationTime = DateComponents()
        notificationTime.month = month
        notificationTime.day = day
        notificationTime.hour = hour
        notificationTime.minute = minute
        notificationTime.second = second
        
        let trigger: UNNotificationTrigger = UNCalendarNotificationTrigger(dateMatching: notificationTime, repeats: false)
        
        // 識別子とともに通知の表示内容とトリガーをrequestに内包
        let request = UNNotificationRequest(identifier: "Natto", content: content, trigger: trigger)
        
        // UNUserNotificationCenterにrequestを加える
        let center = UNUserNotificationCenter.current()
        center.delegate = self
        center.add(request) { (error) in
            if let error = error {
                print(error.localizedDescription)
            }
        }
    }

アプリがフォアグラウンドの状態でも通知を行い為以下の様に設定を行っています。

extension AppDelegate: UNUserNotificationCenterDelegate{
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        // アプリ起動中でもアラートと音で通知
        completionHandler([.alert, .sound])
    }
}

参考文献

[Swift3]ローカル通知の実装方法

<Swift>iOS 10 User Notifications Framework実装まとめ

【Swift】User Notifications frameworkでローカル通知機能の実装(バックグラウンド/フォアグラウンドでの表示)

Swift

前の記事

ひらがな化APIを使ってみる
Swift

次の記事

依存関係逆転の原則(DIP)