2013-12-07 2 views
4

Я работаю над мобильным приложением для метеорита (im, использующим android). им с помощью MetoerRider подход, по существу, запуск PhoneGap приложение и как только приложение будет сделано, начиная это делает Ajax вызов приложения метеора («http://myapp.meteor.com»)метеор с телефоном/кордорой

и я получить DOM из приложения метеора, как он ответ ,

$.ajax({ 
     url: __MeteorRiderConfig__.meteorUrl, 

     cache: false, 

     // TODO: split to method on MeteorRider 
     error: function(jqXHR, textStatus, errorThrown) { 

     console.error("MeteorRider failure"); 

     console.error(jqXHR, textStatus, errorThrown); 

     }, 
     // TODO: split to method on MeteorRider 

     success: function(data, textStatus, jqXHR) { 

     console.log("MeteorRider success"); 

     console.log(textStatus); 

     console.log(data); 
     // update URLs 

     data = data.replace(/(href|src|manifest)\=\"\//gm, '$1="' + meteorUrl + '/'); 

      console.log(meteorUrl); 

     console.log(data); 


// get the original file location, not including any params 
phonegapLocation = window.location.href.split('.html')[0] + '.html'; 

// it's stored in a param "page" 
currentMeteorPath = window.location.search.replace("?", "") 
if(currentMeteorPath.length > 0) { 
    meteorUrl += currentMeteorPath.split('page=')[1] 
} 
console.log("replacing state with "+meteorUrl) 
window.history.replaceState({}, "", meteorUrl); 


     // replace the document with the new document/data 

     document.open(); 

     document.write(data); 

     document.close(); 
     // trigger the "loaded" events (it'd be nice to do this AFTER JS has loaded 

     $(document).trigger('DOMContentLoaded'); 

     $(document).trigger('load'); 

     $(document).trigger('complete'); 

     } 
    }); 
    } 

проблема заключается в том, что мой PhoneGap приложение работает только, когда Wi-Fi включен, как только я закрыть WiFi он перестает работать, если я запуска моего PhoneGap приложение, когда WiFi выключен я все еще получаю метеорный DOM в мое приложение phonegap, но я не могу выполнять какие-либо функции (логин/создать группу и т. д.).

так я начал отладки мое приложение (с помощью PhoneGap отладки в build.phonegap.com), и вот журнал, который я получаю, когда Wi-Fi включен:

if(navigator.onLine){ 
console.log("true") 
} 
else{ 
console.log("false") 
} 

журналы -> «истинный»

var networkState = navigator.connection.type; 

     var states = {}; 
     states[Connection.UNKNOWN] = 'Unknown connection'; 
     states[Connection.ETHERNET] = 'Ethernet connection'; 
     states[Connection.WIFI]  = 'WiFi connection'; 
     states[Connection.CELL_2G] = 'Cell 2G connection'; 
     states[Connection.CELL_3G] = 'Cell 3G connection'; 
     states[Connection.CELL_4G] = 'Cell 4G connection'; 
     states[Connection.NONE]  = 'No network connection'; 

    console.log('Connection type: ' + states[networkState]); 
    } 

журналы -> 'WiFi соединение'

Meteor.status() 

журналы -> связано: правда RetryCount: 0 статус: "подключен"

при использовании мобильной сети:

if(navigator.onLine){ 
    console.log("true") 
    } 
    else{ 
    console.log("false") 
    } 

журналы -> "истинный"

var networkState = navigator.connection.type; 

     var states = {}; 
     states[Connection.UNKNOWN] = 'Unknown connection'; 
     states[Connection.ETHERNET] = 'Ethernet connection'; 
     states[Connection.WIFI]  = 'WiFi connection'; 
     states[Connection.CELL_2G] = 'Cell 2G connection'; 
     states[Connection.CELL_3G] = 'Cell 3G connection'; 
     states[Connection.CELL_4G] = 'Cell 4G connection'; 
     states[Connection.NONE]  = 'No network connection'; 

    console.log('Connection type: ' + states[networkState]); 
    } 

журналы -> 'Cell 3G связь'

Meteor.status() 

журналы -> подключены: false retryCount: 1 статус: "connect"

