Пуш-уведомление — это когда у вас на экране телефона появляется информация о чём-то, что произошло только что, например о новом сообщении в мессенджере, о готовности заказа или о том, что курьер вот-вот приедет.
Объясняем, как они работают с технической точки зрения, как прорываются на главный экран и в чём секрет их моментальной доставки. Это для технического и компьютерного кругозора.
Что особенного в пушах
Когда только появились смартфоны и компьютеры-наладонники, вся работа приложений была изолирована внутри этих приложений. Если у вас был, например, наладонник и на нём было приложение для почты, то узнать о новых письмах можно было, только зайдя в приложение. Как только вы закрывали приложение, оно переставало проверять почту.
Сами приложения могли рисовать какие угодно уведомления — но только пока они работали. И дизайн уведомлений мог быть любым. Никакого централизованного управления не было.
Потом в Blackberry, а позднее во взломанной пиратской iOS появился единый сервис доставки сообщений на экран. Это была единая «труба», по которой любое приложение могло отправить вам сообщение. Это и есть Push-уведомления: ещё один канал, по которому приложение может с вами поговорить, но не внутри себя, а отдельно от себя на уровне операционной системы.
Что для этого нужно
Чтобы пуш-уведомления заработали, нам понадобится много всякого разного.
Приложение, в котором разработчик сделал поддержку пуш-уведомлений. Не все приложения поддерживают пуши — программист должен сам об этом позаботиться.
Сервер разработчика — именно с него изначально отправляются все пуш-сообщения. Он нужен для того, чтобы все уведомления в приложение приходили из одного источника, которому можно доверять.
Сервер устройства — у Apple и у Google свои серверы, которые управляют уведомлениями на устройствах с iOS и Android. Они отвечают за все уведомления, которые вы получаете на телефоне, следят за настройками безопасности и взаимодействуют с серверами разработчиков.
Идентификатор устройства (токен) — служебный набор букв и цифр, по которому сервер устройства отличает один телефон от другого.
Служба пуш-уведомлений. Эта служба — часть операционной системы и она работает всё время, пока включён телефон. Служба постоянно готова к приёму новых сообщений от сервера устройства, и как только приходит что-то новое, она отправляет пуш в приложение. А приложение дальше само уже смотрит свои настройки и решает, показывать это уведомление на экране или нет.
Приложение и уведомления
Если в приложении запрещены пуш-уведомления, то даже если оно придёт на устройство, то на экране мы ничего не увидим. При этом приложение всё равно продолжит их получать.
Когда мы ставим приложение с поддержкой таких уведомлений, происходит следующее:
- Приложение сообщает системе, что оно может получать пуши.
- Система отправляет токен на сервер устройства (в Эпл или в Гугл).
- Теперь сервер знает, что можно отправлять пуш-уведомления в приложение на это конкретное устройство.
Регистрация приложения и сервера разработчика
Изначально пуши генерирует не само приложение, а сервер разработчика. Например, если вы пользуетесь «Телеграмом», где-то в интернете есть специальный сервер «Телеграма», который отвечает за пуши.
Сервер разработчика нужно заранее зарегистрировать на сервере устройства — как бы подружить посредников. Сервер разработчиков знает «что отправить», а сервер устройства — «кому». Эти два сервера должны друг друга признать и наладить канал связи.
Интересно, что сервер разработчика не имеет прямого доступа к телефонам получателей. Вместо этого ему выдают специальные анонимные внутренние токены, которые не совпадают с токенами устройства. Грубо говоря:
- Сервер устройства знает, что у Васи Иванова телефон с токеном 12345.
- Но сервер устройства не скажет этот токен серверу разработчика.
- Вместо этого сервер устройства запомнит, что токену
12345
соответствует внутренний токенabcde
. - Именно этот токен abcde сервер устройства сообщит разработчику. Мол, «У меня есть пользователь с токеном
abcde
, если надо — могу ему отправить пуш. Но кто это — я тебе не скажу». - И уже этот код
abcde
использует разработчик.
Отправка сообщения
Если разработчик хочет отправить вам новое рекламное сообщение о скидках или акциях, он это делает через свой сервер.
Сервер разработчика берёт сообщение, прикрепляет к нему ваш токен и отправляет всё это на сервер устройства. Сервер устройства действует так:
- Смотрит, есть ли сервер разработчика в доверенном списке.
- Если есть — проверяет, есть ли у него вообще такой токен и можно ли на него отправить пуш.
- Если всё в порядке — отправляет пуш-уведомление на телефон.
- Служба уведомлений на телефоне получает пуш, смотрит, какому приложению оно предназначено, и сразу же отправляет его туда.
- Приложение смотрит в свои настройки и решает — показывать пуш или нет.
- Если уведомления включены — в этот же момент мы увидим его на экране телефона.
Вот так всё и работает.
К чему это
Недавно в «Телеграме» посыпались какие-то настройки пушей, и если у вас стояли на мьюте какие-то каналы, вам могли перестать приходить вообще какие-либо сообщения об их.
Мы это увидели, ужаснулись обвалившейся статистике и пошли напоминать, мол, ребята, мы тут, читайте нас. И заодно разобрались, как это работает.
Подписывайтесь на нас в «Телеграме», раз такое дело: t.me/thecodemedia