Websocket在使用phonegap的android应用程序中不起作用

Posted

技术标签:

【中文标题】Websocket在使用phonegap的android应用程序中不起作用【英文标题】:Websocket not working in android app using phonegap 【发布时间】:2014-06-30 08:07:34 【问题描述】:

我正在尝试在我的 signalR 服务器和使用 phonegap CLI 构建的 android 应用程序之间建立 websocket 连接。

javascript 代码在我的 PC 上的浏览​​器上运行,但是当我将其打包为 android 时,它无法连接并给出以下错误:协商请求期间出错

这里是 javascript 代码 -

<!DOCTYPE html>
<html>
<head>
    <title>My New Application</title>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no;" />

    <script type="text/javascript" src="js/jquery-1.7.1.js" ></script>
    <script type="text/javascript" src="js/jquery.mobile-1.0.1.js"></script>
    <script type="text/javascript" src="js/jquery.signalR-2.0.3.js"></script>  
    <script type="text/javascript" src="phonegap.js"></script>

    <script type="text/javascript" src=http://WEB_ADDRESS.net/signalrPush/signalr/hubs"></script>

    <script type="text/javascript"> 
        $(function() 

            alert('Phonegap device ready event...');

            /*
            var connection = $.hubConnection("http://WEB_ADDRESS.net/signalrPush/signalr",  useDefaultPath: false );
            connection.error(function (error)
                alert("SignalR error: " + error);
                );
            var pushhubProxy = connection.createHubProxy('pushhub');
            pushhubProxy.on('sendmsg',function(message) $('#ulServerMessages').append('<li>' + message + '</li>'); alert(message););
            connection.start( transport: ['webSockets', 'longPolling'] ).done(function() alert('Now connected, connection ID=' + connection.id);)
                            .fail(function() alert('Could not connect'); );

            */

            $.connection.hub.url = "http://WEB_ADDRESS.net/signalrPush/signalr";
            var mypushHub = $.connection.pushhub;
            if(typeof(mypushHub)=="object")
            
                alert(typeof(mypushHub));   
                mypushHub.client.sendmsg = function (message) 
                    $('#ulServerMessages').append('<li>' + message + '</li>');
                    alert(message); 
                
                $.connection.hub.start(jsonp: true).done(function () 
                    mypushHub.server.broadcastmsg();
                ).fail(function (error)  alert(error); );
            
            else
            
                alert(typeof(mypushHub));
                alert("Connection Prob");
            
        );
    </script>
</head>
<body>
    <div data-role="header">
        <h1>Get Server Data</h1>
    </div>
    <div id="pusheddata" style="width:300px; height:400px; overflow: auto;">
       <ul id="ulServerMessages"></ul>
    </div>
</body>
</html>

asp.net 代码托管在 azure 上。 我还尝试在没有生成的代理(注释代码)的情况下进行连接,该代理再次适用于 chrome,但不适用于 android 模拟器(4.4)。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

【参考方案1】:

我和你有同样的问题。 Websocket 是 html5 中的一项功能,并非所有浏览器都支持 Chrome 浏览器支持 websockets,但 android 4.4 (jelly beans) In-browser 不支持。 这就是Android开发kitkat(支持websocket)的原因。 如果你想在 android 4.2、4.4(果冻豆)中使用 websocket,你必须使用 websocket cordova 插件,比如here 还有很多其他的,我就像你一样试图找到答案

【讨论】:

以上是关于Websocket在使用phonegap的android应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 版 PhoneGap 中的 websocket 状态如何?

iOS 5 的 Websocket 连接立即关闭,我正在尝试连接到 node.js 服务器和 phonegap 应用程序

Phonegap Android 指纹认证插件

带有 Phonegap 的 Android 应用程序在横向旋转时崩溃

在不使用 XCode 的情况下将 PhoneGap 添加到 Xcode 项目中

如何使用 Phonegap 插件(适用于 Android)向 API 发出简单的 json 发布请求?