vincular telefono sincronizar significa qué que ejemplo con complemento como celular android android-syncadapter data-sharing

telefono - Sincronización de datos entre la aplicación de Android y el servidor web



sincronizar celular android con pc (9)

@Grantismo ofrece una gran visión general de los componentes de sincronización de Android.

La biblioteca SyncManagerAndroid proporciona una implementación simple de sincronización bidireccional para conectarse al marco de sincronización de Android (AbstractThreadedSyncAdapter.OnPerformSync).

https://github.com/sschendel/SyncManagerAndroid

Quiero sincronizar datos (como un registro db, medios) entre una aplicación de Android y un servidor. Si has visto Evernote o aplicaciones similares, ciertamente entiendes lo que quiero decir.

Tengo una pregunta (imagina que queremos sincronizar los registros de base de datos):

  1. Cada usuario tiene una parte del espacio del servidor para sí mismo (como Evernote o Dropbox ). Tal vez el usuario crea nuevos registros por teléfono y crea nuevos registros en el servidor. ¿Cómo puedo unir estos registros juntos? Si hay registros con la misma ID ¿Qué algoritmos me sugieren?

  2. Excepto JSON , ¿hay alguna forma de enviar datos entre el dispositivo móvil y el servidor?

  3. Si SyncAdapter y ContentProvider pueden resolver mis problemas, explíqueme exactamente. (Si pudiera ofrecerme algunas muestras o tutoriales O BIEN Se agradecería cualquier consejo o palabra clave para ayudar a ampliar / guiar mi búsqueda).


@Grantismo proporciona una gran explicación sobre el conjunto. Si deseas saber quiénes son las personas que realmente están haciendo esto, te sugiero que eches un vistazo a cómo lo hizo Google para la aplicación IO de Google de 2014 (siempre vale la pena echar un vistazo profundo al código fuente de estas aplicaciones que lanzan. Hay mucho que aprender de ahi).

Aquí hay una publicación del blog al respecto: http://android-developers.blogspot.com.br/2014/09/conference-data-sync-gcm-google-io.html

Esencialmente, en el lado de la aplicación: GCM para señalización, Sync Adapter para obtener datos y hablar correctamente con el Proveedor de contenido que hará que las cosas sean persistentes (sí, aísla el DB del acceso directo desde otras partes de la aplicación).

Además, si desea consultar el código de 2015: https://github.com/google/iosched


Intentaré responder a todas sus preguntas abordando la pregunta más amplia: ¿Cómo puedo sincronizar los datos entre un servidor web y una aplicación de Android?

La sincronización de datos entre su servidor web y una aplicación de Android requiere un par de componentes diferentes en su dispositivo Android.

Almacenamiento persistente:

Así es como su teléfono realmente almacena los datos que recibe del servidor web. Un posible método para lograr esto es escribir su propio ContentProvider personalizado respaldado por una base de datos Sqlite. Puede encontrar un tutorial decente para un proveedor de contenido aquí: http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

Un ContentProvider define una interfaz consistente para interactuar con sus datos almacenados. También podría permitir que otras aplicaciones interactúen con sus datos si lo desea. Detrás de su ContentProvider podría haber una base de datos Sqlite, un Cache o cualquier mecanismo de almacenamiento arbitrario.

Si bien yo recomendaría usar un ContentProvider con una base de datos Sqlite, podrías usar cualquier mecanismo de almacenamiento basado en Java que quisieras.

Formato de intercambio de datos:

Este es el formato que utiliza para enviar los datos entre su servidor web y su aplicación de Android. Los dos formatos más populares en estos días son XML y JSON. Al elegir su formato, debe pensar qué tipo de bibliotecas de serialización están disponibles. Sé de antemano que hay una biblioteca fantástica para la serialización json llamada gson: https://github.com/google/gson , aunque estoy seguro de que existen bibliotecas similares para XML.

Servicio de sincronización

Querrá algún tipo de tarea asíncrona que puede obtener nuevos datos de su servidor y actualizar el contenido móvil para reflejar el contenido del servidor. También querrá notificar al servidor cada vez que realice cambios locales en el contenido y desee reflejar esos cambios. Android proporciona el patrón SyncAdapter como una forma de resolver fácilmente este patrón. Tendrá que registrar cuentas de usuario, y luego Android realizará mucha magia para usted y le permitirá sincronizar automáticamente. Aquí hay un buen tutorial: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

En cuanto a cómo se identifica si los registros son iguales, normalmente creará elementos con una identificación única que almacenará tanto en el dispositivo Android como en el servidor. Puedes usar eso para asegurarte de que te refieres a la misma referencia. Además, puede almacenar atributos de columna como "updated_at" para asegurarse de que siempre esté obteniendo los datos más recientes, o no escribir accidentalmente sobre los nuevos datos escritos.


