Как отключить/включить Push-уведомления на iPhone

Как отключить/включить Push-уведомления на iPhone Ipad

Что такое push-уведомления на айфоне

Push-уведомления — это специальные сообщения, которые поступают от установленных на айфоне приложений, а также информационные или рекламные объявления. Способ оповещения о поступившем сообщении на «яблочном» девайсе может быть нескольких видов:

  • в виде стандартного звукового сообщения;
  • как баннер на главном экране или экране блокировки;
  • как простой счетчик поступивших уведомлений возле самого значка приложения (его называют «наклейка»).

Обратите внимание! Список приложений, от которых могут поступать уведомления, может изменяться самим пользователем в зависимости от того, хочет ли он получать напоминания о поступивших на смартфон сообщениях от мессенджеров типа Ватсап, обновлениях в социальных сетях, например, ВК, о наступлении запланированной заранее даты (важная деловая встреча, дни рождения родных и близких и тому подобные), рекламных акциях и возможных скидках в магазинах.

Что имеем и где теряем

Сейчас API для работы с push-уведомлениями — это достаточно мощная штука, которая позволяет делать много интересных вещей. Но так было не всегда.

Раньше push-уведомления выглядели именно так — это была несчастная голубая плашка, которая всплывала на экране, блокировала работу с текущим приложением, не давала ничего сделать, а потом пропадала навсегда, и больше никаких напоминаний о ней не было.

С тех пор прошло достаточно времени.

Для нас, как для разработчиков, все началось в iOS 3, когда push-уведомления стали доступны для сторонних библиотек.

В iOS 5 появился Notification Center, и push-уведомления перестали уходить в никуда, теперь они остаются в Notification Center, где их можно посмотреть повторно.

В iOS 6 появился режим «Не беспокоить». У пользователя появилась возможность задать промежуток времени, в течение которого он не хочет получать уведомления.

Эти изменения касались в основном того, как пользователь может работать с push-уведомлениями, как они могут сделать его жизнь комфортнее, а не того, как разработчики могут влиять на уведомления.

Для разработчиков важной вехой стал iOS 8 и появление Notification Action, которые позволили выполнять по push-уведомлениям действия, характерные для конкретного приложения.

В iOS 10 появились Notification Service Extension и Notification Content Extension. Первый позволяет модифицировать push-уведомление до того, как оно будет показано пользователю. Второй — по Force Touch на push-уведомление показывать некоторый UI, в котором, например, можно отображать более детальную информацию. В iOS 10 этот UI был некликабельный — смотреть можно, трогать нельзя.

В iOS 11 появился Notification Privacy Settings. Теперь пользователь может зайти в настройки и указать, хочет ли он, чтобы в пришедших уведомлений отображалось содержимое. Это огромный шаг в сторону безопасности. Понадобилось всего 8 версий iOS, чтобы понять, что не все пользователи хотят, чтобы на лежащем на столе iPhone внезапно всплывала персональная информация.

В iOS 12 появилась возможность группировать push-уведомления по thread-id, и тот UI, который мы получили в iOS 10 с помощью Notification Content Extension, стал кликабельным. Теперь туда можно добавлять кнопки и управление жестами — все то, что помогает пользователю взаимодействовать с UI.

Push-уведомления сегодня

Как вы видите, push-уведомления прошли огромный путь, и сегодня с их помощью можно делать действительно много всего.

Rich notifications

В этом расширении можно обрабатывать дополнительные действия, которые вы добавили к push-уведомлению, и показывать custom UI.

Для этого необходимо в приложение добавить Notification Content Extension, определить в нем класс, который наследуется от UNNotificationContentExtension, и дальше работать с ним, как с обычным UIViewController.

Silent-уведомления

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

"aps" : {
    "content-available" : 1
    // не включать alert, sound и badge ключи в payload
}

Для того, чтобы push-уведомление стало silent, необходимо в payload указать:

Читайте также:  ‎App Store: SYMA FPV

"content-available" : 1

. И не указывать alert, sound и badge ключи в payload — они совершенно бесполезны для push-уведомления, которое не будет показано пользователю.

Включение и отключение push-уведомлений

Для того что бы включить или выключить уведомления на iPhone, нужно: 

  1. Перейти в «Настройки» -> «Уведомления».
  2. Выбрать приложения для которого вы хотите включить/отключить уведомления.
  3. На странице оставить активированными только нужные пункты.

Где потери?

В схеме доставки push-уведомлений четыре стрелочки, потери могут возникать на трех из этих переходов.

