將離線資料同步新增至 Xamarin.iOS 應用程式
注意
此產品已淘汰。 如需使用 .NET 8 或更新版本的專案取代專案,請參閱 Community Toolkit Datasync 連結庫。
本教學課程涵蓋適用於 Xamarin.iOS 的 Azure Mobile Apps 離機同步處理功能。 離線同步處理可讓使用者與行動應用程式互動—檢視、新增或修改數據,即使沒有網路連線也一起。 變更會儲存在本機資料庫中。 裝置重新上線后,這些變更會與遠端後端同步。
開始本教學課程之前,您應該已完成 Xamarin.iOS 快速入門教學課程,其中包括建立適當的後端服務。
若要深入瞭解離線同步功能,請參閱在 Azure Mobile Apps 中 離線數據同步主題。
更新應用程式以支援離線同步處理
在線上作業中,您會從 IRemoteTable<T>
讀取和寫入 。 使用離線同步處理時,您可以改為從 IOfflineTable<T>
讀取和寫入。
IOfflineTable
是由裝置上的 SQLite 資料庫所支援,並與後端資料庫同步處理。
在 Visual Studio 中:
以滑鼠右鍵按鍵按下
TodoApp
解決方案,然後選取 [[管理方案的 NuGet 套件...]。在新索引標籤中,選取 [流覽],然後在搜尋方塊中輸入 Microsoft.Datasync.Client。
選取
Microsoft.Datasync.Client.SQLiteStore
套件。在右側窗格中,選取所有客戶端專案(
TodoAppService.NET6
專案除外)。選擇 [[安裝]。
出現提示時,接受許可協定。
更新遠端服務用戶端
開啟 TodoApp.Data
專案,並找出 RemoteTodoService.cs
類別(在 Services
目錄中)。 更新類別,如下所示:
將下列
using
語句新增至檔案頂端:using Microsoft.Datasync.Client.SQLiteStore;
將
_table
的定義變更為IOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
新增屬性以儲存離線資料庫位置:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
更新
InitializeAsync
方法來定義離線資料庫:// 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;
更新
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; }
設定離線資料庫位置
在 TodoApp.iOS
專案中,編輯 ViewControllers\HomeViewController.cs
檔案。 變更建構函式中 RemoteTodoService
的定義,如下所示:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
如果您尚未完成 驗證教學課程,則定義看起來應該如下所示:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
測試應用程式
在按下重新整理圖示之前,應用程式不會與後端同步處理。 若要測試:
開啟 Azure 入口網站。
開啟包含快速入門資源的資源群組。
選取
quickstart
資料庫。選擇 查詢編輯器 (預覽)。
使用您為資料庫設定的相同認證登入 SQL Server 驗證。
- 如有必要,系統會提示您允許存取您的IP位址。 選取連結以更新allowlist,然後按 [確定] 重試登入。
在查詢編輯器中,輸入
SELECT * FROM [dbo].[TodoItems]
。 然後選取 [執行]。
將會顯示目前 TodoItems 的清單。
現在,透過您的應用程式進行一些變更。 不要按重新整理(尚未)。
在 Azure 入口網站中重複 SQL 語句,並確認尚未對資料庫中的數據進行任何變更。
選取應用程式上的 重新整理 圖示,以將佇列中的數據推送至後端服務。 您會看到 [輸出偵錯] 視窗中發生的 HTTP 交易。
在 Azure 入口網站中重複 SQL 語句,並確認您的變更已推送至遠端服務。
清除資源
除非您正在執行另一個快速入門教學課程,否則您現在可以刪除與後端服務相關聯的資源。
- 開啟 Azure 入口網站。
- 選取包含快速入門資源的資源群組。
- 選擇 [[刪除資源群組]。
- 請依照指示確認刪除。
您也可以使用 Azure CLI:
az group delete -g quickstart
如果您使用 Azure 開發人員 CLI 來部署資源,您可以改用 azd down
命令。
刪除需要幾分鐘的時間才能完成。
後續步驟
- 檢閱如何檔: