Мне нужно вызвать уведомление, чтобы телефон завибрировал и звонил несколько минут в определенный момент времени, запланированный на ранее.
Для отправки уведомления я использую 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 вызывает, когда не вызывается, когда приходит локальное уведомление. Может, я что-то не так делаю?
Можно ли делать то, что я хочу?