PhoneGap (Build) и SignalR, работает везде, кроме случаев, когда он фактически установлен на устройстве с неопределенной ошибкой

Я создал сервер SignalR, веб-клиент и мобильное приложение, созданное с помощью PhoneGap Build. Когда я запускаю приложение PhoneGap с помощью lite-server, PhoneGap CLI или настольного приложения PhoneGap, SignalR безупречно работает между веб-клиентом и приложением PhoneGap. Это включает использование мобильного приложения PhoneGap для подключения к приложению PhoneGap Desktop. Единственный раз, когда это не удается, - это когда я собираю его с помощью PhoneGap Build и устанавливаю APK на устройство. У меня нет объяснения этой ошибке.

Я обработал CORS через WEB.CONFIG сервера. Это простое приложение ASP.NET, в котором есть только файл запуска OWIN для настройки SignalR и класса Hub.

 <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE, TOKEN" />
        <add name="Access-Control-Allow-Credentials" value="false"/>
      </customHeaders>  
    </httpProtocol>
 </system.webServer>

Раздражает то, что ошибка, возникающая при сбое $ .connection.hub.start, - это просто «Ошибка: ошибка во время запроса согласования».

Когда срабатывает событие 'deviceready', я вызываю initiateSignalR ()

var appConfig = {
    'serverUrl': "http://wolf-signalrserver.azurewebsites.net"
}

var initiateSignalR = function(){
    if ($.signalR) {

    }

    var username = prompt("username");
    var success = `
                <div class ="serverMessage">
                    <span>--- WELCOME, ${username} ---</span>
                </div>
            `
    $('#chatbox').append(success)




        $.connection.hub.logging = true
        $.connection.hub.qs = { 'username': username }
        $.connection.hub.url = appConfig.serverUrl + "/signalr";
        var chatHub = $.connection.chatHub

        chatHub.client.broadcastMessage = function (name, message) {
            console.log("Data Incoming ---- Name: " + name + " Message: " + message);
            var message = `
                <div class="row">
                    <span class="col-sm-2">${name}:</span> 
                    <span class="col-sm-9"> ${message}</span>
                </div>
            `
            $('#chatbox').append(message)
        }


        $('#messageButton').on('click', function () {
            chatHub.server.send(username, $('#messageBox').val())
        })
        $('#messageForm').on('submit', function (e) {
            e.preventDefault();
            chatHub.server.send(username, $('#messageBox').val())
        })

        $.connection.hub.start({ withCredentials: false, jsonp: true })
            .done(function () {
                console.log("Connected successfully to SignalR");
                var success = `
                    <div class ="serverMessage">
                        <span>--- Successfully connected to the server ---</span>
                    </div>
                `
                $('#chatbox').append(success)
            })
            .fail(function (err) {
                console.log("Unable to connect to SignalR")
                alert(err);
            })
}

Здесь у меня есть репозиторий git: https://github.com/PhilWolf91/SignalR

Я понимаю, что здесь есть масса вопросов, но ни у одного из них нет подробного ответа на то, как они это исправили. Пример: SignalR. Net Client выходит из строя с ошибкой сервера 500 на устройстве, на симуляторе работает нормально


person PhilWolf91    schedule 08.05.2017    source источник


Ответы (1)


OK. Я гигантский идиот. Когда я очищал Config.Xml, я удалил сетевое разрешение и плагин белого списка по умолчанию.

<feature name="http://api.phonegap.com/1.0/network" />
<gap:plugin name="cordova-plugin-whitelist" source="npm" />

Полная функциональная конфигурация для этого проекта

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.wolf.signalrphonegap" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
    <name>SignalRPhoneGap</name>
    <description>
        Hello World sample application that responds to the deviceready event.
    </description>
    <author email="[email protected]" href="http://phillipwolf91.wordpress.com">
        Wolf Software
    </author>

    <feature name="http://api.phonegap.com/1.0/network" />
    <gap:plugin name="cordova-plugin-whitelist" source="npm" />
    <content src="index.html" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="android-minSdkVersion" value="14" />
    <platform name="android">
    </platform>    
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>

</widget>

Теперь у меня SignalR работает между сервером, веб-клиентом и приложением PhoneGap, установленным на устройстве.

person PhilWolf91    schedule 08.05.2017