Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

TODOの締切を通知する #6

Open
ginrou opened this issue May 15, 2015 · 0 comments
Open

TODOの締切を通知する #6

ginrou opened this issue May 15, 2015 · 0 comments

Comments

@ginrou
Copy link
Contributor

ginrou commented May 15, 2015

TODOアプリを作ってみようシリーズの第4回目の演習課題その2です。

内容

#5 に引き続き、この回ではTODOの締切日時になったら通知を出すようにします。

todo6

目的

UILocalNotificationについて理解する

スタート地点

前回のゴール地点であるブランチadd-deadlineからスタートします

ゴール地点

ブランチ local-notificationにチェックアウトすると解答を見ることができます

アプリの仕様

TODOの締切日時になったら端末から通知が表示されるようにします。

実装の方針

通知にはサーバーから通知を行うPush通知と、端末内で完結するUILocalNotificatoinの2種類があります。この二つの通知について見た目上の違いはありませんが、通知を送る元がサーバーか、アプリがインストールされている端末か、の違いがあります。

Push通知はシミュレータで利用できず、iOS Developer Programに登録しないと利用できないのと、Push通知を送るバックエンドを別途用意しないといけませ。UILocalNotificationはある位置に入った、あるいは時刻をトリガーとして通知を行います。
今回のケースではUILocalNotificationが適しているので、UILocalNotificationを利用します。

UILocalNotificationについては教材である 5. UILocalNotification に詳しく書いていますが、以下のステップで実装を行います。

  1. 通知をすることができるかを確認し、必要ならば許諾を得る
  2. 通知をスケジュールする

実装の解説

ToDoのローカル通知を行うようにした f852031

まず、通知を出すことについて許諾を得る必要があります。これはアプリ起動時などでも構いませんが、アプリ起動時にいきなり

このようなアラートが出た場合、反射的に "Don't allow" と押してしまうユーザーも多くいます。
ここで許諾を得られない場合、通知を受けるのが非常に難しくなります。
(ユーザー自身が、設定から修正しないといけない)

そのため、通知されることに納得のいくタイミングで表示することが望ましいです。
今回はTODOを追加したタイミングでそのことをユーザーに許諾を得ればよさそうです。

そこで、TODO新規追加のコールバック関数内で以下のような処理を行います。

  • 通知の状態を確認する
    • 通知が許可されている
      • 通知を登録する
    • 通知が許諾されていない
      • 通知の許諾を得る
      • (非同期処理)
      • 通知を登録する

という手順になります。

通知の許諾を得たことを知らせるコールバック関数は appDelegateにあります。
この関数からViewControllerに知らせる必要がありますが、今回はNSNotificationを利用してプロセス内に通知します。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant