納豆の日(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])
}
}
参考文献
<Swift>iOS 10 User Notifications Framework実装まとめ
【Swift】User Notifications frameworkでローカル通知機能の実装(バックグラウンド/フォアグラウンドでの表示)