Как назначить локальное уведомление для следующего сценария?
Эксперты, у меня есть сценарий, в котором мне нужно уведомлять пользователя три раза в день (утром, днем, вечером). И тайминги для этих уведомлений будут отличаться для каждого дня, основываясь на значениях базы данных для каждой даты.
Эти три уведомления настраиваются. Значение пользователя может просто выбрать день и вечер, выключая утреннее уведомление в настройках.
В соответствии с моим пониманием я могу добиться этого, используя локальные уведомления.
Я могу сделать следующее:
- до того, как приложение выйдет, внутри didFinishLaunchingWithOptions, я могу проверить, что является следующим уведомлением, установленным (включено-выключено). Если он установлен, я планирую его. Если нет, я перехожу к следующему типу уведомления и делаю то же самое. Если все уведомления отключены, очевидно, что никаких уведомлений не будет запланировано.
Теперь, когда появляется уведомление, я вижу предупреждение с двумя кнопками "Закрыть" и "Вид".
Если пользователь выбирает "Просмотр", мое приложение возвращается к активному и до того, как пользователь выйдет из следующего уведомления.
Пока все хорошо.
Теперь, если пользователь выбирает "Закрыть", что мне делать? Он не запускает мое приложение, и поэтому следующее уведомление не будет запланировано?
Как мне это достичь?
Есть ли лучший способ сделать это?
Помощь! Помогите! Помогите!
Ответы
Ответ 1
Вы можете просто планировать все (или многие) уведомления за один раз. Вам не нужно ждать, пока пользователь будет Просмотреть ваше приложение, чтобы запланировать следующее уведомление.
Из документы в UILocalNotification,
Приложение может иметь только ограниченное количество запланированных уведомления; система хранит самые быстрые 64 сообщения (с автоматически перенесенными уведомлениями, считающимися одиночными уведомление) и отбрасывает остальные
Итак, если у вас есть 3 уведомления в день, вы можете предварительно запланировать 3 недели уведомлений сразу. Я полагаю, что у вас все еще будет проблема, если пользователь не откроет ваше приложение в течение месяца, но вам нужно беспокоиться об этом сценарии?
В любом случае, я просто хотел удостовериться, что вам не нужно планировать эти уведомления по одному за раз.
Пример:
UILocalNotification* n1 = [[UILocalNotification alloc] init];
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60];
n1.alertBody = @"one";
UILocalNotification* n2 = [[UILocalNotification alloc] init];
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90];
n2.alertBody = @"two";
[[UIApplication sharedApplication] scheduleLocalNotification: n1];
[[UIApplication sharedApplication] scheduleLocalNotification: n2];
Итак, даже если пользователь выбирает Закрыть, когда появляется первое уведомление, второй будет доставлен.
Кстати, метод didFinishLaunchingWithOptions
вызывается сразу после запуска вашего приложения, а не прямо перед его закрытием. Тем не менее, вы можете планировать новые уведомления, когда захотите.
Ответ 2
Вы также можете использовать свойство repeatInterval
, чтобы они перенести себя на неопределенный срок. Однако вы ограничены единицами в NSCalendarUnit
. Дополнительную информацию см. В docs.