Aracılığıyla paylaş


Xamarin.Forms mobil uygulamanız için çevrimdışı eşitlemeyi etkinleştirme

Genel Bakış

Bu öğretici, Xamarin.Forms için Azure Mobile Apps çevrimdışı eşitleme özelliğini sunar. Çevrimdışı eşitleme, ağ bağlantısı yoksa bile son kullanıcıların verileri görüntüleme, ekleme veya değiştirme gibi bir mobil uygulamayla etkileşim kurmasını sağlar. Değişiklikler yerel bir veritabanında depolanır. Cihaz yeniden çevrimiçi olduktan sonra bu değişiklikler uzak hizmetle eşitler.

Bu öğretici, [Xamarin iOS uygulaması oluşturma] Mobile Apps oluşturmak için Xamarin.Forms hızlı başlangıç çözümünü temel alan bir öğreticidir. Xamarin.Forms için hızlı başlangıç çözümü, yalnızca etkinleştirilmesi gereken çevrimdışı eşitlemeyi destekleyecek kodu içerir. Bu öğreticide, Azure Mobile Apps'ın çevrimdışı özelliklerini açmak için hızlı başlangıç çözümünü Mobile Apps. Ayrıca uygulamada çevrimdışına özgü kodu da vurgularız. İndirilen hızlı başlangıç çözümünü kullanasanız, projenize veri erişimi uzantısı paketlerini eklemeniz gerekir. Sunucu uzantısı paketleri hakkında daha fazla bilgi için bkz . Azure hizmetleri için .NET arka uç sunucu SDK'sı ile Mobile Apps.

Çevrimdışı eşitleme özelliği hakkında daha fazla bilgi edinmek için Azure Data Sync çevrimdışı Mobile Apps.

Hızlı başlangıç çözümünde çevrimdışı eşitleme işlevini etkinleştirme

Çevrimdışı eşitleme kodu, C# ön işlemci yönergeleri kullanılarak projeye dahil edilir. Uygulama OFFLINE_SYNC_ENABLED tanımlandığı zaman, bu kod yolları derlemeye dahil edilir. Daha Windows için SQLite platformunu da yüklemeniz gerekir.

  1. > Visual Studio Çözüm için NuGet Paketlerini Yönet... çözümüne sağ tıklayın, ardından çözümde yer alan tüm projeler için Microsoft.Azure.Mobile.Client.SQLiteStore NuGet paketini arayın ve yükleyin.

  2. Aşağıdaki Çözüm Gezgini, Taşınabilir Sınıf Kitaplığı projesi olan Taşınabilir adıyla projeden TodoItemManager.cs dosyasını açın ve ardından aşağıdaki ön işlemci yönergesini açıklamayın:

     #define OFFLINE_SYNC_ENABLED
    
  3. (İsteğe bağlı) Diğer Windows desteklemek için aşağıdaki SQLite çalışma zamanı paketlerinden birini yükleyin:

  4. (İsteğe bağlı) Her bir Windows projesinde Başvurular > Başvuru Ekle... 'ye sağ tıklayın ve Windowsklasörünü> genişletin. Windows SDK için Visual C++ 2013 Çalışma Zamanı ile birlikte Windows SDK için uygun SQLite'Windows etkinleştirin. SQLite SDK'sı adları her platforma göre Windows farklılık gösterir.

İstemci eşitleme kodunu gözden geçirme

