Xamarin.Android uygulamanıza çevrimdışı veri eşitleme ekleme

Bu öğretici, Xamarin.Android hızlı başlangıç uygulaması için Azure Mobile Apps'in çevrimdışı eşitleme özelliğini kapsar. Çevrimdışı eşitleme, ağ bağlantısı olmadığında bile son kullanıcıların bir mobil uygulamayla (verileri görüntüleme, ekleme veya değiştirme) etkileşim kurmasına olanak tanır. Değişiklikler yerel veritabanında depolanır. Cihaz yeniden çevrimiçi olduktan sonra bu değişiklikler uzak arka uçla eşitlenir.

Bu öğreticiye başlamadan önce, uygun bir arka uç hizmeti oluşturmayı içeren Xamarin.Android Hızlı Başlangıç Öğreticisi'ni tamamlamış olmanız gerekir. Ayrıca uygulamanıza kimlik doğrulaması eklediğinizi de varsayıyoruz. Ancak bu isteğe bağlıdır.

Uygulamayı çevrimdışı eşitlemeyi destekleyecek şekilde güncelleştirme

Çevrimiçi işlemde, için okuma ve yazma IRemoteTable<T>işlemleri gerçekleştirmeniz gerekir. Çevrimdışı eşitlemeyi kullanırken, bunun yerine okuma ve yazma IOfflineTable<T> işlemi yapılır. IOfflineTable, bir cihaz içi SQLite veritabanı tarafından yedeklenir ve arka uç veritabanıyla eşitlenir.

Visual Studio'da:

  1. Çözüme TodoApp sağ tıklayın, ardından Çözüm için NuGet Paketlerini Yönet... seçeneğini belirleyin.

  2. Yeni sekmede Gözat'ı seçin ve arama kutusuna Microsoft.Datasync.Client yazın.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Microsoft.Datasync.Client.SQLiteStore Paketi seçin.

  4. Sağ bölmede tüm istemci projelerini (proje hariç) TodoAppService.NET6 seçin.

  5. Yükle'yi seçin.

  6. İstendiğinde lisans sözleşmesini kabul edin.

Uzak hizmet istemcisini güncelleştirme

TodoApp.Data Projeyi açın ve sınıfını RemoteTodoService.cs (dizinin içindeServices) bulun. sınıfını aşağıdaki gibi güncelleştirin:

  1. Dosyanın en üstüne aşağıdaki using deyimi ekleyin:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. tanımını _table olarak IOfflineTable<TodoItem>değiştirin:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Çevrimdışı veritabanı konumunu depolamak için yeni bir özellik ekleyin:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. InitializeAsync Çevrimdışı veritabanını tanımlamak için yöntemini güncelleştirin:

    // 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. çevrimdışı eşitleme yapmak için güncelleştirme RefreshItemsAsync() :

    /// <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;
    }
    

Çevrimdışı veritabanı konumunu ayarlama

Projede TodoApp.Android , dosyayı düzenleyin App.xaml.cs . tanımını RemoteTodoService aşağıdaki gibi değiştirin:

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

Kimlik doğrulama öğreticisini tamamlamadıysanız tanım aşağıdaki gibi görünmelidir:

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

Uygulamayı test etme

Uygulama, yenileme simgesine basılana kadar arka uçla eşitlenmez. Test etmek için:

  1. Azure portalını açın.

  2. Hızlı başlangıç için kaynakları içeren kaynak grubunu açın.

  3. quickstart Veritabanını seçin.

  4. Sorgu düzenleyicisini (önizleme) seçin.

  5. Veritabanı için ayarladığınız kimlik bilgilerini kullanarak SQL Server kimlik doğrulamasıyla oturum açın.

    • Gerekirse, IP adresiniz için erişime izin vermeniz istenir. İzin verilenler listesini güncelleştirmek için bağlantıyı seçin, ardından oturum açmayı yeniden denemek için Tamam'a basın.
  6. Sorgu düzenleyicisine girin SELECT * FROM [dbo].[TodoItems]. Daha sonra Çalıştır'ı seçin.

Geçerli TodoItems listesi görüntülenir.

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

Şimdi uygulamanız aracılığıyla bazı değişiklikler yapın. YENİLEME (henüz) TUŞUNA BASMAYıN.

Azure portalında SQL deyimini tekrarlayın ve veritabanındaki verilerde hiçbir değişiklik yapılmadığını doğrulayın.

Kuyruktaki verileri arka uç hizmetine göndermek için uygulamanızda Yenile simgesini seçin. Çıkış Hata Ayıklama penceresinde HTTP işlemlerinin gerçekleştiğini görürsünüz.

Azure portalında SQL deyimini tekrarlayın ve değişikliklerinizin uzak hizmete gönderildiğini doğrulayın.

Kaynakları temizleme

Başka bir hızlı başlangıç öğreticisi gerçekleştirmediğiniz sürece, arka uç hizmetiyle ilişkili kaynakları şimdi silebilirsiniz.

  1. Azure portalını açın.
  2. Hızlı başlangıç kaynaklarını tutan kaynak grubunu seçin.
  3. Kaynak grubunu sil'i seçin.
  4. Silme işlemini onaylamak için yönergeleri izleyin.

Azure CLI'yi de kullanabilirsiniz:

az group delete -g quickstart

Kaynakları dağıtmak için Azure Geliştirici CLI'sini azd down kullandıysanız, bunun yerine komutunu kullanabilirsiniz.

Silme işleminin tamamlanması birkaç dakika sürer.

Sonraki adımlar