Между сервером и XIVA потери могут возникнуть в следующем случае. Пользователю пришло письмо, сервер об этом знает, формирует уведомление и отправляет в XIVA. Но XIVA может потерять эту информацию, например, если пользователь в приложении выбрал «Подписаться» на определенную папку, пока был офлайн.

Между XIVA и APNs могут возникать потери, связанные с сетью. Мы почти не можем повлиять на сеть, поэтому останавливаться на этом пункте не будем.

Между APNs и Extension либо APNS и iOS, если вы не используете Extension. Это самый частый вид потерь. Такие потери происходят потому, что APNs не хранит более одного push по приложению на устройстве. Если, пока пользователь офлайн, ему приходит несколько уведомлений, когда он выйдет онлайн, он увидит только последнее сообщение.

Это те самые потери, которые не позволяют нам гарантировать доставку и полагаться на push-уведомления. Apple явно пишет, что доставка не гарантирована.

Между Extension приложения и iOS потерь возникать не может, и Apple это гарантирует. Если вы используете Extension и переопределили метод didReceiveContent with completion, даже если вы не вызовете этот completion, уведомление будет показано все равно.

Мы рассмотрим, как мы бороться с потерями между APNs и Extension. Но если вам понадобится увеличить доставляемость push-уведомлений, посмотрите на всю схему. Проверьте, не возникают ли потери на стороне сервиса, нормально ли ваш провайдер взаимодействует с APNs и так далее.

Группировка уведомлений

Чтобы сгруппировать сообщения, в payload необходимо указать «thread-id». Он может иметь несколько значений в рамках одного приложения, если вы хотите группировать по-разному: по аккаунтам, по получателям, по темам.

"aps" : {
    "thread-id" : "any_thread_identifier"
}

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

Действия по уведомлению без запуска приложения

Чтобы осуществлять действия по push-уведомлению без запуска самого приложения, необходимо создать категорию и добавить в нее action. Identifier категории передается в поле category у payload уведомления. Можно подключать разные actions к разным типам уведомлений.

Для владельцев android

Если вы хотите на Android-платформу такие же уведомления как на Айфоне, разработчики предложили утилиту SlideLock. C ее помощью можно в точности повторить демонстрацию оповещений яблочных продуктов. Любые сообщения будут появляться поверх экрана блокировки. Смахнув строку вправо, вы откроете приложение, влево – скроете с экрана за ненадобностью.

Звук и critical alert

Как и раньше, можно добавлять звуки в payload уведомления.

"aps" : {
    "sound" : {
        "critical" : 1,
        "name" : "bingbong.aiff",
        "volume" : 1.0,
    }
}

В iOS 12 появился critical alert. Это звуки, которые будут проиграны даже в том случае, если пользователь находится в режиме «Не беспокоить».

Обычно пользователю не нужно, чтобы, к примеру, приложение с подпиской на журнал ночью сообщило, что вышел новый номер. Поэтому Apple ограничивает приложения, которые могут использовать critical alert. Если ваше приложение работает со здоровьем, безопасностью, или вы считаете, что critical alert — это то, что действительно может помочь пользователям взаимодействовать с вашим приложением, напишите Apple. Возможно, они разрешат вам использовать эту функциональность.

Изменение уведомления до его показа


Push-уведомления можно менять до того, как они будут показаны. Для этого необходимо добавить в приложение Notification Content Extension и переопределить метод

didReceive

. В этом методе можно получить контент уведомления и модифицировать его.

"aps" : { "mutable-content" : 1 }
override func didReceive(_ request: UNNotificationRequest,
      withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    guard let mutableContent = request.content.mutableCopy()
                        as? UNMutableNotificationContent else {
        contentHandler(request.content); return
    }
    mutableContent.subtitle = "Got it!"
    contentHandler(mutableContent)
}

Инструкция, как отключить всплывающие сообщения на айфоне

Пошаговый мануал, как на Айфоне отключить пуш-уведомления:

  1. В настройках выбираем раздел “Уведомления”.
  2. В списке приложений выбираем те, чьи уведомления нужно скрыть. Можно отдельно запретить появление на экране, звук, показ в истории и показ баннеров. Если нужно, чтобы данное приложение полностью “замолчало”, то отключаем для него “Допуск уведомлений”.
    как отключить пуши на айфоне
  3. Если нет желания настраивать каждое приложений по отдельности, то можно разом отключить показ всех сообщения на смартфоне. Для этого в “Центре уведомлений” нужно отключить параметр “Вид уведомлений”. Попасть в “Центр уведомлений” можно также свайпнув экран сверху вниз.
    отключение всех пуш уведомлений на айфоне
  4. Если нужно на пару часов отключить все входящие, то можно просто включить в настройках режим “Не беспокоить”. Но имейте в виду, что в таком случае будут заблокированы, в том числе и входящие звонки с СМС.
    перевод айфона в полет, чтобы выключить все уведомления
