Up-Sync y Down-Sync en Android?
Estoy trabajando en una aplicación de Punto de Venta que necesita ser muy buena mecanismo de sincronización. Tenemos Magento Database. El dispositivo androide tiene SQLite local Db. Ahora necesitamos sincronizar de la siguiente manera:
Local —— Sync To —————> Servidor (Up Sync)
- SQLite en Android y MongoDB con sincronización
- ¿Se puede sincronizar un Android AsyncTask doInBackground para serializar la ejecución de la tarea?
- Mejor manera de sincronizar contactos
- Android Studio, Sync Problema: no se puede encontrar DestinationRootCopySpec
- ¿SyncAdapter soporta tanto la carga como la descarga durante una sincronización?
Server —— Sync To —————> Locals (Sincronización descendente)
Hay 2 cosas:
1) write-to (Cómo cuidar ??)
Para cada cambio que hago en local, sincronizará directamente mi local con el servidor
2) write-back (¿Cómo cuidar ???)
Siempre que hay un cambio en el servidor, necesitamos sincronizar todos nuestros locales con el servidor.
Por lo tanto, la tarea es: identificar una actualización del servidor
Y sincronizar a nuestros lugareños. Al igual que hay 4 dispositivos que se ejecutan en una tienda y hemos añadido un nuevo cliente a través de un dispositivo. Ahora quiero que los otros tres dispositivos locales db también actualizado con la información sobre ese cliente y servidor también actualizado.
He oído hablar de los hilos de fondo y ejecutar hilos después de un intervalo de tiempo. Pero cuál es la mejor manera de hacer eso que no afecta la aplicación. También todas las grandes tiendas minoristas utiliza el proceso de sincronización. Lo que utilizaron para eso?
Cualquier ayuda es apreciada.
- ¿Cómo configurar correctamente el syncAdapter?
- Android java.lang.IllegalMonitorStateException: objeto no bloqueado por hilo antes de esperar ()
- En Android, ¿debe ejecutarse un adaptador de sincronización de contactos en un proceso independiente?
- Prácticas recomendadas para sincronizar una base de datos SQL con un servidor remoto REST en Android
- ¿Cómo mantener sincronizados los datos de una aplicación de Android en varios dispositivos?
- ¿Cómo sincronizar el acceso a sqlite db entre el primer plano y el proceso en segundo plano?
- Persistencia de datos de usuario de servicios en línea para "visualización sin conexión" en aplicaciones de Android
- ¿Cómo manejas los registros de antememoria de caché en la aplicación para móviles
Depende completamente de la estructura de la base de datos …
Tiene DATABASE
en LOCAL (device)
y en SERVER
AHORA
Es necesario que TIMESTAMP fieLd
agregue a los TABLES
que en realidad se desea mantener en SYNC.
Siempre que usted hará cualquier cambio en el servidor el TIMESTAMP
se actualizará allí y lo mismo será el caso de la base de datos local también lo que tiene que hacer es ahora.
Ejecutar un servicio en segundo plano que seguirá comparando los TIMESTAMPS
de LOCAL
con el de SERVER
.
Ahora usted tiene que poner la condición que si TIMESTAMP
del SERVER
es más nuevo que el de LOCAL
entonces trae cambios de SERVER
a LOCAL
,
and vice versa will be the condition to take changes from LOCAL to SERVER.
Además, usted tiene que decidir la frecuencia con la que desea ejecutar este servicio.
ALTERNATIVAMENTE:
Usted puede hacer la tabla allí en el SERVER
que almacenará la fecha de LAST_SYNCHED
para el dispositivo particular
Siempre que ingrese en su dispositivo (o cualquier otro evento particular en el que desea que realice esto) el servidor comprobará-
- Cuando este dispositivo fue LAST_SYNCHED
- Entonces lo comparará con TODAYS DATE
- Y comprobará qué upadets realmente sucedió entre estas fechas y enviará los cambios al LOCAL (dispositivo)
Y viceversa para LOCAL (dispositivo) a SERVIDOR
Usted tiene que jugar con TIMESTAMPS
resto puede tener su propia lógica de cómo estructurar la base de datos.
Te dije lo que he observado, cuando he sido parte de un proyecto similar
EDITAR
El proceso anterior define cómo sincronizar los dispositivos con el servidor me refiero a la estrategia ..
Si desea que sus dispositivos se notifiquen desde el servidor cuando sincronizar en lugar de pulsar repetidamente el WEB-SERVICE.
Usted puede hacer uso de PUSH NOTIFICACIÓN , GCM
es uno de ellos que envía notificación push a los dispositivos, se puede integrar a su proyecto
Para la sincronización es necesario manejar dos situaciones siguientes.
- Cómo y cuándo recibir actualizaciones del servidor
- Cómo identificar datos locales no sincronizados
Cómo y cuándo recibir actualizaciones de servidor:
Para recibir actualizaciones, podemos usar GCM (Google Cloud Messaging) . Si se realizan actualizaciones en el servidor, el servidor envía un mensaje push a todos los dispositivos. Los dispositivos recibirán ese empuje y basado en el mensaje, los dispositivos descargarán los datos del servidor. (Creo que este es el mejor enfoque que el servicio de golpe continuo para algunos intervalos particulares como sondeo)
Para recibir sólo datos actualizados del servidor, el servidor mantiene la columna modified_timestamp para todas las tablas. Los dispositivos de primera vez enviarán marca de tiempo vacía, de modo que el servidor envíe todos los datos al dispositivo con la marca de hora del servidor. El dispositivo recibe los datos nuevos y actualiza el db local y guarda la última marca de tiempo del servidor. Para la próxima vez que obtenga actualizaciones del servidor, el dispositivo enviará la marca de tiempo del servidor almacenada y el servidor enviará sólo los datos modificados después de esa fecha. Para cada servidor de respuesta envía la marca de tiempo del servidor, los dispositivos deben almacenar esa marca de tiempo y deben utilizarse al llamar al servicio.
Cómo identificar datos locales no sincronizados:
Para enviar actualizaciones locales, db local necesita mantener una columna 'isSynced' en las tablas. Si cualquier fila modificada en local isSynced será falsa, después de la sincronización exitosa de datos locales con el servidor isSynced será verdadera. Para que podamos manejar los datos locales actualizados con el servidor.
Actualizado:
Puede encontrar más información sobre este enlace de desarrollador
¿Ha considerado utilizar una solución comercial?
http://www.mobeelizer.com/ parece como lo que quieres lograr. Probablemente hay muchos otros.
Nota: no hay afiliación con esa empresa.
Yo diría que la declaración del problema es incompleta. En la configuración descrita anteriormente lo que falta es lo que realmente va a sincronizar.
El caso habitual en POS es que existen pocos índices (id, valor, …) tablas que se distribuirán desde el servidor central a los dispositivos cliente. En la mayoría de los casos es lista de precios, lista de existencias, etc Esas tablas rara vez se modifican en los dispositivos cliente (en realidad podría, pero luego tiene que ser redistribuido desde el servidor central y reconocido por los dispositivos cliente).
La otra dirección tienden a ser también bastante sencillo en el dispositivo cliente que generar facturas o facturas. Estas son de nuevo las cosas locales que se propagarán hacia el servidor. Por lo tanto, los almacena de forma local y en el punto de sincronización los envía al servidor. Posteriormente, puede recibir sus propios artículos del servidor como un reconocimiento.
EDIT: para detectar cambios, las marcas de tiempo de escritura como se mencionó anteriormente es una necesidad.
Hasta aquí se describe el flujo de datos.
A continuación, tienes que pasar al dominio de la solución e implementar estas reglas. Hay un par de enfoques de sincronización (ieSyncML). Por otro lado mantenerlo simple rulez. Por lo tanto, la principal preocupación debe ser algún tipo de bloqueo y colas que hace que la cosa robusta.
También podría usar el cliente basado en agente, en tal caso cada dispositivo tiene su propio agente (podría ser la réplica del último estado conocido del db del dispositivo) pero consideraría esto como una característica avanzada que podría venir en la versión futura 🙂
También estoy trabajando en la aplicación de ventas en la que tengo a mis objetivos locales a los objetivos del servidor y el servidor a mis metas locales
Mi proceder es que cada vez que mi aplicación se inicia i obtener los últimos datos de mi servidor de mi todo mi miembro y actualizar mi base de datos local con estos datos y siempre que cambiar los datos en mi base de datos local también actualizar en el lado de los separadores
También utilicé un botón de la sinc. Que buscará los datos más últimos del servidor si mi miembro del equipo cambia su meta o perfil
Si desea actualizar los datos de todos los dispositivos, ¿por qué no utiliza sólo la base de datos remota, por qué está introduciendo la base de datos local para esto.
Para su caso le sugeriré que trabaje con solamente la base de datos alejada directamente así que las cosas se pueden hacer en tiempo real.
- ¿Qué tipo de pitfals existen para la firma de APK para Android?
- ¿Cómo puede ImageView vincular a la página web?