Как WhatsApp узнает, получает ли пользователь push-уведомление, даже если приложение работает в фоновом режиме и не открыто? - PullRequest
11 голосов
/ 17 марта 2012

Я уже задавал связанный вопрос: есть ли возможность узнать, получает ли приложение Apple push-уведомление?

И я получил ответ, что невозможно узнать, приходит ли push-уведомление на iPhone, когда приложение находится в фоновом режиме, а пользователь не открывает его ...

Но я нашел кое-что интересное: Я беру 2 айфона с WhatsApp. Я открываю в первом iPhone WhatsApp и выхожу из него (WhatsApp теперь на заднем плане), затем со вторым iPhone я отправляю массаж WhatsApp первому iPhone.

Когда push-уведомление WhatsApp достигает первого iPhone, я вижу две буквы "V" (символы) рядом с сообщением (и я не открываю push-уведомление). После этого я закрываю Интернет и 3G на первом iPhone и снова отправляю сообщение WhatsApp со вторым iPhone на первый. - и я вижу только одну букву "V" рядом с массажем (не прочитано - не получено push-уведомление).

Теперь после повторного включения Интернета на первом iPhone и после получения push-уведомления я вижу две буквы «V» (опять же - я не открываю push-уведомление).

Как это работает? Как WhatsApp узнает, получает ли iPhone push-уведомление или нет, пока WhatsApp работает в фоновом режиме?

Ответы [ 5 ]

6 голосов
/ 17 марта 2012

Давайте назовем iPhone с закрытым приложением WhatsApp - получатель , а другой iPhone, с которым вы отправляете сообщения - отправитель , и позвольте нам использовать общий термин application вместо WhatsApp

Приложение на отправитель не может узнать, что push-уведомление достигло получателя . Это характер push-уведомлений.

Однако отправителю можно отправить другое - не push-уведомление, а внутренний протокол - сообщение приложению на получателе , которое оно ( получателе ) приглашаем отправителя любым способом для конкретного приложения.

Итак, я бы предположил (я не знаю - я в любом случае не связан с WhatsApp), что значок двойного v, который вы получаете, - это когда сообщение приложения достигает приложения в получателе - и не имеет ничего общего с push-уведомлением.

2 голосов
/ 10 августа 2012

То, что вы имеете в виду, это только основы push-технологии:

Программное обеспечение whatsapp работает в фоновом режиме, прослушивая определенный порт для входящих сообщений.Он делает это постоянно.

КСТАТИ:

One V = сообщение, доставленное с вашего мобильного телефона на сервер WhatsApp

Two V's = сообщение, отправленное с сервера WhatsApp на мобильный телефон получателя

Синее V указывает на то, что сообщение прочитано

1 голос
/ 06 апреля 2014

После получения push-уведомления получатель может загрузить данные с URL-адреса, который вы включили в полезную нагрузку вашего push-уведомления. Запрашивая этот URL, сервер узнает, что получатель получил push-уведомление, и может передать этот статус приложению-отправителю.

Вроде так:

  1. Добавление определенного URL-адреса в полезную нагрузку push-уведомлений
  2. Реализуйте application:didReceiveRemoteNotification:fetchCompletionHandler: method в вашем делегате приложения и в этом методе вызовите URL из полезной нагрузки.
  3. Реализация логики на вашем сервере, которая распознает URL-вызов как полученное уведомление
  4. Позволяет приложению-отправителю постоянно получать текущий статус уведомления с сервера.
1 голос
/ 23 мая 2013

Whatsapp не показывает, читает ли человек сообщение или нет. Он просто сообщает, когда сообщение было отправлено на серверы WhatsApp (один V) и когда оно было отправлено на телефон (2 V). Двойное не означает, что сообщение было прочитано, это означает, что WhatsApp подключился к телефону и смог передать сообщение.

0 голосов
/ 23 июня 2013

Все вышеприведенные плакаты верны. Просто чтобы добавить еще одну вещь. Если WhatsApp недавно был закрыт, он все еще работает в фоновом режиме и все еще может получать сообщение (отсюда и квитанция о возврате). Однако после того, как приложение какое-то время не используется (или другие приложения имеют более высокий приоритет), WhatsApp прекращает работу, тогда он больше не будет получать входящие сообщения и не будет возвращать получение.

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

...