Задержка повторного уведомления пользователя на iOS

При планировании уведомления пользователя на iOS, есть ли способ добавить начальную задержку к UNCalendarNotificationTrigger при выполнении сопоставления даты?

Например: через 3 дня начните отправлять локальное уведомление один раз в день.

Причина, по которой я хочу добиться этого, заключается в том, что в моей схеме уведомлений используются разные органы уведомлений - первые пару дней запланированы как неповторяющиеся, с разной копией каждый раз, а через n дней я хочу, чтобы повторное уведомление запускалось.

1 ответ

Решение

Согласно многочисленным дискуссиям на тему SO, это невозможно.

Вы можете создать определенное количество локальных уведомлений для определенных дат в цикле for, я полагаю, что ограничение составляет 50 для каждого приложения, а затем, когда приложение откроется на переднем плане ПОСЛЕ 3 дней, у вас будет возможность удалить их и использовать повторяющиеся уведомления.

Это не самое элегантное решение, но если вы ДОЛЖНЫ сделать это, то это единственный способ, и этого должно быть достаточно, если пользователь не откроет приложение в течение 50 дней или около того из уведомлений в очереди, они, вероятно, не откроют его снова. тем не мение.

Первоначальная ручная настройка для смещения с задержкой на 3 дня будет такой:

for dayOffset in 3...33 {
    let nextTriggerDate = Calendar.current.date(byAdding: .day, value: dayOffset, to: Date())!
    let comps = Calendar.current.dateComponents([.year, .month, .day], from: nextTriggerDate)

    let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
    // Create a notification here
    // ...
}

Вы должны создать логику, чтобы определить, когда приложение открыто, и это происходит через 3 дня и повторяется бесконечно.

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

Другие вопросы по тегам