Спочатку я подумав, що це, швидше за все, примірник хмари Android для обміну повідомленнями на пристроях , але це не може бути: WhatsApp не оголошує необхідних дозволів, і він працює в Eclair (Android 2.1), в той час як обмін повідомленнями хмари на пристрої ( та його заміну, Google Cloud Messaging) потрібен принаймні Froyo (Android 2.2).
Однак це, швидше за все, якась послуга push-повідомлення . Неможливо точно сказати, як це реалізовано без доступу до вихідного коду WhatsApp.
Частина про те, як можна отримувати повідомлення, коли вони не використовуються, пояснюється відносно просто. У додатку майже напевно є сервіс, який працює у фоновому режимі, щоб періодично здійснювати реєстрацію з сервером (або отримувати натиск сервера, або все, що він робить). Коли ви отримаєте повідомлення, сервіс вискакує сповіщення.
Щодо питання про те, як сервер міг би натиснути, ось така можливість (знову ж, я не можу перевірити без вихідного коду):
- WhatsApp запускає та відкриває два сокети: один для прослуховування та один для відправлення повідомлення на сервер.
- WhatsApps починає слухати в першому сокеті.
- WhatsApp надсилає на сервер повідомлення, що містить ваш номер телефону та порт прослуховувального сокета, і чекає підтвердження.
- Сервер записує номери телефону та порту у повідомленні та IP-адресу, з якої надходило повідомлення.
- Сервер надсилає додаток підтвердження.
- Додаток отримує підтвердження та закриває розетку повідомлень.
- Повідомлення з вашим номером телефону, як адресат, надходить на сервер.
- Сервер використовує IP-адресу та номер порту, який він пов’язаний з вашим номером телефону, і використовує цю інформацію для передачі повідомлення на ваш телефон.
Щоб це працювало, додатку потрібно було б контролювати стан підключення до мережі та скидати прослуховувальний сокет / надсилати повідомлення про реєстрацію при необхідності (наприклад, якщо змінити IP-адресу).