2010-02-12 6 views
5

Estoy trabajando en una aplicación de iPhone que debería funcionar en los modos fuera de línea y en línea.
En su modo en línea se supone que alimenta toda la información que el usuario ingresa a un servicio web respaldado por GWT/GAE. En su modo fuera de línea, se supone que debe almacenar la información localmente y, cuando la conexión esté disponible, sincronizarla con el servicio web.Cómo mantener la aplicación de iPhone sincronizada con la aplicación GWT

Actualmente mi plan es el siguiente:

  1. proporcionar una conexión entre una aplicación y un servicio web utilizando Protobuffers para una eficiente comunicación sobre el alambre
  2. Trabaja con DB local utilizando datos básicos
  3. encuesta el estado de la red y, cuando esté disponible, sincronizar la base de datos y mantener algún tipo de sincronización de clave local-db-a-remote-db.

La pregunta es: ¿estoy en la dirección correcta? ¿Los patrones estándar para implementar esto? ¿Tal vez alguien me puede indicar una aplicación de código abierto que funciona de manera similar?

Soy realmente nuevo en la codificación de iPhone, y estaría encantado de escuchar cualquier sugerencia.

Gracias

+1

Creo que su pregunta es más que ver con los problemas de sincronización general (que es el maestro, cambios locales en el iPhone o el backend gwt) ¿verdad? Me interesaría esto también. – EightyEight

+0

que es exactamente lo que me interesa. Sincronizar los cambios locales a un conjunto de datos maestros en un servidor web. – reflog

Respuesta

0

sobre el sistema de dirección de diseño: En primer lugar, si no hay una necesidad real no crean 2 aplicaciones diferentes uno de otro y GWT iPhone crear uno, pero bien escrito aplicación GWT. Funcionará fuera de línea sin problemas y administrará sus datos usando HTML feature -- offline application cache Si es necesario crear 2 aplicaciones separadas que al menos ahórrese esfuerzo y no escriba el servidor dos veces como si fuera con el enfoque estándar de GWT fallará casi por completo para hablar con el servidor desde la aplicación independiente (está comprimido JSON a través de HTTP con algunos encabezados complicados ...) o escribirá cosas twise así que busque en el RestLet library bien soportado por el GAE.

Acerca de la forma de mantener la sincronización con el cambio fuera de línea/en línea: Hay varios enfoques a considerar y todos ellos no son perfectos. Entonces, cuando se consolide, piense en lo que espera el usuario ... No sea Microsoft Word, no intente engañar al usuario. Si hay al menos un escenario en los casos de uso que requieren la intervención del usuario para fusionar los cambios (y habrá - lléveselo al banco) de lo que tendrá que implementar la IU para esto, entonces hay una buena razón para usarlo a menudo - el usuario se acostumbrará. es mejor de lo que se verá en un tiempo desde que comenzó a usar la aplicación porque es rara la necesidad de hacerlo porque se implementó una lógica de fusión súper profunda que solo le pregunta al usuario en casos muy especiales ... No lo hagas. equilibrar el esfuerzo. Porque el lío que un error en dicho código presentará al usuario es mucho más doloroso que el beneficio de todos juntos.

Así que el CÓMO: La única forma es la de Do-UnDo. Mientras está fuera de línea: mantenga el registro de las acciones que el usuario realizó en los datos en el usuario de orden cronometrado, las hizo tan pronto como se conectó: envíe al servidor y ejecútelas. Lo mismo de servidor a cliente. Funcionará bien en la mayoría de los casos, siempre y cuando no esté escribiendo un tipo de software de Photoshop con grandes cantidades de datos por operación. También se lo conoce como Patrón de Acción por GangOfFour.

Otra forma es controlar el origen. - Versiones y pueden ser incluso bloqueos. muy dependiente de la aplicación El DBMS internamente algunas veces lo usa para implementaciones de transacciones.

Y siempre hay una opción para ser de sólo lectura cuando ofline :-)

2

Creo que has borrando las preguntas juntos.

  • Si tiene alguna pregunta sobre cómo hacer una interfaz web de GWT, esa es una pregunta.
  • Las preguntas sobre cómo sincronizar un iPhone a un servicio web son una pregunta diferente. Para eso, no querrás usar los RPCs de GWT para la sincronización, ya que tendrás que falsificar el 'lado del navegador' del sistema de serialización en tu código de iPhone, que GWT normalmente proporciona para ti.
+0

Estoy de acuerdo en que mi pregunta podría ser un poco borrosa. Acerca de su primer punto, eso no es lo que estaba preguntando, el segundo punto está más cerca. Me doy cuenta de que no puedo usar el RPC de GWT, y tendré que proporcionar un servicio web personalizado, eso es lo que escribí en la pregunta, planeo proporcionar una interfaz ProtoBufs. Lo que estaba preguntando es: ¿hay un patrón común para este flujo de trabajo? ¿Bibliotecas que ayudan a sincronizar Core Data con datos remotos? Tutoriales? – reflog

0

pregunto si tiene considerado el uso de un marco de sincronización para gestionar la sincronización. Si eso le interesa, puede echarle un vistazo al proyecto de código abierto, el servicio Sync de OpenMobster. Puede realizar las siguientes operaciones de sincronización

  • dos vías
  • unidireccional cliente
  • unidireccional dispositivo
  • arranque

Además de eso, todas las modificaciones se registran automáticamente y se sincronizan con la nube Puede desconectar su aplicación cuando la conexión de red no funciona. Seguirá cualquier cambio y automáticamente en el fondo lo sincronizará con la nube cuando la conexión regrese. También proporciona sincronización como iCloud en varios dispositivos

Además, las modificaciones en la nube se sincronizan mediante notificaciones Push, por lo que los datos siempre están actualizados incluso si se almacenan localmente.

Aquí hay un enlace al proyecto de código abierto: http://openmobster.googlecode.com

Aquí hay un enlace a iPhone App de sincronización: http://code.google.com/p/openmobster/wiki/iPhoneSyncApp

+0

¡Ya no hay OpenMobster! – confile

Cuestiones relacionadas