2014-10-05 2 views
0

У меня есть приложение метеорита, работающее на порту 3000.
Тогда у меня есть ионное приложение, обслуживающее простой клиент.
Я хочу видеть данные, полученные в приложении метеорита в ионном приложении.
Я создал службу:Ionic и WebSocket на Android

(function() { 
angular.module('myApp').factory('myApi', ['$q', '$rootScope', myApi]); 
function myApi($q, $rootScope) { 
    var options = { 
     endpoint: "ws://localhost:3000/websocket", 
     SocketConstructor: WebSocket 
    }; 
    var ddp = new DDP(options); 
    ddp.on("connected", function() { 
     console.log("Connected"); 
     ddp.sub("allHistory"); 
    }); 

    function on(callback) { 
     ddp.on("added", function (data) { 
      console.log("on added", data.fields.value); 
      var item = { value: data.fields.value, date: data.fields.date }; 
      callback(item); 
     }); 
    }; 
    return { 
     on: on, 
    }; 
} 
})(); 

Контроллер:

angular.module('myApp').controller('MyController', 
function EventController($scope, myApi) { 
    myApi.on(function (data) { 
     $scope.history.push(data); 
    }); 
    $scope.history = []; 
} 
); 

Вид:

<div ng-controller="MyController" style="padding-left:20px; padding-right:20px"> 
    <ul class="thumbnails"> 
     <li ng-repeat="item in history"> 
      <div class="row span9"> 
       <span>Date: {{item.date}}</span> 
       <span>Value: {{item.value}}</span> 
      </div> 
     </li> 
    </ul> 
</div> 

Все работает с помощью веб-клиента: я могу получить данные из приложения метеора (используя протокол DDP с реализацией ddp.js) на веб-клиенте, выполняющем команду ionic serve.
Когда я пытаюсь выполнить ionic emulate android, я не вижу данные в AVD, и у меня есть «ReferenceError: WebSocket не определен» на панели LogCat.
Я попытался установить плагин «cordova add https://github.com/knowledgecode/WebSocket-for-Android.git», но безуспешно. Как я могу использовать веб-сокеты в ионном приложении с целью andorid?

+0

Существует реализация sockjs, которая имитирует веб-порты. Я добавил 'sockjs-0.3.4.min.js' мои скрипты и заменены: опции вар = { конечная точка: "WS: // локальный: 3000/WebSocket", SocketConstructor: WebSocket }; с: опции вар = { конечная точка: "Http: // Localhost/sockjs", SocketConstructor: SockJS }; –

ответ

0

Хорошо, так, я получил его, наконец, работать на меня, используя SockJS, он должен быть установлен как на сервере и на клиенте, и вместо того, чтобы использовать этот код:

var options = { 
    endpoint: "ws://localhost:3000/websocket", 
    SocketConstructor: WebSocket 
}; 
var ddp = new DDP(options); 
ddp.on("connected", function() { 
    console.log("Connected"); 
}); 

Я использовал этот код:

var options = { 
     endpoint: "https://localhost:3000/echo", // echo is the prefix i set on server-side 
     SocketConstructor: SockJS 
    }; 
    var ddp = new DDP(options); 
    ddp.on("connected", function() { 
     console.log("Connected"); 
    }); 

Итак, теперь он соединяется. Но теперь я получаю сообщение «Access-Control-Allow-Origin», когда я его развертываю на мобильном устройстве, в браузере он работает нормально, но на устройстве Android он дает мне эту ошибку ... Я не могу комментировать на вопросы еще, недостаточно репутации, поэтому я сожалею, что задал еще один вопрос в ответе ... Но есть ли какие-то проблемы с этим «контролем доступа ...»?

Спасибо, и я надеюсь, что помог как-то.

+0

Возможно, немного поздно, но вам нужно заглянуть в CORS. Если вы отправляете пользовательские заголовки, серверу необходимо явно «разрешить» эти заголовки для запроса. Возможно, вы видели запрос опций OPTIONS на консоли вместо или перед обычным запросом GET. – CleoR

0

Наиболее вероятной причиной его работы в браузере является то, что ваш сервер и браузер находятся на одном хосте. Попробуйте воспользоваться услугой с другого хоста через браузер. Вы получите ту же ошибку. Вам нужно разрешить заголовкам на стороне сервера исправить «Access-Control ...» вещь

Смежные вопросы