Мне интересно, как WhatsApp может получать сообщения, когда они не используются.
Я имею в виду, я понимаю, что WhatsApp работает с использованием подключения к Интернету, а не сети мобильного телефона. Представьте, что я не касался своего телефона в течение нескольких часов. В этот момент друг отправляет мне сообщение на WhatsApp. Я понял это немедленно. Означает ли это, что WhatsApp постоянно поддерживает подключение к Интернету? Значит ли это, что WhatsApp действует как сервер, открывая порты на телефоне? Или, может быть, длительный HTTP-запрос?
networking
whatsapp-messenger
Рам Рахум
источник
источник
Ответы:
Сначала я подумал, что это, скорее всего, экземпляр Android-облака для обмена сообщениями между устройствами , но этого не может быть: WhatsApp не объявляет необходимые разрешения и работает в Eclair (Android 2.1), в то время как обмен сообщениями между облаками и устройствами ( и его замена Google Cloud Messaging) требует как минимум Froyo (Android 2.2).
Однако, скорее всего, это своего рода сервис push-уведомлений . Невозможно точно сказать, как это реализовано без доступа к исходному коду WhatsApp.
Однако относительно того, что он может получать сообщения, когда он не используется, относительно легко объяснить. В приложении почти наверняка есть служба, которая работает в фоновом режиме, чтобы периодически регистрироваться на сервере (или получать запрос сервера, или что-то еще). Когда вы получаете сообщение, сервис выскакивает уведомление.
Что касается вопроса о том, как сервер может сделать push, вот возможность (опять же, я не могу проверить без исходного кода):
Чтобы это работало, приложению необходимо будет отслеживать состояние сетевого подключения и сбрасывать сокет прослушивания / при необходимости повторно отправлять регистрационное сообщение (например, при изменении IP-адреса).
источник
Я, конечно, уверен, что WhatsApp НЕ открывает порты прослушивания. большинство интернет-провайдеров блокируют входящие запросы, которые не будут работать.
У WhatsApp есть сервис. По сути это означает, что технически вы никогда не выходите из WhatsApp. Таким образом, способ получения сообщений, когда вы «не запускаете» WhatsApp, точно такой же, как вы получаете их, когда запускаете его.
Клиент, в данном случае WhatsApp, подключается к серверу. Клиент поддерживает это соединение. Когда серверу нужно сказать что-то новое, он отправляет это клиенту через это соединение, и это все.
Ваше первое предположение верно.
WhatsApp не имеет реального механизма выхода из системы, смотрите это .
источник
Их FAQ предлагают, чтобы они использовали GCM. Проверьте ответ на «Сообщения по-прежнему слишком долго доходят до вашего телефона?»
источник
WhatsApp, как и другие приложения, запускается как служба. (Вы всегда подключены) Отправленные вам сообщения хранятся на сервере WhatsApp до 30 дней, в течение которых ваш WhatsApp должен быть активным, чтобы получать и подтверждать получение сообщения. Индивидуальные учетные записи хранятся с номером телефона пользователя @ whatsapp.net
источник
Я думаю, что это должно быть так:
Когда WhatsApp был нов, он использовал бы решение на основе PNS, этот PNS просто разбудил бы устройство и, как только он проснулся, мог бы создать сокет-соединение с сервером WhatsApp.
После того, как WhatsApp теперь популярен, большинство устройств не будут уничтожены как родное приложение, так и собственное приложение. В моем Samsung S8 я не могу удалить WhatsApp, режим энергосбережения не может убить его
источник