web-dev-qa-db-fra.com

Comment synchroniser Android Base de données avec un serveur SQL en ligne?

Je développe une Android App qui stocke différents types de données dans le SQLite intégré fourni par la plate-forme Android.

À l'intérieur de l'application, j'ai placé un bouton "Sync" qui est censé synchroniser les données entre la base de données SQLite locale, avec une base de données SQL Server en ligne sur mon serveur.

Quelle est la solution de contournement pour gérer cela? Cette fonctionnalité se trouve dans Google Agenda, où vous pouvez afficher les événements du calendrier sur votre mobile, et lorsque vous ajoutez un nouvel événement et synchronisez les données, vous pouvez également consulter les données mises à jour en accédant à votre compte en ligne.

Remarque: je ne veux pas centraliser ma base de données en ligne, car je veux également donner aux utilisateurs mobiles la possibilité d'utiliser l'application sans connexion Internet.

54
Wassim Taher

Vous devriez jeter un œil au projet SampleSyncAdapter dans les Android SDK ( Transfert de données à l'aide d'adaptateurs de synchronisation ). Il vous montre comment effectuer la synchronisation "style Android", qui ne nécessite aucune interaction de l'utilisateur en appuyant manuellement sur un bouton de synchronisation tout le temps.

En plus de cela, vous devez écrire un logiciel serveur capable de fournir à votre SyncAdapter un "delta" de toutes les modifications depuis le dernier commit. L'approche la plus élémentaire consiste à conserver un horodatage "dernière synchronisation" dans votre application qui doit provenir du serveur, sinon vous pourriez avoir des problèmes en raison des différences de temps entre le client et le serveur. Normalisez tous les horodatages comme GMT ou n'importe quel fuseau horaire de votre choix, mais respectez cette décision. Si votre application doit afficher un horodatage à l'heure locale, vous devez utiliser la classe Java Calendar et TimeZone pour convertir l'horodatage normalisé en heure locale).

Votre application doit également marquer les enregistrements locaux modifiés comme étant "sales", de sorte que votre SyncAdapter sait qu'il doit télécharger ces enregistrements modifiés ou nouveaux sur le serveur.

Les fonctionnalités minimales suivantes sont nécessaires pour votre logiciel serveur:

  • Fonction de mise à jour des enregistrements existants
  • Ajouter une nouvelle fonction d'enregistrement
  • Obtenez des enregistrements mis à jour depuis la dernière synchronisation (l'application fournit un horodatage)
  • Obtenez de nouveaux enregistrements depuis la dernière synchronisation (l'application fournit l'horodatage)

Vous pouvez également vouloir lire certaines API Google (comme Google Calendar) pour avoir une idée de la façon dont tout cela fonctionne et comment concevoir l'interface API du serveur pour la communication.

66
tiguchi