Задержка повторного уведомления пользователя на 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 после нескольких дней, когда он идет "Эти уведомления не работают... мы переходим их на некоторое время ")