Trick or Treat!渡部です。
最近食欲がやばいです。
栗、芋、南瓜の魅力に勝てません。
かといって運動もしたくありません。
このままでは太ってしまいます。
DevからDebuになったらおしまいです。
せめて夕飯だけでも抑えねば!と思い
何か役立つアプリを作ってみようと考えました。
毎日食べたものを記録するアプリは作るのも
使うのも面倒です。
何もしなくても戒めてくれるアプリ・・・
そうや!飯時に通知がくるアプリ作ったろ!
ってことで夕飯時に戒めの言葉を送ってくるアプリを作ろうと思います。
割と忙しいし面倒なので最低限の簡単な構成で作ろう!
手順
・適当に画面を作る
・ローカル通知を実装
・実行
サクッといきます!
適当に画面を作る
今回は画面は必要ないので弊社サービスを牛耳るふろぐん(4回目)の
ハロウィンバージョンを表示させます。
特に意味はありません。
ローカル通知を実装
次に通知の実装です。
前回にリモート通知の実装をしたので詳しくはそちらを参照ください。
まずは3秒後に通知がくるように実装します。
以下のコードを丸々コピペすればおけ!です。
AppDelegate.swiftに書きます。
import UIKit import UserNotifications // 追加 import NotificationCenter // 追加 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // 全ての通知を一括で削除 UNUserNotificationCenter.current().removeAllPendingNotificationRequests() // 通知許可ダイアログ UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if granted {print("通知許可")} } // 通知の設定 let notificationContent = UNMutableNotificationContent() notificationContent.title = "よう、デブ!" notificationContent.body = "飯食ってる場合じゃねーぞ!" notificationContent.sound = UNNotificationSound.default() // 3秒後に通知 let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 3, repeats: false) let request = UNNotificationRequest.init(identifier: "YoDebuNotification", content: notificationContent, trigger: trigger) let notificationCenter = UNUserNotificationCenter.current() notificationCenter.add(request) notificationCenter.delegate = self return true } // 通知の受信 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert,.sound]) } // 通知に対する操作 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { // alertで表示 let contentBody = response.notification.request.content.body let alert:UIAlertController = UIAlertController(title: "何も食べません!", message: contentBody, preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { (action:UIAlertAction!) -> Void in print("食べないことを誓いました。") })) self.window?.rootViewController?.present(alert, animated: true, completion: nil) completionHandler() } }
実行
これを実行するとこんな感じで表示されます。
アプリを閉じていても
ふろぐんがにくたらしいですね!
次に時間を指定します。
だいたい21時ごろが夕飯の時間帯なので
21時に通知がくるように設定します。
// 21時に設定 let notificationContent = UNMutableNotificationContent() notificationContent.title = "よう、デブ!" notificationContent.body = "飯食ってる場合じゃねーぞ!" notificationContent.sound = UNNotificationSound.default() let date = DateComponents(hour:21) let trigger = UNCalendarNotificationTrigger.init(dateMatching: date, repeats: true) let request = UNNotificationRequest.init(identifier: "YoDebuNotification", content: notificationContent, trigger: trigger) let notificationCenter = UNUserNotificationCenter.current() notificationCenter.add(request) notificationCenter.delegate = self
以上で完了です。
UNCalendarNotificationTrigger.init(dateMatching: date, repeats: true)
のrepeatsをtrueにしとけば毎日繰り返し通知がくるようになります。
おわり
モンブラン、かぼちゃの煮物、焼き芋に秋刀魚。。。
なかなか食欲を抑えるのは厳しいですが
こういったアプリで自分を律することにします!
できれば・・・ですが・・・
今日はハロウィンのせいか
お菓子が賑わっています。
早速律することをやめます。