Як WhatsApp може приймати повідомлення, коли вони не використовуються?


23

Мені цікаво, як WhatsApp здатний приймати повідомлення, коли він не використовується.

Я маю на увазі, я розумію, що WhatsApp працює, використовуючи Інтернет-з'єднання, а не мережу мобільних телефонів. Уявіть, що я не торкався свого телефону годинами. В цей момент друг надсилає мені повідомлення на WhatsApp. Я отримую це негайно. Чи означає це, що WhatsApp постійно підтримує підключення до Інтернету? Чи означає це, що WhatsApp діє як сервер, відкриваючи порти на телефоні? Чи, можливо, давній запит HTTP?



Відповіді:


18

Спочатку я подумав, що це, швидше за все, примірник хмари Android для обміну повідомленнями на пристроях , але це не може бути: WhatsApp не оголошує необхідних дозволів, і він працює в Eclair (Android 2.1), в той час як обмін повідомленнями хмари на пристрої ( та його заміну, Google Cloud Messaging) потрібен принаймні Froyo (Android 2.2).

Однак це, швидше за все, якась послуга push-повідомлення . Неможливо точно сказати, як це реалізовано без доступу до вихідного коду WhatsApp.

Частина про те, як можна отримувати повідомлення, коли вони не використовуються, пояснюється відносно просто. У додатку майже напевно є сервіс, який працює у фоновому режимі, щоб періодично здійснювати реєстрацію з сервером (або отримувати натиск сервера, або все, що він робить). Коли ви отримаєте повідомлення, сервіс вискакує сповіщення.

Щодо питання про те, як сервер міг би натиснути, ось така можливість (знову ж, я не можу перевірити без вихідного коду):

  1. WhatsApp запускає та відкриває два сокети: один для прослуховування та один для відправлення повідомлення на сервер.
  2. WhatsApps починає слухати в першому сокеті.
  3. WhatsApp надсилає на сервер повідомлення, що містить ваш номер телефону та порт прослуховувального сокета, і чекає підтвердження.
  4. Сервер записує номери телефону та порту у повідомленні та IP-адресу, з якої надходило повідомлення.
  5. Сервер надсилає додаток підтвердження.
  6. Додаток отримує підтвердження та закриває розетку повідомлень.
  7. Повідомлення з вашим номером телефону, як адресат, надходить на сервер.
  8. Сервер використовує IP-адресу та номер порту, який він пов’язаний з вашим номером телефону, і використовує цю інформацію для передачі повідомлення на ваш телефон.

Щоб це працювало, додатку потрібно було б контролювати стан підключення до мережі та скидати прослуховувальний сокет / надсилати повідомлення про реєстрацію при необхідності (наприклад, якщо змінити IP-адресу).


2
Чи залежить Whatsapp від програми playstore? Посилаючись на посилання у Вікіпедії: для цього потрібні пристрої під керуванням Android 2.2 або новіших версій, на яких також встановлено додаток Market. Тож це може бути не зовсім так, але, безумовно, базується на тих же принципах. Ви можете включити якийсь уривок із другого абзацу статті, щоб зробити свою відповідь більш цінною (і отримати більше оновлень;)
Izzy

Ви абсолютно праві, @Izzy, я повинен був би додати більше деталей. Це було важко зробити, поки я сидів у метро, ​​пишучи на своєму SGS3, хоча. Зараз я оновив відповідь. :-)
Trebor Rude

3
Nat не дозволить зробити крок 8, навіть якщо мобільний знаходиться на статичному ip, що ніколи не буде. можливі способи - або Xmpp, або довге опитування http

1
Він має необхідний дозвіл. У магазині Play він вказаний як "отримання даних з Інтернету". Дивіться android.stackexchange.com/a/61794
nyuszika7h

