14

today my problem is that I am developing an app that is using a WebSocket. On iOS everything is working out fine but on android the WebView doesn't support the WebSocket. Whats the fastest/most elegant way to solve this problem?

[edit]

As this post is viewed quite often I want to share some possible solutions.

Solutions:

  1. Java Websocket Client Implementation & JavaScript Interface
  2. PHP Websocket Client Implementation & making a background (i.e. jQuery GET) request to the PHP-script (worked for me as I wanted to send only one line of message.)

Android Websocket Libraries

  1. http://autobahn.ws/
  2. http://code.google.com/p/weberknecht

Someone had the same issue and descriped how he worked around

  1. http://chpeck.tumblr.com/post/37273036645/socket-io-with-android-webview
Langusten Gustel
  • 10,917
  • 9
  • 46
  • 59

3 Answers3

4

I created a sample project which adds the WebSocket object to the WebView for phonegap. You can find it here: https://github.com/pusher/pusher-phonegap-android

I put up a video going over the project here: http://blog.pusher.com/2012/7/5/pusher-on-phonegap-for-android

I used this project to demonstrate how to use PhoneGap with Pusher on Android but ultimately it's just a project that happens to include the Pusher script tag. You could easily use another library that needs the WebSocket object or just use it directly.

It uses the websocket-android-phonegap library: https://github.com/anismiles/websocket-android-phonegap

leggetter
  • 15,248
  • 1
  • 55
  • 61
  • Do you include your PhoneGap App in an Android WebView or just opened in the Android Browser? – Langusten Gustel Nov 26 '12 at 13:15
  • The sample project creates a PhoneGap app which uses Android WebView with an injected `WebSocket` object. This means you can then use `WebSocket` within the JavaScript code running in the Android WebView. – leggetter Nov 26 '12 at 21:02
  • Yes. You write your code in JavaScript and it uses the injected `WebSocket` object which proxies the calls between the JavaScript and Java wrappers. You can use the project and code nothing other than HTML, JavaScript & CSS. Try it out and you'll see what I mean. – leggetter Nov 27 '12 at 18:34
  • Can I also use HTML5 geolocation in this WebView? For instance, I want to track users of the app in real time using geolocation. – Ben Sewards Mar 05 '13 at 00:21
  • As far as I'm aware the WebView is an instance of the stock Internet browser app. So, if it supports geolocation then yes, you could do that. – leggetter Mar 05 '13 at 11:26
2

Android webview doesn't accommodate WebSocket. So you need to implement with some WebSocket library.

jWebSocket http://jwebsocket.org/

weberknecht http://code.google.com/p/weberknecht/

wf9a5m75
  • 6,100
  • 3
  • 25
  • 59
  • 1
    What if I want to go it without chaning the HTML/JS Source. What do you think of overriding the JS-WebSocket Object by an JavaScript Interface? – Langusten Gustel Nov 22 '12 at 08:54
1

check your error code first;if the code is :ERR_CLEARTEXT_NOT_PERMITTED; Try to add android:usesCleartextTraffic="true" to you application tag in your AndroidManifest.xml like below:

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true">
Kaeson
  • 11
  • 1