Phonegap, Websocket и Autobahn: не работают на Android 4.0.4

Я разрабатываю приложение с Phonegap и использую веб-сокет с AutobahnJS для клиентского приложения.

Удаленный сервер веб-сокетов разработан с использованием PHP и Ratchet и работает через SSL, поэтому для подключения я использую wss://.

Приложение хорошо работает в эмуляторе (Android 4.4.2), но нет возможности подключиться к серверу веб-сокетов с помощью реального устройства под управлением Android 4.0.4. Обратный вызов onOpen не срабатывает, вызывается только onClose.

this.conn = new ab.Session(
  this.wsUri,
  function() { that.onOpen() },
  function() { that.onClose() },
  { // Additional parameters, we're ignoring the WAMP sub-protocol for older browsers
    'skipSubprotocolCheck': true
  }
);

Чтобы приложение работало в эмуляторе, мне нужно было установить плагин websocket.

Итак, вопрос:

есть ли шанс использовать Autobahn и Websocket на устройстве под управлением Android 4.0.4?

Заранее спасибо!


person Sergio Rinaudo    schedule 08.05.2014    source источник


Ответы (1)


Начиная с Android 4.4, WebView основан на Chromium (версия 30) и включает встроенную поддержку WebSocket.

В более старых версиях Android есть WebView, основанный на более старой версии WebKit, и (насколько мне известно) отсутствует поддержка собственного WebSocket: http://jimbergman.net/webkit-version-in-android-version/

Это означает: вам либо нужно использовать подключаемый модуль WebSocket для Phonegap, чтобы добавить WebSocket в WebView, либо дождаться, пока AutobahnJS завершит резервный вариант на основе HTTP longpoll (в стадии разработки), и использовать сервер WAMP v2, поддерживающий WAMP-over-longpoll.

person oberstet    schedule 08.05.2014
comment
Возможно глупый вопрос, но зачем мне плагин для Android 4.4.2, если он использует Chromium с нативной поддержкой? (без него не работает) А почему не работает на Android 4.0.4 если у меня установлен этот плагин? - person Sergio Rinaudo; 08.05.2014
comment
Нет, с Android 4.4 плагин не нужен - без него точно работает. Я протестировал приложение HTML5, обернутое в Phonegap, с использованием AutobahnJS на Nexus 5. Оно работает без проблем. - person oberstet; 09.05.2014
comment
Я только что закончил перепроверку на устройстве эмулятора: Galaxy Nexus, цель: Android 4.4.2 API 19 с установленным плагином knowcode, он работает, но без плагина это не так. С андроидом 4.0.4, эмулятором или реальным устройством, плагином или нет, не работает. У меня установлены последние инструменты Android skd (22.6.3) и инструменты платформы (19.0.1). Вы тестировали на эмуляторе Nexus? Не могли бы вы показать код? Спасибо - person Sergio Rinaudo; 09.05.2014
comment
Я не тестирую в эмуляторе (слишком медленно) .. только настоящее устройство Nexus 5. Использование последней версии AutobahnJS (autobahn.s3.amazonaws.com/autobahnjs/latest/ autobahn.min.js) — похоже, вы используете старый WAMP v1 AutobahnJS. Для этого проекта у меня нет опубликованного исходного кода. Однако приложение demo.crossbar.io/clandeck — откройте его и во втором браузере например wamp.ws. Это приложение работает через Phonegap без каких-либо плагинов. - person oberstet; 09.05.2014
comment
Вы поняли, я использовал старую версию Autobahn и не знал об этом ... Однако у меня все еще есть проблема, потому что Ratchet поддерживает только WAMPv1, поэтому с обновленной версией Autobahn просто ничего не работает ни в браузере, ни в Phonegap :) Я думаю, что если я хочу немного поиграть с сервером веб-сокетов, который я настроил, мне нужно использовать старую версию AutobahnJS, и имейте в виду, что на данный момент она будет работать только для Android = 4.4.2. В любом случае, я оценил много ваших ответов, они помогли мне понять, большое спасибо! - person Sergio Rinaudo; 10.05.2014