Акции и промокоды Отзывы о школах

Почему ваши уведомления в iOS бесят — и как это исправить

#Блог

Знаете, что объединяет навязчивого продавца в торговом центре и плохо настроенные push-уведомления? Они оба заставляют людей убегать быстрее, чем от своих проблем. За последний месяц я провел небольшой эксперимент: установил более сотни приложений от разных компаний, чтобы понять, как они взаимодействуют с пользователями через экран смартфона. И знаете что? Большинство из них делают это настолько неумело, что хочется немедленно удалить не только приложение, но и сам смартфон.

В этой статье я расскажу, как правильно реализовать уведомления в iOS-приложении так, чтобы они не вызывали у пользователей желания запустить ваш iPhone в космос. Мы разберем все типы уведомлений, технические особенности их настройки и интеграции, а также поговорим о том, как сделать их действительно полезными, а не очередным цифровым спамом.

Типы уведомлений в iOS: не все то пуш, что блестит

Прежде чем погрузиться в дебри технической реализации, давайте разберемся с основными типами уведомлений в iOS. И нет, это не просто «те штуки, которые выскакивают сверху экрана» – система тут заметно сложнее (спасибо Apple за любовь к излишней детализации).

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

Представьте себе интровертное напоминание, которому для работы не нужен интернет и общение с внешним миром. Это и есть локальное уведомление – оно создается и отправляется прямо с устройства. Идеально подходит для приложений-напоминалок, фитнес-трекеров и прочих программ, которым нужно периодически теребить пользователя. Например: «Эй, ты обещал сделать 100 приседаний сегодня. Уже 23:55, может, начнешь?»

Пуш-уведомления: письма счастья из облака

А вот это уже тяжелая артиллерия – пуши, которые прилетают через Apple Push Notification Service (APNS). Тут без интернета никуда, зато можно творить настоящую магию: отправлять срочные новости, сообщения из чатов или напоминания о том, что вы забыли что-то в корзине (любимая фича всех интернет-магазинов, не так ли?).

Тихие уведомления: ниндзя в мире iOS

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

Каждый из этих типов уведомлений имеет свои особенности и области применения. Выбор правильного типа – это как выбор оружия в RPG: используешь не то – и босс тебя уничтожит (в нашем случае босс – это пользователь, который просто удалит приложение). В следующем разделе мы разберем, как правильно настроить каждый тип уведомлений, чтобы они работали как швейцарские часы, а не как будильник в понедельник утром.

Настройка уведомлений в iOS: квест для самых терпеливых

Помните, как в старых RPG нужно было собрать три артефакта, принести четыре священных камня и победить дракона, чтобы получить доступ к магии? Так вот, настройка уведомлений в iOS – примерно такой же квест, только вместо дракона тут Apple, а вместо артефактов – сертификаты и разрешения.

Регистрация в Apple Developer Program: первый босс

Первым делом вам нужно стать «официальным разработчиком» – то есть заплатить Apple $99 в год (да, именно так выглядит входной билет в мир iOS-разработки). После этого вы получаете доступ к загадочному порталу разработчика, где начинается настоящее веселье с созданием профиля приложения.

Кстати, забавный факт: некоторые думают, что можно обойтись без регистрации в Developer Program. Конечно, можно – примерно так же, как можно пытаться запустить космический корабль на педальном приводе.

Создание сертификатов: собираем всех покемонов

Теперь начинается самое интересное – создание сертификатов. Их тут примерно столько же видов, сколько покемонов в первом поколении:

  •       Сертификат для development-окружения (чтобы тестировать на своём устройстве)
  •       Сертификат для production-окружения (для реального приложения)
  •       Отдельные сертификаты для VoIP-уведомлений (если вы вдруг решили сделать свой Zoom)

И помните: срок действия каждого сертификата ограничен, так что придется периодически проходить этот квест заново. Прямо как продление прав, только без очередей в ГАИ.

Запрос разрешений у пользователя: дипломатическая миссия

А вот тут начинается настоящее искусство. Знаете, почему большинство приложений получает отказ при первом же запросе на отправку уведомлений? Потому что они спрашивают разрешение буквально на первом свидании с пользователем!

Вот несколько правил успешной «дипломатии»:

  •       Не просите разрешение сразу при запуске приложения (серьезно, вы же не делаете предложение руки и сердца на первом свидании?)
  •       Объясните пользователю, ЗАЧЕМ вам нужны уведомления (и нет, «чтобы спамить вас акциями» – это не то объяснение, которое стоит давать)
  •       Дайте возможность отложить решение (потому что иногда лучше «может быть», чем твердое «нет»)

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

И помните: если пользователь отказал вам в доступе к уведомлениям, это не конец света. Просто придется быть более изобретательным в том, как вернуть его доверие. Но это уже тема для отдельного разговора о реабилитации отвергнутых приложений.

