[SwiftUI]What I wear counter/着た回数カウンタ - (8) Local Notification Update
- handmadeapp
- 2020年3月31日
- 読了時間: 2分
更新日:2020年4月6日
着た回数カウントのアプリユーザ(夫)から、
Notificationについてバグの報告がありました。
<期待する挙動>
・夜10時に未登録の場合、リマインド(Notification)を受け取る設定にしている。
・その日に着たものを未登録の場合、リマインドが来る。
・その日に着たものを登録済みの場合、リマインドが来ない。
<実際の挙動>
・その日に着たものを未登録の場合、リマインドが来る。→OK
・その日に着たものを登録済みの場合もリマインドが来る。→NG
なぜだろう。。
リマインドを出す条件は、
「UserDefaults.standard.string(forKey: "lastRegisterDate")」は、
とUserDefaultsにセットしてあり、
「Utility.dateFormat」は、
とフォーマットを定義し、String型にして比較。
【可能性としてあるのは、Timezone?】
DefaultはGMTでDate()がセットされるので、
GMTではまだ前日のうちに着たもの登録→登録済みなのにリマインド?
ということで、「Utility.dateFormat」にTimeZoneを設定。
加えて、リマインドメッセージのBodyに、比較対象を出すようにしておく。
こんな感じで日付が出るので、今後の修正に役立つはず。

【Scheduleがセットされていない?】
Timezoneの設定で解決するかと思いきや、数日後、以下のリマインドが。

アプリ側の最終登録日は、「2020/04/02」

何がダメなんだろう。。
【リマインド表示の条件判断タイミング】
よくよく見直してみると、条件判断→当てはまる場合に
「UNUserNotificationCenter.current().add(request) 」。
つまり、「repeats: true」のNotificationを設定時の条件判断でセットしているだけで、
Repeat時に毎回条件判断をするわけでは無い。。
通りで。。
ということは、このリマインドの位置付けとしては、当日の登録有無に関わらず、
「登録のお時間ですよ」ということを知らせてもらうもの、とするしかなさそう。
仕方ない、ということで、シンプルに・・・↓
加えて、この修正対応中に気がついたことが。。
元々のTimeSettingViewは以下の通り。
AlertTimeの「isOn」がTrueになったときに、Notificationをセットするようにしており、
OFF(デフォルト)→時間設定→ONにする、の場合には問題無いが、
ON→時間設定(変更)、の場合に変更された時間が登録されないことが判明。
そのため、「func updateSetTime」にて、
AlertTimeが「isOn」の場合に、Notificationをセットするよう追加。
色々問題ありでした。ユーザが一人で良かった!
Comments