В чем разница между удаленным уведомлением и тихим уведомлением в iOS?

Когда я читал Apple Docs , они упоминают 3 типа уведомлений: локальные, удаленные и молчащие.

Локальное уведомление может быть выведено из его имени, которое отправляется приложением локально.

Однако в чем разница двух других типов?

Большое спасибо.

3 Solutions collect form web for “В чем разница между удаленным уведомлением и тихим уведомлением в iOS?”

Уведомление push позволит пользователю узнать, что они получают уведомление (например, всплывающее окно уведомления). Молчаливое уведомление будет обновляться, но пользователь не получит уведомление об этом. В любом случае вы можете выполнять действия при уведомлении с помощью молчания, как если бы это было push-уведомление. Единственное различие заключается в том, что пользователь не получит уведомление со всплывающим уведомлением.

С помощью push-уведомления: введите описание изображения здесь

С молчаливым уведомлением: введите описание изображения здесь

Разница заключается в полезной нагрузке:

Отправить уведомление:

  aps { content-available: 1 alert: {...} } 

Молчаливое уведомление:

  aps { content-available: 0 alert: {...} } 

И вы должны установить в Capabilities режим фона, который вы выберете.

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

Я рекомендую всем посмотреть первые 7 минут: WWDC 2015: что нового в уведомлениях . Оттуда ведущий упоминает, что есть два основных типа уведомлений:

Тихие уведомления

Они происходят в фоновом режиме и никогда не видят никаких предупреждений / значков / звука. Вещи загружаются без вашего ведома.


Уведомления пользователей

Как говорится в названии, это имеет какое-то отношение к пользователю . То есть пользователь увидит предупреждение / значок или услышит звук. Он имеет 2 типа.

Локальные уведомления

Локальное уведомление может быть вызвано тремя различными способами:

  • UNLocationNotificationTrigger : вы видите предупреждение, когда находитесь рядом с магазином Walmart.

  • UNTimeIntervalNotificationTrigger : например, вы видите предупреждение каждые 10 минут.

  • UNCalendarNotificationTrigger как 1 декабря 1:00 вечера 2017.

Удаленные уведомления

Они похожи на localNotifications, но они запускаются с сервера, например, сообщение Whatsapp, в котором есть поле From (Mom) и поле тела (я вас люблю!).

Некоторые случайные заметки:

Чтобы получить тихое или удаленное уведомление, вам необходимо зарегистрироваться для токена, используя:

 application.registerForRemoteNotifications() // This does NOT require user permission. 

Чтобы иметь возможность показывать значки / предупреждения / звуки, вам необходимо запросить разрешение у пользователя:

 UNUserNotificationCenter.current().requestAuthorization([.alert, .badge, .sound]) { (granted, error) in guard error == nil else { //Display Error.. Handle Error.. etc.. return } if granted { //Do stuff here.. //Register for RemoteNotifications. Your Remote Notifications can display alerts now :) application.registerForRemoteNotifications() } else { //Handle user denying permissions.. } } 

Вопрос. Должен ли я запрашивать доступ один раз для местных уведомлений и один раз для удаленных уведомлений?

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

Теперь перейдем к сложной части: D


Нужно ли мне активировать что-то для получения тихих уведомлений?

  1. Вы должны включить Push-уведомления из ваших возможностей Xcode: введите описание изображения здесь

если вы не включили это, ваше приложение не получит токен. И без маркера сервер не узнает вас

  1. Чтобы загрузить материал с фона, вам необходимо включить: удаленные уведомления из фоновых режимов.

Чтобы включить backgroundModes , вы можете сделать это, используя возможности plist или Xcode .

PLIST:

введите описание изображения здесь

item 0 – это просто индекс , это не ключ словаря (что вы обычно видите в plist), UIBackgroundModes – это array строк. Строки должны поступать только из принятого значения из массива UIBackgroundModes

Возможности Xcode:

Проверьте Remote Notification в Xcode в фоновом режиме, как показано ниже:

введите описание изображения здесь

Если вы не сделаете ничего из вышеперечисленного, то отключите уведомления с помощью:

введите описание изображения здесь

удалит удаленные и локальные уведомления


Однако если вы включите обновление фонового приложения из возможностей Plist или Xcode, то даже отключить уведомления для приложения по-прежнему будут предоставлять бесшумные уведомления!

Если пользователь хочет отключить тихие уведомления, ему пришлось бы отключить «обновление фонового приложения» для вашего приложения / через систему. Чтобы отключить «обновление фонового приложения» в вашей системе, вы должны сделать это:

введите описание изображения здесь

Почему я все это говорю? Чтобы объяснить вам, что настройки тихих и push-уведомлений различны для пользователя, а ограничения для их отправки различны. Подробнее см. Этот момент из видео WWDC. Также см. Здесь

CAVEAT: даже если вы отключите обновление и отключить фоновое обновление приложения, вы можете получать тихие уведомления, если ваше приложение находится в формате FOREGROUND. Если ваше приложение находится в фоновом режиме, они не будут доставлены.


Нужно ли мне включать что-то для получения удаленных уведомлений?

Вам просто нужно включить Push-уведомления из ваших возможностей Xcode:

введите описание изображения здесь

если вы не включили это, ваше приложение не получит токен. И без маркера сервер не узнает вас


Любопытно … Можете ли вы сказать мне, как должна выглядеть моя полезная нагрузка?

Я настоятельно рекомендую вам увидеть документы Apple . Это очень ясно.

Спасибо, но можете ли вы просто сказать мне важные части?

uhhmm … OK!

Для Silent Notifications существует два критерия:

  • Словарь aps полезной нагрузки должен включать в себя content-available ключ со значением 1 .
  • Словарь aps полезной нагрузки не должен содержать клавиши alert , sound или badge .

Пример полезной нагрузки будет выглядеть так:

 { "aps" : { "content-available" : 1 }, "acme1" : "bar", "acme2" : 42 } 

acme1, acme2 или только некоторые пользовательские данные! Но для ключа aps вы ДОЛЖНЫ следовать структуре Apple, иначе она не будет правильно отображаться, и вы не сможете правильно читать данные.

Для удаленных уведомлений :

вам нужен ключ alert внутри вашего aps

В качестве примера:

 { "aps" : { "alert" : "You got your emails.", "badge" : 9, "sound" : "bingbong.aiff" }, "acme1" : "bar", "acme2" : 42 } 

Существует также третий вариант, который я буду обсуждать дальше в ответ.

Как узнать, какие фиксированные ключи слова aps & alert находятся в этих документах Apple

Хорошо понял. Что такое content-available ?

Очень просто. Это всего лишь флаг, который сообщает вашему приложению, что вам нужно проснуться и загрузить что-то, потому что у меня есть контент, доступный для скачивания! Для получения дополнительной информации см. Этот точный момент


Я знаю, что вы сказали мне, что я могу только что-то загружать в свое приложение, когда я использую тихие уведомления, но есть ли способ, которым я также могу разбудить свое приложение в фоновом режиме и загрузить что-то для удаленных уведомлений?

Да, но затем, подобно тихим уведомлениям, вы также должны установить флаг content-available на 1, чтобы он знал, что нужно проснуться и загрузить что-то. В противном случае он просто поп, сигнал / значок / звук, но ничего не загрузит.

ВАЖНАЯ ЗАМЕТКА:

  • Если ваше приложение имеет только тихие уведомления, просто включите «push notifications» + «удаленные уведомления» из возможностей и установите content-available для 1 для каждой полезной нагрузки.
  • Если ваше приложение имеет только удаленные уведомления, просто включите возможности формы «Push Notifications» … Нет ничего общего с content-available .
  • Однако, если вы хотите, чтобы ваши уведомления запускали отображение предупреждений / значков / звуков, а также загружали что-то в фоновом режиме, вы должны иметь как «удаленные уведомления», так и «Push Notifications» enabled + set content-available to 1 .

(ТРЕТИЙ ВАРИАНТ)

 { "aps" : { "content-available" : 1 "alert" : "You got your emails.", "badge" : 9, "sound" : "bingbong.aiff" }, "acme1" : "bar", "acme2" : 42 } 

этот момент из видео WWDC упоминает 👆


Я запутался в удаленных уведомлениях … Я думал, когда бы я ни получил уведомление … мое приложение становится активным в фоновом режиме и загружает что-то … можете ли вы объяснить?

например, в данный момент:

введите описание изображения здесь

Ваш iPhone только что получил удаленное уведомление с телом «без отправителя». Чтобы получить это … WhatsApp не нужно запускать в фоновом режиме, т. Е. Вам не нужны «Удаленные уведомления» из BackgroundModes. Вы все равно получите уведомление, даже если ваше приложение было принудительным или приостановлено. Поскольку процесс управляется ОС, а не программой Whatsapp . Однако если вы хотите загрузить фактическое сообщение или его изображение / видео в WhatsApp (чтобы после того, как ваши пользователи откроют whatsapp, видео будет сидеть там, ожидая пользователя), тогда вам нужно, чтобы ваше приложение стало активным. Для этого вам нужен content-available : 1 и application(_:didReceiveRemoteNotification:fetchCompletionHandler:) .

CAVEAT: Если приложение было принудительно завершено пользователем, вы все равно получите уведомление (через свою операционную систему), но не сможете ничего сделать, чтобы вывести приложение из его состояния с завершением. Ни один из ваших методов делегирования не будет удален.)


Более подробную информацию см. В документации Apple , RayWenderlich , iOS 10 и видео WWDC 2016

Тихий push-уведомление доходит до устройства, пользователь ничего не знает об уведомлении, но его приложение получает уведомление, и приложению будет предоставлено некоторое время для загрузки нового контента и представления его пользователю, независимо от состояния приложения (то есть работает или нет) Бег)