Mira parseplatform.org . Es un proyecto de código abierto.

(Además de poder obtener un paquete comercial disponible en back4app.com ).

Es un servicio de base de datos del lado del servidor muy sencillo y fácil de usar que brinda una excelente API del lado del cliente Android


Por ejemplo, desea sincronizar la tabla todoTable de Sqlite a Sqlite

Primero, cree una version (type INT) nombre de columna version (type INT) en todoTable para Sqlite y Sqlite

Segundo, cree un nombre de tabla database_version con un nombre de columna currentVersion(INT)

En MySql , cuando agrega un nuevo elemento a todoTable o elemento de actualización, debe actualizar la versión de este elemento en +1 y también actualizar la currentVersion

En Android , cuando desee sincronizar (pulsando manualmente el botón de sincronización o un servicio ejecutado con un período de tiempo):

Enviará la solicitud con la Sqlite actual de Sqlite (actualmente es 1) al servidor.
Luego, en el servidor, encontrará qué elemento en MySql tiene un valor de versión mayor que Sqlite currentVersion (1) luego respuesta a Android (en este ejemplo, el elemento 3 con la versión 2 responderá a Android)

En SQLite , agregará o actualizará un nuevo elemento en todoTable y actualizará la versión actual


Si escribe esto usted mismo, estos son algunos de los puntos a tener en cuenta.

Autenticación adecuada entre el dispositivo y el servidor de sincronización

Un protocolo de sincronización entre el dispositivo y el servidor. Por lo general, irá en 3 fases, autenticación, intercambio de datos, intercambio de estado (qué operaciones funcionaron y cuáles fallaron)

Elija su formato de carga útil. Sugiero XML basado en SyncML mezclado con formato basado en JSON para representar los datos reales. Entonces, SyncML para el protocolo y JSON para los datos reales que se intercambian. Siempre se prefiere usar JSON Array mientras se manipula los datos, ya que es fácil acceder a los datos utilizando JSON Array.

Realizar un seguimiento de los cambios de datos tanto en el cliente como en el servidor. Puede mantener un registro de cambios de ID que cambie y recogerlos durante una sesión de sincronización. Además, borre el registro de cambios ya que los objetos se sincronizan correctamente. También puede utilizar una variable booleana para confirmar el estado de sincronización, es decir, la última vez que se realizó la sincronización. Será útil para los usuarios finales identificar la hora en que se realiza la última sincronización.

Debe tener una forma de comunicarse desde el servidor al dispositivo para iniciar una sesión de sincronización a medida que los datos cambian en el servidor. Puede usar C2DM o escribir su propia comunicación persistente basada en TCP. El enfoque tcp es muy continuo

Una forma de replicar los cambios de datos en múltiples dispositivos

Y por último, pero no menos importante, una forma de detectar y manejar conflictos.

Espero que esto ayude como un buen punto de partida.


Si pensamos en el día de hoy , la respuesta aceptada es demasiado antigua. Como sabemos, tenemos muchas bibliotecas nuevas que pueden ayudarlo a realizar este tipo de aplicaciones.

Debes aprender los siguientes temas que te ayudarán seguramente:

  • SyncAdapter: el componente adaptador de sincronización en su aplicación encapsula el código para las tareas que transfieren datos entre el dispositivo y un servidor. En función de la programación y los desencadenantes que proporciona en su aplicación, el marco del adaptador de sincronización ejecuta el código en el componente del adaptador de sincronización.

  • Realm : Realm es una base de datos móvil: un reemplazo para SQLite y Core Data.

  • Retrofit de un cliente HTTP seguro para el tipo para Android y Java de Square, Inc. Debe aprender a-smart-way-to-use-retrofit

Y su lógica de sincronización para la base de datos como: ¿Cómo sincronizar la base de datos SQLite en un teléfono Android con la base de datos MySQL en el servidor?

La mejor suerte para todos los nuevos aprendices. :)


Una forma de lograr esto es tener una aplicación del lado del servidor que espere los datos. Los datos pueden enviarse utilizando objetos HttpRequest en Java o puede escribir su propia utilidad de transferencia de datos TCP/IP . Los datos pueden enviarse utilizando el formato JSON o cualquier otro formato que considere adecuado. También se pueden cifrar los datos antes de enviarlos al servidor si contiene información confidencial. Todo lo que tiene que hacer la aplicación del servidor es esperar a que HttpRequests analice los datos y los almacene en cualquier lugar que desee.


Yo sugeriría usar un protocolo de servicio web binario similar a Hessian . Funciona muy bien y tienen una implementación de Android. Puede que sea un poco pesado, pero depende de la aplicación que estés creando. Espero que esto ayude.