Читайте также:  Запускаем командную строку Linux на iOS / Блог компании / Хабр

В iOS 12 убрать push-сообщения с экрана блокировки можно:

  • Отключив “Показ миниатюр” в соответствующем разделе настроек.
  • Смахнув влево сообщение с заблокированного экрана. Далее нужно выбрать “Управлять” в открывшемся меню. Доступны будут две опции: “Доставлять без звука” и “Выключить”. Первая опция спрячет все push в “Центре уведомлений”, кроме центра они нигде появляться не будут. Вторая опция полностью отключит функцию.

Логирование и прочие сложности

Как известно, чтобы убедиться, хорошо ли работает подход, надо логировать. Мы стали собирать статистику по новому способу доставки уведомлений и сравнивать, как изменилась доставляемость.

Ограничения push-extension

Первое, с чем мы столкнулись, — это ограничения push-extension.

Не всегда вызывается. Если в настройках приложения выключить отрисовку уведомлений (возможность получать уведомление остается включенной, но выключаются все возможные отрисовки), Extension вызван не будет — не будет вызвана вся логика с пересчетами и, самое главное, логирование. Мы не сможем узнать то, что нам важнее всего, — получил ли пользователь уведомление.

У push-extension есть ограничение по времени. В документации Apple написано, что в течение примерно 30 секунд необходимо вызвать completion с видоизмененным уведомлением, иначе будет показано изначальное уведомление.

Интересно то, как мы это выяснили. Мы реализовали фичу, которую назвали «красивые» push-уведомления, прикрепляли к уведомлениям медиаэлементы, изменяли title, subtitle. В ходе тестирования оказалось, что некоторые push-уведомления стали красивыми, а остальные как были гадкими утятами, так и остались.

Мы стали смотреть, в чем разница между этими push-уведомлениями, и выяснили, что разницы нет, просто для одних мы успеваем вызвать completion, а для других нет. Соответственно, когда не успеваем, push-уведомления показывается именно в том виде, в котором пришли с APNs.

Третье ограничение — по памяти. Apple предупреждает, что память, выделяемая на push-extension, ограничена, и не рекомендует загружать в него тяжелые данные, но не уточняет точный размер. У нас получилось, что это примерно 12 МБ.

На Apple Developer Forum разработчики активно обсуждают, какие есть ограничения, высказывают свои предположения и пытаются их точно вычислить. Ограничения на память немного отличаются, но порядок примерно такой — 10 МБ.

Мы столкнулись с этим ограничением, когда добавляли логирование. Для логирования мы используем Яндекс AppMetrica. Когда мы начинали, AppMetrica для загрузки требовалось много памяти, и наш Extension все время отваливался. Поэтому нам пришлось нагородить маленький велосипед, чтобы все-таки залогировать получение уведомлений.

Измерение результатов превратилось в игру: попытку не уронить Extension и залогировать данные.

Очередь push-уведомлений

Наш способ борьбы с потерями в связке APNs и Extension мы назвали очередью push-уведомлений.

Если сжать весь рассказ до одной фразы, то это будет:

Если вы пропустили push-уведомление, его можно запросить заново.Как отключить/включить Push-уведомления на iPhone

В нашей схеме доставки уведомлений все те же самые участники: XIVA, APNs, Extension. Упрощенно схема работает так:

  • XIVA нумерует push-уведомления, которые собирается отправлять в APNs, и только потом отправляет информацию. 
  • Extension получает push-уведомление номер 1 и, через какое-то время, номер 3. Понимает, что какие-то данные пропущены.
  • Отправляет в XIVA запрос с последней полученной позицией, diff и просит прислать пропущенные данные заново. 
  • XIVA повторно отправляет push-уведомление, потому что хранит у себя базу payloads и базу подписок. Все подписки хранятся в течение некоторого времени, и их можно перезапросить.
  • Перезапрашиваем, получаем push-уведомление, и имеем на клиенте все сообщения, которые клиент должен был получить.
Читайте также:  4 способа разблокировки Apple ID без пароля | UkeySoft