пытается сделать Meteor.reconnect() не помогает и не работает. при работе Meteor.disconnect() Когда Wi-Fi включен, приложение отключается, но затем при попытке сделать Meteor.reconnect() его не работает.

при переключении (когда приложение работает) либо на Wi-Fi on/wifi off. я теряю все соединение и не могу даже отлаживать.

EDIT: добавлено событие форума

phonegapapp = { 
    // are we on a phonegap app? 
    phonegap: true, 
    // are we testing PhoneGap or not? 
    test: false, 
    // Application Constructor 
    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 

    }, 
    // deviceready Event Handler 
    // 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
    // function, we must explicity call 'phonegapapp.receivedEvent(...);' 
    onDeviceReady: function() { 
     document.addEventListener("offline", this.onOffline, false); 
     phonegapapp.receivedEvent('deviceready'); 
     phonegapapp.receivedEvent('offline'); 
     if (this.test) { 
      $('phonegapapp-test').show(); 
     } else { 
      phonegapapp.meteorRider(); 
     } 
    }, 
    // Update DOM on a Received Event 
    receivedEvent: function (id) { 
     console.log('Received Event: ' + id); 
    }, 
    onOffline: function() { 
     device.exitApp(); 
    }, 

    // Setup MeteorRider 
    meteorRider: function() { 
     MeteorRider.init(); 
    } 
}; 

Update: протестирован на двух андроид телефонов (v 4.1.2 и v 4.3.3), на другом метеора приложения (без железа маршрутизатора, test.meteor.com). оба телефона вошли в систему - Meteor.status() «подключен» при использовании мобильной сети. но при включении/отключении Wi-Fi оба потеряли любое сетевое соединение.

поэтому я сужу его до двух возможных проблем: 1.my приложение метеорита делает что-то неправильно. 2.iron-router

после другой проверки другого метеоритного приложения (приложение, использующее железный маршрутизатор) meteor.status() журналы «подключены». Я верю, что причина неудачи в моем приложении, и я не вижу никаких ошибок в моем приложении метеоритов.

Новое обновление: ИТАК это становится действительно странно, я начал новое приложение метеоритное просто делать «метеор создать тест» добавил железо-маршрутизатор и еще несколько пакетов, таких как счета подчеркиваний Jquery и тому подобные. , а затем я развернул его для метеоритного метеорита. Boaz.meteor, com введите пароль, запустив приложение phonegap, чтобы узнать, работает ли его работа Meteor.status(); и получил «ложь» и «соединение»

Нового обновления: попытался создать приложение без каких-либо изменений или без добавления каких-либо пакетов или удаления любого пакета. работа с дозатором, Meteor.status(); журналы "false" и "connect"

ответ

1

Зарегистрируйте офлайн-событие. если устройство отключено, вызов этого события будет запущен. В функции обратного вызова закройте (завершите/остановите/выйдите) приложение.

код для запуска в автономном режиме событие:

document.addEventListener("offline", onOffline, false); 

function onOffline() { 
    // Handle the offline event 
} 

Выход из приложения для Iphone: navigator.device.exitApp();

Выход приложение для Android: device.exitApp();

Так что, приложение будет закрыто, когда соединение идет и его можно открыть снова. Пожалуйста, дайте мне знать

+0

Нет, этот доцент, похоже, тоже работает, есть две основные проблемы: 1. приложение phonegapp dosent подключается к серверу Meteor. Meteor.status() всегда возвращает false и «соединение» при использовании мобильного сеть. 2. При переключении Wi-Fi вкл/выкл все соединения теряются, независимо от того, что я использую (Wi-Fi или мобильная сеть). для первого номера я уверен, что это что-то похожее на Метеор, возможно, на веб-сокеты? im также довольно уверен, что если в set.xml с установленным contrct src в мое приложение Meteor, я не получу эти проблемы. (хотя я еще не пробовал его) –

+0

также не подключено к событию на основе объекта Connection, поэтому, когда Connection.NONE истинно, событие offline будет запускаться (насколько я знаю, исправьте меня, если он ошибается), но объект Connection никогда не изменяется никому. –