Метод удаленного push-уведомления вызывается только тогда, когда ваше приложение запущено. Если приложение приостановлено или не запущено, система просыпается или запускает ваше приложение и помещает его в фоновое рабочее состояние перед вызовом метода. Этот метод предназначен для отображения обновленного контента для пользователя. Когда этот метод вызывается, ваше приложение имеет до 30 секунд времени настенных часов для выполнения операции загрузки и вызова указанного блока обработчика завершения. Если обработчик не вызван вовремя, ваше приложение будет приостановлено.

Для получения более подробной информации вы можете ознакомиться с этими ссылками:

Уведомления Apple

Тихие уведомления

  • VoIP push-уведомление, которое автоматически открывает приложение, даже если приложение не работает в фоновом режиме, возможно ли это в iOS?
  • HOWTO отслеживает автоматическое обновление подписки в iOS In-App Purchase?
  • Могу ли я отправить изображение с помощью службы Push Notification от Apple?
  • Как я могу создавать оповещения для iOS, которые не вибрируют?
  • iOS APNS - Уведомления до сих пор отправляются на устройства после удаления приложения из хранилища
  • UNNotificationContentExtension не отображается
  • Возможно ли создать собственный APN-сервер?
  • Сделать segue, который движется в противоположном направлении от «push», но не отличается?
  • Push Notifications не принимается на iOS 10, но работает на iOS 9 и до
  • Push-уведомления для большого количества устройств
  • Тихие нажатия не доставляются в приложение на iOS 11
  • Interesting Posts

    API WatchKit для Force Touch / Digital Crown?

    Framework не найден IOSurface для архитектуры arm64

    «Путь .. приведет к файлу вне приложения Bundle и не может быть использован» Ошибка, mono touch / Xamarin

    Отображение одной строки в UICollectionView – Swift

    создание многострочного расширяющегося TextInput с React-Native

    Неоднозначное использование «индекса» с NSArray & JSON

    Почему текущий перенаправление NSURLConnection не указывает правильный URL после перенаправления?

    Как отправить событие Button – UIControlEventTouchUpInside

    Когда использовать dequeueReusableCellWithIdentifier vs dequeueReusableCellWithIdentifier: forIndexPath

    Как узнать, действительно ли файл исключен из резервной копии iCloud

    Apple изменила формат файла .mobileprovision и как я могу просмотреть текущий формат?

    добавление UILabel в качестве подзадача UIButton не вызывает действие кнопки

    Автоматически заполнять случаи в инструкции Switch на основе значений в перечислении

    Не удается загрузить данные из CoreData в tableview

    Приостановка анимации UIImageView

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.