【问题标题】:ionic framework + cordova. WebSocket is not working in the android release version, but the debug version works correctly离子框架+科尔多瓦。 WebSocket 在 android release 版本中不工作,但 debug 版本工作正常
【发布时间】:2017-02-02 15:37:33
【问题描述】:

有了这些日志:

与“wss://xxxxxx.net/”的 WebSocket 连接失败:WebSocket 打开握手被取消”

“TransportWebSocket.errorHandler - 错误{}”

"TransportWebSocket.closeHandler - 错误 {"code":1006,"text":""}"

请帮助解决这个问题。

sp.external.TransportWebSocket = function () {
        var self = this;
        var socket = null;
        var isOpen = false;
        var listSendMsg = [];

        this.openHandler = null;
        this.closeHandler = null;
        this.messageHandler = null;
        this.errorHandler = null;
        this.serverURL = '';

        this.send = function (_data, _highPrioritetFlag) {
            utils.logger.debug('TransportWebSocket', 'send', 'Open status:' + isOpen);

            _highPrioritetFlag = _highPrioritetFlag || false;

            if (isOpen) {
                if (_data && typeof _data === 'object') {
                    try {
                        socket.send(JSON.stringify(_data));
                    }
                    catch (error) {
                        throw new Error('Invalid JSON stringify');
                    }
                }
                else {
                    throw new Error('The data sent must be an object');
                }
            }
            else {
                if (_highPrioritetFlag) {
                    listSendMsg.unshift(_data);
                }
                else {
                    listSendMsg.push(_data);
                }

                openSocket();
            }
        };

        this.reopen = function () {
            utils.logger.debug('TransportWebSocket', 'reopen');
            openSocket();
        };

        this.close = function (_code) {
            utils.logger.debug('TransportWebSocket', 'close');
            socket.close(_code);
        };

        function procListMsg() {
            utils.logger.debug('TransportWebSocket', 'procListMsg', 'Processing buffer messages, items:' + listSendMsg.length);
            if (listSendMsg.length > 0) {
                self.send(listSendMsg.shift());
                setTimeout(procListMsg, 20);
            }
        }

        function openHandler() {
            utils.logger.debug('TransportWebSocket', 'openHandler', 'WebSocket.readyState:' + socket.readyState);
            if (socket.readyState === WebSocket.OPEN) {
                isOpen = true;

                procListMsg();

                if (self.openHandler) {
                    self.openHandler();
                }
            }
        }

        function closeHandler(error) {
            utils.logger.debug('TransportWebSocket', 'closeHandler', 'Error', {code: error.code, text: error.reason});
            isOpen = false;

            if (socket.readyState === WebSocket.CLOSED) {

                if (self.closeHandler) {
                    self.closeHandler(error);
                }
            }
        }

        function errorHandler(error) {
            utils.logger.debug('TransportWebSocket', 'errorHandler', 'Error', {code: error.code, text: error.reason});
            isOpen = false;

            if (self.errorHandler) {
                self.errorHandler(error);
            }
        }

        function messageHandler(e) {
            var msg = null;

            if (self.messageHandler) {
                try {
                    msg = JSON.parse(e.data);
                }
                catch (error) {
                    throw new Error('Invalid JSON format in response: ' + e.data);
                }

                self.messageHandler(msg);
            }
        }

        function openSocket() {
            utils.logger.debug('TransportWebSocket', 'openSocket', 'Opening');
            socket = new WebSocket(self.serverURL);
            socket.onopen = openHandler;
            socket.onclose = closeHandler;
            socket.onmessage = messageHandler;
            socket.onerror = errorHandler;
        }
    };

【问题讨论】:

  • 你能分享你的代码吗?
  • 我添加了模块的代码
  • 你有网络权限吗?
  • 是的,我在 AndroidManifest.xml 中有这个字符串

标签: android cordova ionic-framework websocket release


【解决方案1】:

不知道你是否解决了这个问题,但是遇到同样问题的人找到这个帖子,你可以检查这个cordova "release" behaves differently to "debug" regarding SSL

简而言之,修改使调试和发布行为不同的文件: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java

注释掉方法onReceivedSslError的内容,替换为

handler.proceed();
return;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2015-03-06
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多