Можно ли отправлять SILENT LOCAL уведомление на iOS?

Мое приложение выходит из приостановленного режима при получении тихого удаленного уведомления с сервера, именно так, как я хочу. Этот сервер отправляет push-уведомление с "content-available: 1", которое выполняет свою работу.

Теперь я хочу сделать это без помощи сервера и поэтому хочу отправлять тихие локальные уведомления (из приложения) за раз в будущем (например, через 15 мин.), но не могу найти способ установить "content-available: 1". В результате я получаю локальное уведомление, которое не выводит мое приложение из спящего режима, как это можно сделать с помощью удаленного уведомления.

Я искал информацию, и все, что я могу найти, - это примеры интерактивных уведомлений и то, как установить заголовок, текст, предупреждение и триггеры (в зависимости от местоположения, даты и т. Д.). Но не о том, как установить свойство доступное содержимое.

Итак, можно ли настроить доступность контента для локальных уведомлений?


person AndaluZ    schedule 06.07.2017    source источник
comment
Локальное уведомление запускает ваше приложение только в том случае, если пользователь нажимает на уведомление. Поэтому тихое локальное уведомление не имеет смысла и невозможно.   -  person Paulw11    schedule 06.07.2017
comment
@ Paulw11 Я не говорю о запуске приложения, я говорю о выходе приложения из приостановленного режима.   -  person AndaluZ    schedule 06.12.2017
comment
Вы можете настроить локальное уведомление с указанным временем и таким образом разбудить свое приложение.   -  person good4pc    schedule 15.04.2020


Ответы (5)


Это просто невозможно без вмешательства пользователя. Не существует решения Android AlarmManager для вывода приложения из приостановленного режима в iOS. В iOS нет способа периодически выводить приложение из приостановленного режима, кроме как с помощью удаленного push-уведомления (если внешнее приложение периодически отправляет push-уведомление).

person AndaluZ    schedule 13.04.2018
comment
Если вы используете соединение BLE, вы можете разбудить свое приложение с помощью уведомления BLE в iOS или Android. На самом деле, единственный способ разбудить приложение в iOS - использовать шаблон уведомления. - person dicarlomagnus; 15.04.2019

Я думаю, что действительно невозможно разбудить приложение без вмешательства пользователя в локальных уведомлениях. Фоновая выборка может быть возможным решением в вашем случае.

application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

Этот метод UIApplicationDelegate вызывается, когда iOS решает, что может произойти фоновая выборка:

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
person Ellen    schedule 06.07.2017
comment
Этот метод UIApplicationDelegate вызывается, когда iOS решает, что может произойти фоновая выборка. Тогда у вас нет контроля над этим. Так что это просто НЕВОЗМОЖНО. - person AndaluZ; 13.04.2018
comment
BackgroundFetch вызывается случайным образом (это зависит от многих вещей, и Apple не предоставляет никакой информации об этом) - person ShadeToD; 23.03.2021

Фоновая выборка - единственное решение.

Некоторая информация содержится в Документы Xamarin, которые хорошо это объясняют

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

person Nick Jones    schedule 10.04.2018

Вот иди, приятель :) Документация Apple поверх тихого уведомления

person B25Dec    schedule 06.07.2017

Уведомление должно быть беззвучным, если вы не установили все эти значения:

notification.alertBody = message;
notification.alertAction = @"Show";
notification.category = @"ACTION"; 
notification.soundName = UILocalNotificationDefaultSoundName;
person John Smith    schedule 06.07.2017
comment
Да, но это не разбудит мое приложение, если оно находится в приостановленном режиме (то есть в фоновом режиме и не запущено). - person AndaluZ; 06.07.2017
comment
оооо, ладно, тогда не уверен, что ты сможешь добиться этого с помощью локального уведомления. вы можете посмотреть beginBackgroundTaskWithName: expirationHandler: чтобы выполнить некоторую работу в фоновом режиме, но у вас есть ограниченное количество времени для выполнения ваших задач. - person John Smith; 06.07.2017
comment
невозможно получить локальное уведомление без триггера пользователя (например, прикосновение к уведомлению). - person ShadeToD; 23.03.2021