Изменить поведение уведомлений быстро - PullRequest
1 голос
/ 29 мая 2020

Мне нужно вызвать уведомление, чтобы телефон завибрировал и звонил несколько минут в определенный момент времени, запланированный на ранее.

Для отправки уведомления я использую UNNotificationRequest. после поисков понял, что поменять .sound можно только заглушив звук на 30 секунд. Что не подходит.

Думал сделать несколько уведомлений с интервалом в секунду, но есть ограничение на количество уведомлений (64 штуки), а этого мало. Затем я попытался вызвать вибрацию с помощью

 func application (_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    if application.applicationState == .background {
        for _ in 1 ... 30 {
            AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
            sleep(1)
        }
        completionHandler(.newData)
    }
 }

Но проблема в том, что я не знаю, как вызвать эту функцию в определенный момент времени, и даже если приложение убито. + Есть проблема с тем, что при открытии приложения не проходит вибрация. + performFetch больше всего на свете для сетевых запросов.

Вопрос : Мне нужно привлечь внимание пользователя вибрацией + мелодией (если режим позволяет) + уведомлением. Как это сделать, и в каком направлении дальше копать?

Может все-таки как-нибудь вовремя разбудить приложение и запустить вибрацию + мелодию. Уведомление придет из самой системы.

UPD 1: из ответа { ссылка }

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { }

не работает ios10 и выше.

Теперь (ios 10 и выше) используйте

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { }

, но он s method don t вызывает, когда не вызывается, когда приходит локальное уведомление. Может, я что-то не так делаю?

Можно ли делать то, что я хочу?

...