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

Планирование второго уведомления, если вначале игнорируется в быстром (или завершении любого действия, если уведомление игнорируется)

Итак, у меня есть приложение, которое в настоящее время находится в магазине приложений, которое заранее рассылает 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 является предпочтительным языком

4b9b3361

Ответ 1

Вы можете использовать смесь Фоновая выборка и Некорректный тест метки времени.

Например:

Когда вы планируете уведомление, вы можете сохранить некоторую логику, которая позволит вам отслеживать, было ли это уведомление проигнорировано или нет. Возможно, сохраните некоторые данные в NSUserDefaults, который был последним Notification, и , когда он должен быть запущен O.S.

Один из способов - проверить , что отметка времени:

Если вы запустите этот тест после момента его запуска (и, возможно, немного поздно, на всякий случай, если пользователь увидит его, но все еще не готов ответить), и вы еще не отметили его как не игнорируется, тогда пользователь может игнорировать или пропустить ваше уведомление.

Этот тест должен быть доступен в AppDelegate.

Затем включить функцию Фоновая выборка в Режимы фона.

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

Для того, чтобы сделать это, вам нужно добавить правильную функцию в свою реализацию AppDelegate:

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
       // your code
    }

В этом теле функции запустите тест для игнорируемого уведомления и при необходимости планируйте новые уведомления.

Не забудьте позвонить completionHandler, как только вы закончите тест!