安卓WebView中的WebSocket

14
今天我的问题是我正在开发一个使用WebSocket的应用程序。在iOS上一切都很好,但在Android上WebView不支持WebSocket。解决这个问题的最快/最优雅的方法是什么?
[编辑]
由于这篇文章经常被查看,我想分享一些可能的解决方案。
解决方案:
1. Java WebSocket客户端实现和JavaScript接口 2. PHP WebSocket客户端实现并向PHP脚本发送后台请求(即jQuery GET)(对我来说有效,因为我只想发送一行消息。) Android WebSocket库
  1. http://autobahn.ws/
  2. http://code.google.com/p/weberknecht

有人遇到了同样的问题,并描述了他是如何解决的

  1. http://chpeck.tumblr.com/post/37273036645/socket-io-with-android-webview
3个回答

4
我创建了一个示例项目,将WebSocket对象添加到PhoneGap的WebView中。您可以在这里找到它: https://github.com/pusher/pusher-phonegap-android 我发布了一个视频介绍这个项目: http://blog.pusher.com/2012/7/5/pusher-on-phonegap-for-android 我使用这个项目演示了如何在Android上使用PhoneGap与Pusher,但最终它只是一个包含Pusher脚本标记的项目。 您可以轻松地使用另一个需要WebSocket对象的库或直接使用它。 它使用websocket-android-phonegap库: https://github.com/anismiles/websocket-android-phonegap

你是将你的PhoneGap应用程序包含在Android WebView中还是直接在Android浏览器中打开? - Langusten Gustel
该示例项目创建了一个PhoneGap应用程序,它使用具有注入的 WebSocket 对象的Android WebView。这意味着您可以在运行在Android WebView中的JavaScript代码中使用 WebSocket - leggetter
是的。您可以使用JavaScript编写代码,并使用注入的“WebSocket”对象代理JavaScript和Java包装器之间的调用。您只能使用HTML、JavaScript和CSS项目和代码。试试看,你就会知道我在说什么了。 - leggetter
我可以在这个WebView中使用HTML5地理定位吗?例如,我想使用地理定位实时追踪应用程序的用户。 - Ben Sewards
据我所知,WebView是股票互联网浏览器应用程序的一个实例。因此,如果它支持地理定位,那么是的,你可以这样做。 - leggetter

2

1
如果我不想更改HTML / JS源代码怎么办?您认为通过JavaScript接口覆盖JS-WebSocket对象如何? - Langusten Gustel

1

首先检查您的错误代码;如果代码是:ERR_CLEARTEXT_NOT_PERMITTED; 请尝试在AndroidManifest.xml中的应用程序标记中添加android:usesCleartextTraffic="true",如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接