Интеграция в приложение: где начинается настоящий цирк

Итак, вы прошли квест с сертификатами и как-то уговорили пользователя разрешить уведомления (если вам это удалось – примите мои поздравления, вы уже в высшей лиге). Теперь начинается самое интересное – интеграция всего этого добра в приложение. Держитесь крепче, будет весело.

UNUserNotificationCenter: главный по тарелочкам

Знакомьтесь, это ваш новый лучший друг – UNUserNotificationCenter. Звучит как название секретного подразделения ООН, но на самом деле это главный класс для работы с уведомлениями в iOS. Работает с ним примерно так:

let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
  if granted {
  // Ура, пользователь нас не послал!
  } else {
  // Время плакать и придумывать план Б
  }
}

Только не думайте, что на этом все – это только верхушка айсберга размером с Титаник (спойлер: айсберг победит).

Обработка входящих уведомлений: танцы с бубном

Теперь самое веселое. Тут вам придется реализовать примерно столько же делегатов и методов, сколько существует видов пиццы в Италии. Вот пример того, как это выглядит:

extension AppDelegate: UNUserNotificationCenterDelegate {
  func userNotificationCenter(
  _ center: UNUserNotificationCenter,
  willPresent notification: UNNotification,
  withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
  ) {
  // Здесь происходит магия
  // И немного шаманства
  // И чуть-чуть программирования
  completionHandler([.alert, .sound, .badge])
  }
}

И да, это только один из методов. Их там еще примерно как меню в китайском ресторане – длинное и с непонятными названиями.

Настройка категорий и действий: когда простого «ОК» недостаточно

А вот тут начинается настоящее искусство. Можно добавить кнопки действий – например, «Принять», «Отклонить» или «Напомнить через час, когда я закончу смотреть котиков на YouTube». Выглядит это примерно так:

let acceptAction = UNNotificationAction(
   identifier: "ACCEPT_ACTION",
   title: "Принять",
   options: .foreground
)

let declineAction = UNNotificationAction(
   identifier: "DECLINE_ACTION",
   title: "Отклонить",
   options: .destructive
)

let category = UNNotificationCategory(
   identifier: "MEETING_INVITATION",
   actions: [acceptAction, declineAction],
   intentIdentifiers: [],
   options: .customDismissAction
)

center.setNotificationCategories([category])

Только учтите, что каждое действие должно что-то делать (кроме «Отклонить» – тут пользователь обычно прекрасно справляется сам).

И помните главное правило: тестируйте всё. Потом тестируйте ещё раз. А потом ещё разок. Потому что есть только две вещи, которые пользователи ненавидят больше, чем всплывающий спам: это когда ничего не приходит… и когда приходит что-то совсем не то.

В следующем разделе мы поговорим о том, как сделать push-интерфейс не только работоспособным, но и приятным в использовании. Потому что технически корректное уведомление – это как технически съедобная еда: вроде не умрёшь, но и удовольствия никакого.

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

Технически работающее уведомление – это как ресторан с едой без вкуса: вроде все есть, но радости никакой. Давайте разберем, как сделать их не просто функциональными, а такими, чтобы пользователь сам ждал их появления (да, такое тоже бывает, представьте себе).

Заголовок и текст: краткость – сестра успеха

Помните старый анекдот про «Войну и мир» в Twitter? Так вот, с уведомлениями та же история – у вас есть буквально несколько слов, чтобы донести свою мысль. И нет, многоточие в конце – это не выход:

✅ Хорошо: «Ваш заказ прибудет через 10 минут» ❌ Плохо: «Спешим сообщить вам, что наш курьер уже практически почти рядом с вашим домом и…»

Пара советов от того, кто видел слишком много плохих уведомлений:

  •       Важную информацию – в начало (потому что обрезаться будет конец)
  •       Никакого CAPS LOCK (мы не на рынке в 90-х)
  •       Эмодзи – можно, но в меру (один-два, а не весь словарь)

Медиа-контент: потому что картинка стоит тысячи слов

iOS позволяет добавлять в уведомления изображения, GIF-анимации и даже видео. Но прежде чем превращать каждое из них в мини-фильм, подумайте:

// Так выглядит добавление изображения к уведомлению
let content = UNMutableNotificationContent()
content.title = "Новое фото"
content.body = "Посмотрите, что мы для вас приготовили!"

if let attachment = try? UNNotificationAttachment(
  identifier: UUID().uuidString,
  url: imageUrl,
  options: nil
) {
  content.attachments = [attachment]
}

Главное правило: медиа-контент должен добавлять ценность, а не просто делать уведомление «красивее». Никому не нужна анимированная гифка с танцующим котиком в сообщении о списании денег со счета (хотя… может быть, это немного смягчило бы удар?).