Yönergelerin içindeki öğretici koduna zaten dahil olanlara ilişkin kısa bir genel bakış burada #if OFFLINE_SYNC_ENABLED verilmiştir. Çevrimdışı eşitleme işlevi Taşınabilir Sınıf Kitaplığı projesinde TodoItemManager.cs proje dosyasındadır. Özelle ilgili kavramsal bir genel bakış için bkz. Azure Data Sync çevrimdışı Mobile Apps.

  • Herhangi bir tablo işlemlerinin gerçekleştirilemeden önce yerel depo başlatılmış olması gerekir. Yerel depo veritabanı, aşağıdaki kod kullanılarak TodoItemManager sınıf oluşturucusnda başlatılır:

      var store = new MobileServiceSQLiteStore(OfflineDbPath);
      store.DefineTable<TodoItem>();
    
      //Initializes the SyncContext using the default IMobileServiceSyncHandler.
      this.client.SyncContext.InitializeAsync(store);
    
      this.todoTable = client.GetSyncTable<TodoItem>();
    

    Bu kod, MobileServiceSQLiteStore sınıfını kullanarak yeni bir yerel SQLite veritabanı oluşturur.

    DefineTable yöntemi, yerel depoda sağlanan türe sahip alanlarla eşleşen bir tablo oluşturur. Türün uzak veritabanındaki tüm sütunları içermesi zorunda değil. Sütunların bir alt kümesini depolamak mümkündür.

  • TodoItemManager'daki todoTable alanı , IMobileServiceTable yerine bir IMobileServiceSyncTablet t'dır. Bu sınıf tüm oluşturma, okuma, güncelleştirme ve silme (CRUD) tablo işlemleri için yerel veritabanını kullanır. Bu değişikliklerin IMobileServiceSyncContext üzerinde PushAsync çağrılarak Mobil Uygulama arka ucuna ne zaman gönderilir olduğuna siz karar verirsiniz. Eşitleme bağlamı, PushAsync çağrıldıken bir istemci uygulamasının değiştir olduğu tüm tablolarda değişiklikleri takip etmek ve iterek tablo ilişkilerinin korunmasına yardımcı olur.

    Aşağıdaki SyncAsync yöntemi, Mobil Uygulama arka ucuyla eşitlemek için çağrılır:

      public async Task SyncAsync()
      {
          ReadOnlyCollection<MobileServiceTableOperationError> syncErrors = null;
    
          try
          {
              await this.client.SyncContext.PushAsync();
    
              await this.todoTable.PullAsync(
                  "allTodoItems",
                  this.todoTable.CreateQuery());
          }
          catch (MobileServicePushFailedException exc)
          {
              if (exc.PushResult != null)
              {
                  syncErrors = exc.PushResult.Errors;
              }
          }
    
          // Simple error/conflict handling.
          if (syncErrors != null)
          {
              foreach (var error in syncErrors)
              {
                  if (error.OperationKind == MobileServiceTableOperationKind.Update && error.Result != null)
                  {
                      //Update failed, reverting to server's copy.
                      await error.CancelAndUpdateItemAsync(error.Result);
                  }
                  else
                  {
                      // Discard local change.
                      await error.CancelAndDiscardItemAsync();
                  }
    
                  Debug.WriteLine(@"Error executing sync operation. Item: {0} ({1}). Operation discarded.",
                      error.TableName, error.Item["id"]);
              }
          }
      }
    

    Bu örnek, varsayılan eşitleme işleyicisi ile basit hata işleme kullanır. Gerçek bir uygulama, özel bir IMobileServiceSyncHandler uygulaması kullanarak ağ koşulları ve sunucu çakışmaları gibi çeşitli hataları işler.

Çevrimdışı eşitlemede dikkat edilmesi gerekenler

Örnekte, SyncAsync yöntemi yalnızca başlatma ve eşitleme isten olduğunda çağrılır. Bir Android veya iOS uygulamasında eşitleme başlatmak için öğe listesini aşağı çekin; Windows için Eşitle düğmesini kullanın. Gerçek bir uygulamada, ağ durumu değişirken eşitleme tetikleyicisi de yapabilirsiniz.

Bağlam tarafından takip edilen bekleyen yerel güncelleştirmeleri olan bir tabloda çekme işlemi yürütülürken, bu çekme işlemi otomatik olarak önceki bağlam anından yürütmeyi tetikler. Bu örnekteki öğeleri yeniler, ekler ve tamamlarken, açık PushAsync çağrısını atabilirsiniz .

Sağlanan kodda, uzak TodoItem tablosunda yer alan tüm kayıtlar sorgulansa da , PushAsync'e bir sorgu kimliği ve sorgu geçerek kayıtları filtrelemek de mümkündür. Daha fazla bilgi için Azure Mobile Apps'de Çevrimdışı Data Sync Artımlı Eşitleme bölümüne Mobile Apps.

