2012-01-29 1 views
9

Я делаю приложение Android в PhoneGap. То, что я пытаюсь сделать, это позволить приложению разговаривать с моим сервером Node.js через WebSockets. Мой сервер Node.js использует Socket.IO, который автоматически возвращается к опросу, когда я открываю приложение, в отличие от настольного приложения Chrome, которое с радостью открывает WebSocket и общается с ним просто отлично.WebSockets для Android в приложении Phonegap с сервером и клиентом Node.js/Socket.IO

Я прочитал this blogpost об интеграции фактического API WebSocket с помощью Phonegap. Проблема в том, что я не переопределяю функции onConnect, onMessage вручную, вместо этого Socket.IO делает все это для меня.

Есть ли способ интегрировать WebSockets в приложение Android Phonegap?

ответ

5

Короткий ответ: Кордова WebView не поддерживает WebSockets и socket.io не подключается к базе стандартов WebSocket клиентов.

Для вашего клиента все еще кажется, что если вы хотите настоящие веб-порты, вам нужно использовать плагин Cordova, который является специфическим для сборки Android или сборки iOS. Попробуйте this search, который включает в себя анонимное репо для Android-плагина, тот же блоггер, на который ссылается OP.

Таким образом, socket.io не будет работать на вашем сервере. К сожалению, сервер socket.io не поддерживает подключение к клиентам с использованием веб-соединения на основе стандартов Html5, вы должны использовать свою клиентскую библиотеку. Как вы видели, вы не можете использовать свою клиентскую библиотеку в Кордове ... ну, вы можете, она просто вернется к опросу.

Итак, теперь ваш клиент websocket - это плагин Cordova на основе стандартов, вам нужен сервер, поддерживающий основанное на стандартах соединение с веб-сайтами. Вы должны посмотреть на SockJs, Worlize, Miksago, или Einaros. Есть и другие. В настоящее время я использую Worlize.

Еще одна вещь, о которой стоит помнить, это то, что существует короткий список облачных хостов, поддерживающих в настоящий момент настоящие подключения к сети. Я рекомендую DotCloud или Nodejitsu.

Если это отвечает на ваш вопрос, пожалуйста, нажмите на галочку :)

+0

Идеальный ответ. Спасибо, что приложили все усилия! :) –

+0

Я не совсем понимаю этот ответ. Я хотел бы использовать разницу в телефоне и node.js с моим Android-приложением, но вы говорите, что html5 геолокация и веб-сокеты не совместимы с разрывом в телефоне .. или? –

+0

Привет, нет. Я не упоминал геолокацию, которая отлично работает в PhoneGap. PhoneGap использует встроенный элемент управления WebView, который представляет собой встроенный веб-браузер для запуска вашего кода Html и Js в качестве приложения. Этот встроенный браузер не имеет возможности Html5 WebSocket, поэтому вам нужно использовать отдельный плагин, например [этот для Android] (https://github.com/jnydal/android-phonegap-websocket) или [этот для iOS] (https://github.com/remy/PhoneGap-Plugin-WebSocket) для настоящего WebSocket. –

0

Это хранилище будет интегрирован в PhoneGap очень скоро (по крайней мере, это звучит как что в ридми)

Он также предоставляет шаги для создания веб-сокеты работают в PhoneGap/андроида.

Посмотрите: https://github.com/anismiles/websocket-android-phonegap

+0

Я мог бы not've был достаточно тщательно, задавая свой вопрос, но я не знаю этого репозитория, и я попытался его уже. Дело в том, что библиотека Socket.IO не оставляет мне выбора переопределять методы socket.onmessage и т. Д. Это, в свою очередь, делает невозможным использование этого репозитория с моим кодом. Я хотел знать, есть ли возможность реализовать WebSockets в сочетании с клиентским приложением Android Phonegap Socket.IO. –

+0

Я также, возможно, не был достаточно тщательным в исследовании, если это действительно соответствует всем вашим критериям :) –

0

Вот еще WebSockets Android-клиент, что я в настоящее время оценки.

http://jwebsocket.org/mobile/android/android_part1.htm

Я боюсь, что я понятия не имею, если это будет полезно для проекта PhoneGap, не будучи знакомым с ним.

Телефонная заставка должна позволить вам включить внешнюю библиотеку java в ваш проект, и вам нужно будет создать для нее интерфейс в java.

Смежные вопросы