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/.