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