Что, если сообщения приходят с задержкой?:
Предварительное замечание
Сначала убедитесь, что задержки при отправке-приеме сообщений имеют место для всех ваших контактов (ибо, возможно, проблемы на стороне вашего собеседника, а вы решите, что у вас).
Задержки до 30 секунд можно считать нормой (особенно когда это первое сообщение в чате за долгое время, пока оно "протолкнется").
Сервера Whatsapp периодически вовсе не работают. Узнать о текущем состоянии системы можно с помощью самой программы. Меню-Настройки-Еще-Статус системы. Или же зайти на специальный twitter-канал разработчиков, где появляются известия о временных сбоях в работе системы:
https://twitter.com/#!/wa_status
ВАЖНО! Объяснение стандартных задержек при получении сообщений
(происходящих вследствие разрыва неактивных соединений со стороны Wi-Fi роутера или оператора сотовой связи)
В Android есть встроенный механизм поддержания tcp-соединения для моментального получения PUSH-уведомлений (каким-то образом связанный с Google Talk, но это не столь важно).
Однако соединение может быть разорвано со стороны роутера (в случае Wi-Fi подключения) либо со стороны оператора (в случае 3g/gprs). Некоторые роутеры и некоторые операторы сотовой связи после определенного таймаута принудительно разрывают неиспользуемые соединения. То есть если по соединению длительное время не передается никакой информации, оно автоматически разрывается.
На этот случай Android каждые 15 мин (при подключении по Wi-Fi) и каждые 28 мин (при подключении по 3g/gprs) проверяет, активно ли соединение, и при необходимости его восстанавливает. Так называемый heartbeat interval. Текущее значение heartbeat interval можно проверить, набрав *#*#8255#*#* в разделе Heartbeat.
Таким образом, если ваш оператор (или роутер в случае Wi-Fi) разрывает неактивные соединения по таймауту меньшему, чем 28 мин (или 15 мин в случае Wi-Fi), то до того момента,как PUSH-соединение восстановится, у вас не будет возможности получить уведомление о входящем сообщении.
Проблему можно решить с помощью программы Push Notification Fixer (нужен ROOT!). С ее помощью вы можете установить желаемое значение heartbeat interval - т.е. времени, через которое Android будет проверять PUSH-соединение на активность и восстанавливать его, если оно было закрыто.
Данная информация взята из следующих источников: Тема на XDA с объяснениями, тема Push Notification Fixer на XDA.
Однако, необязательно, что задержки при получении сообщений в вашем случае связаны с вышеизложенными обстоятельствами. Возможно, причина проблемы в другом. Читаем дальше.
Прочие возможные проблемы при получении сообщений / проблемы при отправке сообщений
1) Попробуйте переустановить программу "с нуля". Удаляете программу, удаляете папку whatsapp на карте памяти (предварительно сохранив ее в другом месте, если вам нужно ее содержимое: история переписок и принятые-отправленные файлы). Устанавливаете программу.
2) Убедитесь, что вы используете последнюю версию программы. Убедитесь, что проблемы не исчезают с перезагрузкой устройства. Убедитесь в наличии качественного интернет-соединения (быстро ли грузятся странички, не обрывается ли связь в браузере и других программах). Убедитесь в том, что вы не используете таск-киллеры (либо добавьте whatsapp в исключения).
3) Убедитесь, что в настройках - аккаунты и синхронизация - включен фоновый режим (должна стоять галочка).
4) Убедитесь, что в телефоне не включен какой-либо режим сбережения заряда батареи, предполагающий ограничение передачи данных по Wi-Fi или 3G/GPRS. Также разработчики рекомендуют для устройств HTC отключение опции быстрой загрузки в настройках телефона.
5) Если проблемы с задержкой входящих сообщений возникают и в случае соединения по Wi-Fi, убедитесь, что в Меню-Настройки-Беспр.сети-Настр.WiFi-Меню-Дополнительно-Спящий режим переключатель установлен в режиме "Никогда" (зависит от перевода, для пункта "спящий режим wi-fi" должно стоять "никогда", а если называется "сохранять подключение в спящем режиме" - то "всегда").
6) Запустите приложение Google Talk, нажмите Меню-Выход. Снова запустите Google Talk и войдите аккаунт. Перезагрузите телефон.
7) Если это не поможет (сообщения по-прежнему будут приходить с задержкой):
-Заходите в Настройки (андроида, не whatsapp) - Приложения- Управление приложениями, Вкладка "Все", Находите gmail, Очищаете ему кэш и данные. (Конечно, если gmail установлен).
-То же самое для google talk.
-Затем открывате google talk (входите в учетную запись) и gmail (ждете пока загрузятся письма).
-Перезагружаете телефон
8) Попробуйте установить DNS-адреса от Google (DNS1: 8.8.8.8, DNS2: 8.8.4.4). Это можно сделать либо с помощью программы ® Set DNS , либо вручную.
Для wifi: Настройки - Беспроводные сети - Настройки Wi-fi - Кл.меню- Доп.функции - Статически IP-адрес - устанавливаем нужные адреса (нужно ориентироваться в настройках своего роутера)
Лучше все же с помощью программы, она позволяет изменить настройки только DNS независимо от других настроек сети, а также позволяет установить DNS при мобильной передаче данных (3G/GPRS).
Возможный способ устранения задержек уведомлений (только для некоторых устройств, нужен ROOT)
Данный способ может быть актуален, только если:
-При подключении по GPRS/3G уведомления стабильно доходят моментально, а проблемы возникают только при подключении по Wi-Fi
-При подключении по Wi-Fi, но при включенном экране уведомления приходят моментально
-При подключении по Wi-Fi, но выключенном экране уведомления почти всегда доходят со значительной задержкой
-При подключении по Wi-Fi, при включении экрана, задержавшиеся уведомления тут же поступают на устройство
Если все эти утверждения верны, то, возможно, проблема в выключенном режиме ARPOffload в драйверах Wi-Fi вашего телефона. Проблема наиболее известна для Nexus 4 (источник), но следующее решение помогло мне на HTC One XL.
Внимание! Последующие действия требуют изменения системным файлов. Учтите, что они могут быть верны не во всех случаях, и могут привести к тому,что устройство перестанет загружаться. Я не несу никакой ответственности за возможные последствия.
Процедура действий:
1) В файле /system/etc/wifi/WCNSS_qcom_cfg.ini (может называться чуть иначе, например WCNSS_qcom_cfg_default.ini) находите строчку McastBcastFilter=3 и меняете ее на McastBcastFilter=1. Для большей надежности можете поменять на McastBcastFilter=0, однако это сильно увеличивает расход батареи.
Также при наличии параметров gEnableActiveModeOffload или hostARPOffload установить их значение в 1.
McastBcastFilter=1
gEnableActiveModeOffload=1
hostARPOffload=1
На некоторых устройствах также есть файл system\etc\firmware\wlan\prima\WCNSS_qcom_cfg.ini ; в случае его наличия в нем необходимо произвести такие же действия.
Если у вас нет файлов с таким названием в соответствующих папках, то этот способ не для вас! (т.е. в ваше устройстве установлен wi-fi чипсет другого производителя).
Сохраняете файл.
Обязательно!!!! Проверяете, что не изменились права доступа, должно быть -rw-r--r-- root root
2) Перезагружаете устройство.
Немного технических подробностей. ARP - это протокол канального уровня, предназначенный для определения MAC-адреса по известному IP-адресу.
Проблема заключается в том, что при выключенном ARPOffload при выключении экрана устройство перестает принимать ARP-запросы от Wi-Fi - маршрутизатора, из-за чего последний не может доставить пришедший на IP-адрес смартфона пакет по назначению (поскольку не может получить в ответ на ARP-запрос,посланный смартфону, сопоставить IP-адрес получателя пакета MAC-адрес Wi-Fi приемника в смартфоне). При включении экрана все "подвисшие" пакеты тут же обрабатываются устройством.
Параметр McastBcastFilter задает, какие пакеты поступающие по Wi-Fi обрабатываются устройством во время сна (когда экран выключен). 0 - обрабатывать все пакеты, в т.ч. Broadcast и Multicast. 1 -обрабатывать только Broadcast. 2 - обрабатывать только Multicast. 3 - не отрабатывать НИ Multicast, НИ Broadcast. Что такое Multicast и Broadcast читаем тут.
ARP-запросы это как раз Broadcast-трафик.
Параметры, связанные с ARP Offload - насколько я понимаю, позволяют устройству, не выходя из спящего режима, пропускать и обрабатывать ARP-запросы. Т.е. в отличии от установки McastBcastFilter=1 будет обрабатываться не весь Broadcast-трафик, а только ARP-запросы, что в меньшей степени влияет на расход аккумулятора.
Поэтому, по-хорошему, можно попробовать сначала изменить только эти параметры gEnableActiveModeOffload и hostARPOffload, а McastBcastFilter=3 не трогать. И если не поможет, то уже менять McastBcastFilter на 1 или 0.