Планирование второго уведомления, если вначале игнорируется в быстром (или завершении любого действия, если уведомление игнорируется)
Итак, у меня есть приложение, которое в настоящее время находится в магазине приложений, которое заранее рассылает 10 уведомлений, предполагая, что вы пропустили один, у вас все равно будет второй шанс или десять. Теперь, прежде чем вы подумаете, что я буду беспокоить человека, уведомление очень важно для функциональности приложения и на самом деле является главной целью. Приложение было создано для iOS 7, поэтому в то время не было "handleActionWithIdentifier", который, по моему мнению, может завершить действия для приложения, даже если он закрыт в зависимости от ответа пользователей на уведомление. Это обновление было очень полезно для приложения, поскольку оно устраняет часть моей проблемы при открытии приложения для ответа на уведомление (уведомления задают пользователю вопрос и в зависимости от ответа, что-то завершают).
Остается проблема - обнаружить, было ли упущено уведомление, как я могу сделать другое уведомление, например, на следующий день, если уведомление отклонено или проигнорировано. Я искал это в google и переполнении стека, и из моего понимания все предыдущие вопросы задавали вопрос о том, как обнаружить, было ли упущено уведомление, открытое приложение, которое мне не нужно.
В этот момент я могу правильно запустить код, если пользователь отвечает на уведомление, нажав одну из опций уведомления:
func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
var userInfo = [NSObject: AnyObject]()
userInfo["text"] = responseInfo[UIUserNotificationActionResponseTypedTextKey]
NSNotificationCenter.defaultCenter().postNotificationName("text", object: nil, userInfo: userInfo)
print(userInfo)
completionHandler()
}
как сейчас, я просто беру ввод текста и печатаю его, но я мог бы запустить второе уведомление, если захочу. Есть ли способ обнаружения уведомления о пропущенном уведомлении и планирования другого уведомления?
Всегда есть шанс, что все еще невозможно сделать то, что я хочу, и я бы просто заплатил 10 уведомлений заранее, что кажется неаккуратным и не позволяет мне делать ответ как итеративный.
TL;DR; как я могу обнаружить и запустить код, если локальное уведомление пропущено БЕЗ открытия приложения
BTW: если у вас есть ответы, swift является предпочтительным языком
Ответы
Ответ 1
Вы можете использовать смесь Фоновая выборка и Некорректный тест метки времени.
Например:
Когда вы планируете уведомление, вы можете сохранить некоторую логику, которая позволит вам отслеживать, было ли это уведомление проигнорировано или нет. Возможно, сохраните некоторые данные в NSUserDefaults
, который был последним Notification, и , когда он должен быть запущен O.S.
Один из способов - проверить , что отметка времени:
Если вы запустите этот тест после момента его запуска (и, возможно, немного поздно, на всякий случай, если пользователь увидит его, но все еще не готов ответить), и вы еще не отметили его как не игнорируется, тогда пользователь может игнорировать или пропустить ваше уведомление.
Этот тест должен быть доступен в AppDelegate.
Затем включить функцию Фоновая выборка в Режимы фона.
Это даст некоторое время процессора вашему приложению (, когда iOS считает, что это хорошо время для этого), и вы можете воспользоваться этой возможностью; -).
Для того, чтобы сделать это, вам нужно добавить правильную функцию в свою реализацию AppDelegate
:
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// your code
}
В этом теле функции запустите тест для игнорируемого уведомления и при необходимости планируйте новые уведомления.
Не забудьте позвонить completionHandler
, как только вы закончите тест!