Кнопки действий: когда одного «ОК» мало

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

  •       Можно добавить до 4 кнопок (но не увлекайтесь – это не клавиатура пианино)
  •       Каждая кнопка может что-то делать прямо из уведомления
  •       Действия можно группировать по категориям

Например, для уведомления о новом сообщении:

let replyAction = UNTextInputNotificationAction(
   identifier: "REPLY_ACTION",
   title: "Ответить",
   options: [],
   textInputButtonTitle: "Отправить",
   textInputPlaceholder: "Ваш ответ..."
)

Но помните: каждая кнопка – это обязательство. Если вы добавляете кнопку «Ответить», будьте добры обеспечить, чтобы ответ действительно отправлялся, а не терялся в чёрной дыре необработанных колбэков.

А теперь представьте, что каждое ваше уведомление – это маленький бот, который стучится к пользователю в дверь. Хотели бы вы сами открыть дверь такому? Если ответ «нет» – пора что-то менять в дизайне.

Тестирование и оптимизация уведомлений: искусство предотвращения катастроф

Знаете, что общего между уведомлениями и ядерным реактором? Оба требуют тщательного тестирования, иначе последствия могут быть… скажем так, неприятными. И если в случае с реактором вы получите как минимум премию Дарвина, то с плохо протестированными уведомлениями – армию недовольных пользователей (что иногда даже хуже).

Тестирование на реальных устройствах: почему симулятор врет

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

// Код может прекрасно работать в симуляторе
let content = UNMutableNotificationContent()
content.title = "Все работает!"
content.body = "...или нет?"

// А потом случается реальность
// И вы узнаете много нового о себе и своем коде

Минимальный набор для тестирования:

  •       iPhone последней модели (потому что там всегда что-то новенькое)
  •       Старый добрый iPhone 8 (привет, legacy-юзеры)
  •       iPad (да, люди все еще используют планшеты)
  •       Apple Watch (если поддерживаете)

Анализ пользовательской реакции: цифры не врут (обычно)

Запустили уведомления? Отлично! Теперь самое время понять, не стали ли вы главным раздражителем для ваших пользователей. Отслеживайте:

  •       Процент открытий (если меньше 10% – у вас проблемы)
  •       Время до открытия (если больше часа – ваши уведомления не такие уж срочные)
  •       Количество отписок после конкретных типов уведомлений (спойлер: промо-рассылки обычно лидируют в этом антирейтинге)

Линейный график: % открытий уведомлений по дням недели

Оптимизация частоты и времени: тайминг – это все

Помните старую поговорку «всему свое время»? Так вот, для уведомлений это буквально вопрос жизни и смерти:

  •       Не отправляйте уведомления ночью (если только это не сообщение о пожаре)
  •       Учитывайте часовые пояса (пользователь из Владивостока будет «рад» получить ваше «доброе утро» в 3 часа ночи)
  •       Не спамьте! Правило большого пальца: не больше 2-3 уведомлений в день, если только пользователь сам не просил иного
// Пример настройки времени доставки
let trigger = UNCalendarNotificationTrigger(
   dateMatching: DateComponents(
  hour: 10, // Разумное время
  minute: 0
  ),
   repeats: false
)

И самое главное: постоянно собирайте и анализируйте метрики. Потому что единственное, что хуже плохо настроенного пуша — это тот самый плохой пуш, который вы продолжаете рассылать, игнорируя все признаки недовольства пользователей.

А теперь давайте подумаем: если бы ваше приложение было человеком, было бы оно тем, кого хочется пригласить на вечеринку, или тем, от кого все пытаются спрятаться?

Заключение: не превращайте уведомления в цифровой спам

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

Давайте будем честными: уведомления – это как суперспособность вашего приложения. С большой силой приходит большая ответственность, как говорил дядя Бен (и, кстати, он знал, о чем говорил – представьте, если бы Человек-паук использовал свои способности для рассылки спама по Нью-Йорку).

Ключевые моменты, которые стоит помнить:

  •       Уважайте пользователя и его время
  •       Тестируйте все до последней запятой
  •       Делайте уведомления полезными, а не просто громкими
  •       И ради всего святого, не отправляйте «С добрым утром!» в 3 часа ночи

Потому что в конечном счете хорошее уведомление – это как хороший официант: оно появляется именно тогда, когда нужно, делает свое дело и исчезает, не мешая вам наслаждаться жизнью.

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

Читайте также
#Блог

Клиенты уходят молча? NPS покажет, почему

Что на самом деле думают о вас клиенты и как узнать это с помощью NPS? Разбираем, как индекс лояльности клиентов превращается в конкретные действия, которые спасают репутацию и улучшают сервис.

Категории курсов
Отзывы о школах