Smack 4.1 Проблема повторного подключения

Я разрабатываю приложение чата, в котором

  • У меня постоянно работает фоновый сервис.
  • Приложение работает бесперебойно, и я могу получать и отправлять сообщения без каких-либо проблем.
  • Я использую диспетчер пересоединения по умолчанию Smack 4.1, который подключается, как только соединение будет потеряно (почти 90% времени).

Но иногда, когда соединение потеряно, диспетчер подключений Smack перестает работать.

Я не смог выяснить, что вызывает эту проблему.

Когда я проверяю свой телефон, после задержки от 12 до 14 часов, я вижу, что служба Android по-прежнему работает, но повторное соединение XMPP перестало работать. Затем я должен принудительно остановить приложение, чтобы затем перезапустить службу и снова подключиться к серверу XMPP.

Мое предположение - это то, что происходит, когда "Телефонная сеть переключается с Wifi-to-Data или Data-to-Wifi" . В то же время диспетчер подключений Smack 4.1 перестает работать. Хотя, я не уверен в этом.

И у меня есть вопросы

  • Что такое PingManager? Может ли PingManager быть полезным в этом случае?
  • Что такое StreamManagement? Как я могу включить его? Полезно ли в этом случае?

Любые другие решения для решения этой проблемы? Я думаю о следующих решениях:

  • Чтобы использовать GCM также с XMPP, поэтому, когда XMPP не удалось подключиться, я могу получить PUSH и снова подключиться на основе PUSH.
  • Использовать службы будильника. ( ПРОБЛЕМА: Сообщения, которые были в очереди из-за потерянного соединения, будут зависеть от следующего расписания аварий)
  • Каждый раз подключайте XMPP, когда пользователь возвращается в приложение. ( ПРОБЛЕМА: Сообщения, которые были в очереди из-за потерянного соединения, будут зависеть от возврата пользователя в приложение)

Ответы

Ответ 1

Немного поздно, но, возможно, это помогает другим. Я не эксперт XMPP, но я встретил презентацию Ignite Realtime под названием "XMPP и Android" , и он указывает на эту проблему и как справиться это. страница 1

страница 2

Он предлагает использовать серверный пинг с диспетчером аварийных сигналов в идеале с интервалом в 30 минут.

Также я нашел еще одну запись, связанную с этой проблемой, и предлагает 3 варианта. Стоит посмотреть. https://ramzandroidarchive.wordpress.com/2016/03/14/handling-connection-break-issue-in-smack-4-1/.