Первая ожидаемая проблема — дублирование уведомлений. Когда мы повторно запрашиваем у XIVA сообщение, мы не знаем, что сейчас в очереди на отправку, потому что общаемся с ней не напрямую, а через APNs. Предположим, мы увидели, что каких-то уведомлений не хватает, и отправили запрос в XIVA.

Чтобы уведомления не дублировались, мы используем apns-collapse-id. Эта настройка позволяет на стороне iOS схлопывать push-уведомления с одинаковыми ID. Если на устройство пришло несколько push-уведомлений с одинаковым apns-collapse-id, iOS их схлопнет, и пользователь увидит только одно уведомление.

Скрытый контент уведомления

В iOS 11 появилась возможность скрывать содержимое push-уведомления, и мы с вами, как разработчики, на это повлиять никак не можем. Если пользователь выставил галочку «Скрывать контент уведомления», так или иначе он будет скрыт. Все, что мы можем сделать — это через UNNotificationCategory указать placeholder, который отобразится вместо содержимого (по умолчанию это notification), и задать, показывать ли title или subtitle.

Схема доставки push-уведомлений

Видите, сколько всего можно сделать с push-уведомлениями в iOS. От версии к версии у нас появляется все новая и новая функциональность, но схема доставки push уведомлений сейчас точно такая же, какая она была в iOS 3.

Можно было бы подумать, что схема доставки push-уведомлений была прекрасна с самого начала, но это не так.

В схеме доставки push-уведомлений есть три основных узла:

Я пропущу часть о том, как зарегистрироваться, получать токен, куда его отправлять. Предположим, все это у нас есть. Что происходит дальше?

В Почте и во многих других приложениях используется расширенная схема доставки push-уведомлений. Добавляется Notification Service Extension, в который приходят push-уведомления с

"mutable-content" : 1

. Провайдер разделяется на сервер, который занимается бэкенд-логикой приложения, и собственно провайдер, который формирует payload и занимается подписками.

В Яндексе провайдер, формирующий payload, называется XIVA. XIVA — это база данных подписок. Почта использует XIVA для работы с push-уведомлениями как стороннюю библиотеку.

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

Текстовые сообщения и локализация

Как и раньше, мы можем отправлять текстовые сообщения в push–уведомлении, но теперь дополнительно можно указать ключи для локализации.

"aps" : {
    "alert" : {
        "title" : "New Mail",
        "subtitle-loc-key" : "alert_subtitle_localization_key",
        "loc-key" : "alert_body_localization_key",
    }
}


Если указать

subtitle-loc-keyloc-key

в payload уведомления, то когда push-уведомление придет на устройство, в файле Localizable.string приложения будут найдены нужные значения, и пользователь увидит локализованное сообщение.

Заключение

Изначально push-технология задумывалась как инструмент сигнализации о важных событиях, но со временем превратилась в назойливую и раздражающую функцию. Поэтому тысячи людей пытаются понять, как отключить всплывающие сообщения на Айфоне. Сделать это можно для каждого приложения в специальном разделе настроек “Уведомления”.

Итоги

Push-уведомления в iOS прошли большой путь.

Если вы еще не используете их в своем приложении или используете по минимуму, посмотрите на пример Яндекс.Почты. Возможно, некоторые решения вам пригодятся.

Пропущенные push-уведомления можно (и нужно) перезапрашивать. Совершенно необязательно делать это как в Яндекс.Почте через XIVA. Может, у вас есть похожий сервис, который поможет вам в этом. Может, найдете сторонний, который тоже умеет делать нечто подобное. Ищите!

Помните про ограничения push-extension. Не перегружайте его по памяти, учитывайте ограничение по времени. Следите, чтобы он вызывался.

Подумайте, что вам даст улучшение доставки. Прежде, чем ввязаться в эту авантюру, подумайте, нужно ли вам это, даст ли это что-то вашему приложению. Возможно, увеличение доставляемости push-уведомлений для вашего приложения абсолютно не критично и ничего вам не даст.

Мы в AppsConf с нетерпением ждем следующего доклада Аси, в котором она уже 21 или 22 октября расскажет об идеях и открытиях, родившихся за время рефакторинга большей части приложения Яндекс.Почты. В равной степени мы предвкушаем еще почти 50 выступлений, призванных помочь мобильным разработчикам расти. До 1 сентября можно подать заявку на доклад и оказаться в компании крутых людей, которые прямо влияют на будущее индустрии — успевайте.

Оцените статью
iPad Мобайл
Добавить комментарий