İstemci uygulamasını çalıştırma

Çevrimdışı eşitleme etkinleştirildiğinde, yerel depo veritabanını doldurmak için istemci uygulamasını her platformda en az bir kez çalıştırın. Daha sonra, çevrimdışı bir senaryonun benzetimini yapmak ve uygulama çevrimdışıyken yerel depoda verileri değiştirmek.

İstemci uygulamasının eşitleme davranışını güncelleştirme

Bu bölümde, arka ucun geçersiz uygulama URL'sini kullanarak çevrimdışı bir senaryonun benzetimini yapmak için istemci projesini değiştirebilirsiniz. Alternatif olarak, cihazınızı "Uçak moduna" hareket ettirerek ağ bağlantılarını kapatabilirsiniz. Veri öğeleri ekler veya değiştirirken, bu değişiklikler yerel depoda tutulabilir, ancak bağlantı yeniden kurulana kadar arka uç veri deposuyla eşitlanmaz.

  1. Bu Çözüm Gezgini Taşınabilir projeden Constants.cs ApplicationURL proje dosyasını açın ve değerini geçersiz bir URL'ye işaret etmek için değerini değiştirme:

     public static string ApplicationURL = @"https://your-service.azurewebsites.net/";
    
  2. Taşınabilir projeden TodoItemManager.cs dosyasını açın, sonra try... SyncAsync'te catch bloğu. Bu catch bloğu, özel durum iletiyi aşağıdaki gibi konsola yazar:

         catch (Exception ex)
         {
             Console.Error.WriteLine(@"Exception: {0}", ex.Message);
         }
    
  3. İstemci uygulamasını derleme ve çalıştırma. Bazı yeni öğeler ekleyin. Arka uç ile eşitlemeye yapılan her deneme için konsolda bir özel durum günlüğe kaydedilir. Bu yeni öğeler, mobil arka uça ertelenene kadar yalnızca yerel depoda yer alan öğelerdir. İstemci uygulaması arka sona bağlı gibi davranır ve tüm oluşturma, okuma, güncelleştirme, silme (CRUD) işlemlerini destekler.

  4. Oluşturduğunuz yeni öğelerin yerel depoda kalıcı olduğunu doğrulamak için uygulamayı kapatın ve yeniden başlatın.

  5. (İsteğe bağlı) Arka Visual Studio verilerin değişmediğini Azure SQL Veritabanı için Azure SQL Veritabanı tabloyu görüntülemek için Visual Studio'i kullanın.

    Bu Visual Studio' Sunucu Gezgini. Azure-SQL>Veritabanları'SQL gidin. Veritabanınıza sağ tıklayın ve Dosyalarda aç'ı SQL Server Nesne Gezgini. Artık veritabanı tablo ve SQL göz atabilirsiniz.

Mobil arka ucu yeniden bağlanmak için istemci uygulamasını güncelleştirme

Bu bölümde, uygulamayı mobil arka end'e yeniden bağlayın. Bu, uygulamanın çevrimiçi bir durumuna geri dönme benzetimini sağlar. Yenileme hareketi gerçekleştir ettiğinizde veriler mobil arka ucuyla eşitlenir.

  1. Constants.cs'yi yeniden açın. applicationURL doğru URL'yi işaret etmek için düzeltin.

  2. İstemci uygulamasını yeniden oluşturma ve çalıştırma. Uygulama, başlattıktan sonra mobil uygulama arka ucuyla eşitlemeye çalışır. Hata ayıklama konsolunda hiçbir özel durum günlüğe kaydedilmez.

  3. (İsteğe bağlı) Fiddler veya Postman SQL Server Nesne Gezgini bir REST aracını kullanarak güncelleştirilmiş verileri görüntüleme. Verilerin arka uç veritabanı ve yerel depo arasında eşitlenmiş olduğunu fark edin.

    Verilerin veritabanı ile yerel depo arasında eşitlenmiş olduğunu ve uygulama bağlantısının kesildiğinde eklenen öğeleri içerdiğine dikkat edin.

Ek Kaynaklar