Подтвердить что ты не робот

Как назначить локальное уведомление для следующего сценария?

Эксперты, у меня есть сценарий, в котором мне нужно уведомлять пользователя три раза в день (утром, днем, вечером). И тайминги для этих уведомлений будут отличаться для каждого дня, основываясь на значениях базы данных для каждой даты.

Эти три уведомления настраиваются. Значение пользователя может просто выбрать день и вечер, выключая утреннее уведомление в настройках.

В соответствии с моим пониманием я могу добиться этого, используя локальные уведомления.

Я могу сделать следующее: - до того, как приложение выйдет, внутри didFinishLaunchingWithOptions, я могу проверить, что является следующим уведомлением, установленным (включено-выключено). Если он установлен, я планирую его. Если нет, я перехожу к следующему типу уведомления и делаю то же самое. Если все уведомления отключены, очевидно, что никаких уведомлений не будет запланировано.

Теперь, когда появляется уведомление, я вижу предупреждение с двумя кнопками "Закрыть" и "Вид". Если пользователь выбирает "Просмотр", мое приложение возвращается к активному и до того, как пользователь выйдет из следующего уведомления.

Пока все хорошо.

Теперь, если пользователь выбирает "Закрыть", что мне делать? Он не запускает мое приложение, и поэтому следующее уведомление не будет запланировано?

Как мне это достичь? Есть ли лучший способ сделать это?

Помощь! Помогите! Помогите!

4b9b3361

Ответ 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.