Ajouter la synchronisation des données hors connexion à votre application Xamarin.iOS

Ce tutoriel traite de la fonctionnalité de synchronisation hors connexion d’Azure Mobile Apps pour Xamarin.iOS. La synchronisation hors connexion permet aux utilisateurs finaux d’interagir avec une application mobile( affichage, ajout ou modification de données), même s’il n’existe aucune connexion réseau. Les modifications sont stockées dans une base de données locale. Une fois l'appareil de nouveau en ligne, ces modifications sont synchronisées avec le serveur principal distant.

Avant de commencer ce tutoriel, vous devez avoir suivi le Tutoriel de démarrage rapide de Xamarin.iOS, qui comprend la création d’un service back-end approprié.

Pour en savoir plus sur la fonctionnalité de synchronisation hors connexion, consultez la rubrique Synchronisation des données hors connexion dans Azure Mobile Apps.

Mettre à jour l’application pour prendre en charge la synchronisation hors connexion

Dans l’opération en ligne, vous lisez et vous écrivez dans une IRemoteTable<T>. Quand vous utilisez la synchronisation hors connexion, vous lisez et vous écrivez à la place dans une IOfflineTable<T>. La IOfflineTable s’appuie sur une base de données SQLite sur l’appareil et est synchronisée avec la base de données back-end.

Dans Visual Studio :

  1. Cliquez avec le bouton droit sur la TodoApp solution, puis sélectionnez Gérer les packages NuGet pour la solution....

  2. Dans le nouvel onglet, sélectionnez Parcourir, puis entrez Microsoft.Datasync.Client dans la zone de recherche.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Sélectionnez le package Microsoft.Datasync.Client.SQLiteStore.

  4. Dans le volet de droite, sélectionnez tous les projets clients (à l’exception du TodoAppService.NET6 projet).

  5. Sélectionnez Installer.

  6. Acceptez le contrat de licence lorsque vous y êtes invité.

Mettre à jour le client de service distant

Ouvrez le TodoApp.Data projet et recherchez la RemoteTodoService.cs classe (dans le Services répertoire). Mettez à jour la classe comme suit :

  1. Ajoutez l’instruction using suivante en haut du fichier :

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Modifiez la définition d’une _tableIOfflineTable<TodoItem>valeur :

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Ajoutez une nouvelle propriété pour stocker l’emplacement de la base de données hors connexion :

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Mettez à jour la InitializeAsync méthode pour définir la base de données hors connexion :

    // Create the offline store definition
    var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString();
    var store = new OfflineSQLiteStore(connectionString);
    store.DefineTable<TodoItem>();
    var options = new DatasyncClientOptions
    {
        OfflineStore = store,
        HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() }
    };
    
    // Create the datasync client.
    _client = TokenRequestor == null 
        ? new DatasyncClient(Constants.ServiceUri, options)
        : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options);
    
    // Initialize the database
    await _client.InitializeOfflineStoreAsync();
    
    // Get a reference to the offline table.
    _table = _client.GetOfflineTable<TodoItem>();
    
    // Set _initialized to true to prevent duplication of locking.
    _initialized = true;
    
  5. Mettez à jour la RefreshItemsAsync() synchronisation hors connexion :

    /// <summary>
    /// Refreshes the TodoItems list manually.
    /// </summary>
    /// <returns>A task that completes when the refresh is done.</returns>
    public async Task RefreshItemsAsync()
    {
        await InitializeAsync();
    
        // First, push all the items in the table.
        await _table.PushItemsAsync();
    
        // Then, pull all the items in the table.
        await _table.PullItemsAsync();
    
        return;
    }
    

Définir l’emplacement de la base de données hors connexion

Dans le TodoApp.iOS projet, modifiez le ViewControllers\HomeViewController.cs fichier. Modifiez la définition du RemoteTodoService constructeur comme suit :

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Si vous n’avez pas terminé le didacticiel d’authentification, la définition doit ressembler à ceci à la place :

TodoService = new RemoteTodoService()
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Test de l'application

L’application ne se synchronise pas avec le back-end tant que l’icône d’actualisation n’est pas enfoncée. Pour tester :

  1. Ouvrez le portail Azure.

  2. Ouvrez le groupe de ressources qui contient les ressources du guide de démarrage rapide.

  3. Sélectionnez la quickstart base de données.

  4. Sélectionnez l’éditeur de requête (préversion).

  5. Connectez-vous avec l’authentification SQL Server à l’aide des mêmes informations d’identification que celles que vous avez configurées pour la base de données.

    • Si nécessaire, vous êtes invité à autoriser l’accès à votre adresse IP. Sélectionnez le lien pour mettre à jour la liste verte, puis appuyez sur OK pour réessayer la connexion.
  6. Dans l’éditeur de requête, entrez SELECT * FROM [dbo].[TodoItems]. Puis sélectionnez Exécuter.

Une liste des TodoItems actuels s’affiche.

Screenshot of the results in the S Q L query editor.

À présent, apportez des modifications via votre application. NE PAS APPUYER SUR ACTUALISER (encore).

Répétez l’instruction SQL dans le Portail Azure et vérifiez qu’aucune modification n’a été apportée aux données de la base de données.

Sélectionnez l’icône Actualiser sur votre application pour envoyer (push) les données dans la file d’attente vers le service principal. Les transactions HTTP se produisent dans la fenêtre Débogage de sortie.

Répétez l’instruction SQL dans le Portail Azure et vérifiez que vos modifications ont été envoyées au service distant.

Nettoyer les ressources

Sauf si vous effectuez un autre didacticiel de démarrage rapide, vous pouvez supprimer les ressources associées au service principal maintenant.

  1. Ouvrez le portail Azure.
  2. Sélectionnez le groupe de ressources contenant les ressources de démarrage rapide.
  3. Sélectionnez Supprimer le groupe de ressources.
  4. Suivez les instructions pour confirmer la suppression.

Vous pouvez aussi utiliser l’interface Azure CLI :

az group delete -g quickstart

Si vous avez utilisé Azure Developer CLI pour déployer des ressources, vous pouvez utiliser la commande à la azd down place.

La suppression prend quelques minutes.

Étapes suivantes