2010-02-12 1 views
5

Sto lavorando a un'applicazione iPhone che dovrebbe funzionare in modalità offline e online.
Nella sua modalità online è necessario fornire tutte le informazioni che l'utente inserisce in un servizio web supportato da GWT/GAE. Nella modalità offline è necessario memorizzare le informazioni localmente e, quando è disponibile la connessione, sincronizzarle con il servizio web.Mantenere l'applicazione iPhone in sincronia con l'applicazione GWT

Attualmente il mio piano è il seguente:

  1. fornire una connessione tra un app e un webservice utilizzando Protobuffers per un'efficiente comunicazione over-the-wire
  2. Lavora con DB locale utilizzando Core Data
  3. Sondaggio lo stato della rete e, quando disponibile, sincronizza il database e mantiene una sorta di sincronizzazione delle chiavi db-to-remote-db locale.

La domanda è: sono nella giusta direzione? Sono i modelli standard per l'implementazione di questo? Forse qualcuno può indicarmi un'applicazione open source che funziona in modo simile?

Sono davvero nuovo per la codifica di iPhone e sarei lieto di ricevere eventuali suggerimenti.

Grazie

+1

Penso che la tua domanda è più a che fare con problemi di sincronizzazione generale (chi è il padrone, modifiche locali sull'iPhone o sul backend gwt) giusto? Sarei interessato anche a questo. – EightyEight

+0

questo è esattamente quello che mi interessa. Sincronizzare le modifiche locali con un set di dati master su un server web. – reflog

risposta

0

sulla direzione progettazione del sistema: Prima se non v'è alcuna reale necessità di non creare 2 diverse applicazioni GWT uno e l'altro iPhone crearne uno ma ben scritto GWT app. Funzionerà fuori linea senza problemi e gestirà i tuoi dati usando HTML feature -- offline application cache Se è necessario creare 2 app separate almeno risparmi te stesso e non scrivere server due volte, come se si usasse l'accesso standard GWT, si fallirebbe quasi sicuramente per parlare con il server da app stand-alone (è compresso JSON su HTTP con alcune intestazioni difficili ...) o scriverà le cose twise quindi guardate allo RestLet library ben supportato dal GAE.

Informazioni sul modo di mantenere la sincronizzazione con la commutazione offline/online: Ci sono diversi approcci da considerare e tutti non sono perfetti. Quindi, quando ti consederti, la tua mente pensa a quello che ti aspetti ... Non essere Microsoft Word, non cercare di superare in astuzia l'utente. Se esiste almeno uno scenario nei casi d'uso che richiedono l'intervento dell'utente per unire le modifiche (e ce ne sarà - portarlo in banca) - di quello che si avrà implementando l'interfaccia utente per questo - che ci sia una buona ragione per usarlo spesso - l'utente si abituerà ad esso. è meglio di quanto lo vedrà da un po 'da quando ha iniziato a usare l'app perché una necessità è rara perché hai implementato una logica di fusione super duper che chiede all'utente solo in casi molto speciali ... Non farlo. bilancia lo sforzo. Perché il casino che un bug in tale codice introdurrà all'utente è molto più doloroso del beneficio di tutti insieme.

quindi il COME: L'unico modo è Do-UnDo. Mentre non in linea - mantieni il log delle azioni eseguite dall'utente sui dati in ordine di orario, l'utente li ha fatti non appena ti sei connesso: invia al server ed eseguili. Lo stesso da server a client. Funzionerà bene nella maggior parte dei casi, purché non si scriva un tipo di software Photoshop con enormi quantità di dati per operazione. Chiamato anche Pattern di azione da GangOfFour.

Un altro modo è un modo di controllo della sorgente. - Versioni e potrebbero anche essere serrature. molto dipendente dall'applicazione. DBMS internamente alcune volte lo usa per implementazioni di transazioni.

E c'è sempre la possibilità di essere letto solo quando ofline :-)

2

Credo che tu abbia sfocatura le domande insieme.

  • Se hai una domanda su come realizzare un'interfaccia web GWT, questa è una domanda.
  • Le domande su come sincronizzare un iPhone con un servizio Web sono una domanda diversa. Per questo, non si desidera utilizzare gli RPC di GWT per la sincronizzazione, in quanto si dovrebbe simulare il "lato browser" del sistema di serializzazione nel codice iPhone, che GWT normalmente fornisce per voi.
+0

Sono d'accordo che la mia domanda potrebbe essere un po 'sfocata. Riguardo al tuo primo punto - non è quello che stavo chiedendo, il secondo punto è più vicino. Mi rendo conto che non posso usare RPC di GWT e dovrò fornire un servizio web personalizzato, questo è quello che ho scritto nella domanda, ho intenzione di fornire un'interfaccia ProtoBufs. Quello che stavo chiedendo è - esiste un modello comune per questo flusso di lavoro? Librerie che aiutano a sincronizzare i dati di base con i dati remoti? Esercitazioni? – reflog

0

chiedo se avete pensato di utilizzare un quadro di sincronizzazione per gestire la sincronizzazione. Se ti interessa puoi dare un'occhiata al progetto open source, il servizio di sincronizzazione di OpenMobster. È possibile effettuare le seguenti operazioni di sincronizzazione

  • bidirezionale
  • a senso unico client
  • a senso unico dispositivo
  • avvio

Oltre a questo, tutte le modifiche sono tracciati e sincronizzati automaticamente con il Cloud. Puoi avere la tua app offline quando la connessione di rete non funziona. Troverà tutte le modifiche e automaticamente in background lo sincronizzerà con il cloud quando ritorna la connessione. Fornisce anche la sincronizzazione come iCloud su più dispositivi

Inoltre, le modifiche nel cloud vengono sincronizzate tramite notifiche push, quindi i dati sono sempre aggiornati anche se sono memorizzati localmente.

Ecco un link al progetto open source: http://openmobster.googlecode.com

Ecco un link per iPhone App Sync: http://code.google.com/p/openmobster/wiki/iPhoneSyncApp

+0

Non c'è più OpenMobster! – confile