Триггер уведомлений iOS: раз в две недели и / или ежеквартально

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

Я хотел бы запланировать повторное уведомление (iOS 10+ так UNCalendarNotificationTrigger или эквивалент).
Это локальные уведомления, а не push-уведомления.

Моя цель:

Расписание уведомлений, которые повторяются:

  • раз в две недели (например, каждый второй вторник)
  • один раз в квартал (например, 1 раз в 3 месяца)

Мой текущий подход:

Эти триггеры работают хорошо и просты в реализации (Запуск кода в Swift Playground).

// Every day at 12pm
var daily = DateComponents()
daily.hour = 12
let dailyTrigger = UNCalendarNotificationTrigger(dateMatching: daily, repeats: true)
dailyTrigger.nextTriggerDate() // "Jan 4, 2017, 12:00 PM"

// Every Tuesday at 12pm
var weekly = DateComponents()
weekly.hour = 12
weekly.weekday = 3
let weeklyTrigger = UNCalendarNotificationTrigger(dateMatching: weekly, repeats: true)
weeklyTrigger.nextTriggerDate() // "Jan 10, 2017, 12:00 PM"

// The 1st of every month at 12pm
var monthly = DateComponents()
monthly.hour = 12
monthly.day = 1
let monthlyTrigger = UNCalendarNotificationTrigger(dateMatching: monthly, repeats: true)
monthlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM"

// Every 1st of February at 12pm
var yearly = DateComponents()
yearly.hour = 12
yearly.day = 1
yearly.month = 2
let yearlyTrigger = UNCalendarNotificationTrigger(dateMatching: yearly, repeats: true)
yearlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM"

Но...

Я не могу получить fortnightly или же quarterly триггер, чтобы функционировать правильно.

// Every second Tuesday at 12pm
// ... There is no "date.fortnight", is this possible?

// The 1st of every quarter at 12pm
var quarterly = DateComponents()
quarterly.hour = 12
quarterly.day = 4
// Values: 1, 2, 3 or 4 all produce the same "nextTriggerDate" - why?
quarterly.quarter = 4 
let quarterlyTrigger = UNCalendarNotificationTrigger(dateMatching: quarterly, repeats: true)
quarterlyTrigger.nextTriggerDate()

Итак, чтобы быть ясным, мои вопросы:

  1. Можно ли получить уведомление, которое повторяется каждые две недели?
  2. Как мы получаем триггер один раз в квартал?

поскольку DateComponents() имеет quarter единица, я предполагаю, что quarterly триггер возможен. Однако для двухнедельного напоминания я даже не уверен, возможно ли это...

Любое понимание будет оценено!

1 ответ

Я не видел никакой прямой возможности вызвать двухнедельное уведомление. Предлагание с моей стороны.

1) Можно ли получить уведомление, которое повторяется каждые две недели?

Я предлагаю два варианта:

  1. Можем ли мы использовать UNTimeIntervalNotificationTrigger повторить уведомление с интервалом в две недели? Пример ниже

    let timeInterValFor2Weeks = 1190507.790425003
    
    let intervalTrigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterValFor2Weeks, repeats: true)//"Jan 3, 2017, 5:24 PM"
    
    intervalTrigger.nextTriggerDate() //"Jan 17, 2017, 12:05 PM"
    
  2. Расписание два UNCalendarNotificationTrigger триггер, который должен запускать первый и третий день месяца. Например, он должен активировать уведомление в первое воскресенье и третье воскресенье месяца.

    var fortnightPart1 = DateComponents()
    fortnightPart1.weekday = 1 //(Day..here Sunday)
    fortnightPart1.weekdayOrdinal = 2 //= n == (nth Day in the month...here 2nd Sunday in every month month)
    fortnightPart1.hour = 12
    
    let fortnightTrigger = UNCalendarNotificationTrigger(dateMatching: fortnightPart1, repeats: true)
    fortnightPart1.nextTriggerDate()
    

2) Как мы получаем триггер один раз в квартал?

Если прямой опции нет, я предлагаю то же решение, что и выше.

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