2
На жаль, вхідні TCP-з'єднання поруч із неможливими на мобільних пристроях. Переважна більшість з них не має публічних IP-адрес, і навіть якщо вони є (наприклад, для операторів, які підтримують IPv6), вхідні з'єднання зазвичай фільтруються. Більшість додатків сьогодні або використовують сервісні послуги Google, або передають власний постійний клієнт на з'єднання з сервером (особливо це стосується Facebook). На моєму досвіді, WhatsApp сприймає гібридний підхід: якщо GCM доступний, стійкий гніздо закривається після простою на кілька хвилин.
lxgr

8

Я впевнений, що WhatsApp НЕ відкриває жодних портів прослуховування. Більшість провайдерів блокують вхідні запити, які не працюватимуть.

WhatsApp має послугу. В основному це означає, що технічно ви ніколи не виходите з WhatsApp. Отже, спосіб отримання повідомлень під час "не запущеного" WhatsApp - це точно такий самий спосіб, як ви їх отримуєте, коли ви його запускаєте.

Клієнт, в даному випадку WhatsApp, підключається до сервера. Клієнт підтримує цей зв'язок. Коли сервер має щось нове сказати, він надсилає його клієнту через це з'єднання. І це все.

Ваша перша здогадка правильна.

WhatsApp не має справжнього механізму виходу, дивіться це .

WhatsApp не має механізму виходу. Програма призначена для того, щоб завжди підключатися, щоб ви швидко отримували повідомлення, навіть коли ви не активно використовуєте телефон. Це схоже на те, як працює SMS, і дозволяє повідомлення WhatsApp доставлятись майже миттєво.


2
Ваше посилання стосується Nokia - мені не вдалося знайти подібне запитання щодо Android на їхньому сайті. Ви впевнені, що те саме стосується Android? Це запитання з питань поширених питань для Android вказує на те, що він використовує архітектуру PUSH (у розділі "Чи надсилається повідомлення занадто довго, щоб дістатися до вашого телефону?"), А не постійно підключений сервер / клієнт.
Ділан Яга

2
@DylanYaga вірно. Дивіться, наприклад, останній абзац цієї відповіді та відповідь Треборів тут .
Izzy

Це здається найбільш логічним. Багато разів ці сервіси називають push-сервісами, але я не можу уявити, що клієнт відкриє порт і насправді діє як локальний сервер. Це, безумовно, спричинить проблеми безпеки.
SPRBRN

1

Їх FAQ передбачає , що вони використовують GCM. Перевірте відповідь на тему: "Повідомлення тривають занадто довго, щоб дістатися до вашого телефону?"


Ви маєте рацію, що FAQ часто підказує, але, як зазначає Требор Руд, додаток не має необхідного дозволу, тому вони не можуть використовувати сам GCM.
Дан Хулм

2
Він має необхідний дозвіл. У магазині Play він вказаний як "отримання даних з Інтернету". Дивіться android.stackexchange.com/a/61794
nyuszika7h

2
З того, що я бачив, вони використовують GCM, якщо він доступний. Якщо він з якихось причин недоступний (наприклад, на пристрої без Play-сервісів або якщо він відфільтрований мережею), розетка зберігатиметься нескінченно.
lxgr

0

Whatsapp, як і інші програми, запускається як послуга. (Ви завжди підключені) Повідомлення, надіслані вам, зберігаються на сервері Whatsapp до 30 днів, протягом цього періоду ваш WhatsApp повинен бути активним для отримання та підтвердження отримання повідомлення. Індивідуальні облікові записи зберігаються з номером телефону користувача @ whatsapp.net


1
30 днів . Будь ласка,
посилайтесь на

0

Я думаю, що має бути так:

Коли whatsapp був новим, він використовував би рішення на основі PNS, ця PNS просто розбудить пристрій, і як тільки він прокинеться, він може створити сокетне з'єднання з сервером Whatsapp.

Після того, коли Whatsapp популярний, тепер більшість пристроїв, як його рідне програмне забезпечення, так і нативне додаток, не загинуть. У своєму samsung s8 я не можу видалити WhatsApp, режим енергозбереження не може його вбити

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.