65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Azure Mobile Service 在 Xamarin Forms 中进行离线数据同步

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (5投票s)

2016 年 7 月 18 日

CPOL

7分钟阅读

viewsIcon

22397

使用 Azure 移动服务在 Xamarin Forms 中进行离线数据同步。

引言

在 Xamarin 跨平台移动开发中使用 Azure 移动服务进行离线数据同步。在移动设备没有连接的情况下存储数据。此代码将在 Andriod 和 IOS 平台上运行,因为这是 Xamarin 跨平台代码。

背景

在日常生活中,我们并非随时都有连接,或者可以说连接会中断,因此我们需要一个也能离线工作的应用程序。你可以以 WhatsApp 为例。

使用代码

在 Azure Mobile App 中创建项目的步骤

  1. 转到链接 https://portal.azure.com/ 并使用您的账户凭据登录。
  2. 点击新建 -> Web+移动 -> 移动应用 -> 填写应用名称 -> 选择资源组(有两个选项:1. 创建新资源组,2. 使用现有资源组)选择其中任何一个选项 -> 点击“固定到仪表板”复选框(可选)-> 点击创建,如下图所示。
  3. 然后进入主窗口选项,选择“应用服务”-> 在那里选择您的应用程序 -> 在搜索框中输入“快速入门” -> 将会提供我们需要创建项目的平台选项(这里我选择 xamarin.forms 选项),如下图所示。
  4. 每个平台将为您提供 3 个选项
    • 创建数据库。
      1. 现在选择第一个选项“创建数据库” -> 点击“+”以创建新数据库。
      2. 点击添加按钮后,您将看到“添加数据连接”窗口 -> 在“类型”中选择:“SQL 数据库” -> 然后转到“配置必需设置”-> 一个新窗口将在此处打开 -> 选择“创建新数据库”(或者您可以使用任何现有的数据库)-> 将会有一个“新数据库”窗口,如下图所示。
      3. 现在为您的数据库命名 -> 存在“定价层”选项 -> 为 POC 选择“免费试用”(否则您也可以选择其他付费版本选项)。如下图所示。
      4. 现在转到下一个选项“服务器”(配置必需设置)-> 填写所有与服务器相关的详细信息(****但必须记住服务器管理员登录名和密码……您将在下一步中使用它****)。并根据您的要求选择位置。(我选择了“东南亚”,它离我比较近,创建时间会更短)。

        然后点击确定,您的数据连接将开始创建(这需要一些时间,取决于您的位置选择或网络)。这样您就完成了第一个选项“创建数据库”。现在让我们继续下一步“创建表 API”。

    • 创建表 API。

      转到此选项,选择“C#”选项 -> 点击下载按钮 -> 它将为您下载 API 的“运行时项目”。

    • 创建您的客户端应用程序。

      在此选项中,点击下载按钮,客户端项目将下载。

  5. 您将在下载文件夹中获得以下两个 zip 文件。

    将这些文件复制并粘贴到您想要的任何位置,然后解压它们,并独立运行它们。

  6. 然后再次转到门户 -> SQL 数据库 -> 显示数据库连接字符串 -> 选择 ADO.NET(SQL)。
  7. 将连接字符串复制到记事本,然后将用户名和密码替换为您在 (a.4) 步骤中给出的服务器管理员登录名和密码。
  8. 现在将此更改后的字符串复制并粘贴到“web.config”文件(在运行时项目的解决方案中)中的连接字符串。
  9. 现在右键单击 API 运行时项目解决方案 -> 选择发布选项。
  10. 将弹出一个窗口。转到配置文件 -> 点击快照中显示的第一个选项。在现有项目中,您将找到您创建的项目 -> 选择该项目。

    然后将打开连接窗口。填写所有详细信息,如下所示。

    然后转到设置。

    最后点击发布。它将发布您的应用程序,您将获得如下所示的项目路径。

  11. 但在我的例子中,我的项目文件夹不在现有项目下方。所以我通过另一种方法进行了发布。让我们一步一步来看。
    1. 转到门户 -> 应用服务 -> 选择您的应用 -> 点击获取发布,如下所示。
    2. 现在您将在下载文件夹中获得一个如下所示的文档。
  12. 转到 API 项目 -> 右键单击项目 -> 选择发布 -> 选择导入选项 -> 点击浏览选项 -> 并选择该下载文件。
    1. 点击确定 -> 点击下一步 -> 它将转到连接窗口。
    2. 点击验证连接。它将切换到设置页面。

      选择您的数据库,然后点击下一步。

    3. 它将转到预览。然后点击发布。它将发布您的应用程序,如下所示。
  13. 要查看数据库是否已创建,请转到 Google -> Postman Chrome(搜索)-> 点击第一个链接并使用您的现有电子邮件 ID 登录,现在您可以使用 Postman(通过点击启动应用程序)来查看数据库相关内容,如下所示。
    1. 然后您将看到如下所示的窗口。
    2. 此窗口上的 URL 是我们个人复制的 URL(我们发布应用程序后获得的)。现在转到 API(运行中的项目)-> 控制器类 -> 从“Get”方法中选择任何一个,并将其粘贴到上述 URL 之后,然后点击“保存”。它将生成以下代码(第二个快照),即它将创建代码中默认存在的 2 条记录。(您可以从控制器中为每个方法进行检查)。
  14. 有时点击保存按钮可能会出现错误,所以复制“ZUMO-API-VERSION”名称和版本“2.0.0”,然后将其粘贴到 Postman 中的标头中,如下所示。
  15. 现在转到我们下载的第二个项目(Xamarin Forms)。转到“Constant.cs”并复制您在发布 ap 后获得的 URL,如下所示。
  16. 现在将 Android 设置为启动项目 -> 运行它 -> 您将默认看到两条记录。您也可以在数据库中查看它们,也可以添加您自己的记录。
  17. 现在要查看所有添加的记录,请转到 SQL Server,将弹出一个窗口。现在将 API 项目的 web.config 文件中的服务器名称、用户 ID 和密码复制到此窗口,如下所示。然后点击连接。
  18. 但这会引发错误弹出窗口,要解决此问题,请转到主门户页面,转到应用服务 -> 选择您的数据库 -> 选择设置服务器防火墙(我们用它来保护我们的项目不被任何人访问)-> 将错误弹出窗口中获得的 IP 地址放入“起始 IP”和“结束 IP”中。点击保存,然后继续执行上面的 SQL Server 窗口并点击连接。
  19. 现在它将生成您的数据库以及您的表,如下所示。

    现在选择新查询选项,然后执行如下的 SELECT 查询。

    SELECT * FROM [dbo].[TodoItems]

    您将获得上面快照中显示的所有添加的记录。

  20. 要离线工作,您需要在 Xamarin Forms 项目中进行更多一些调整。步骤如下。
    #define OFFLINE_SYNC_ENABLED
    await RefreshItems(true, syncItems: true);
    1. 在 Visual Studio 中,右键单击解决方案 > **为解决方案管理 NuGet 包...**,然后搜索并为解决方案中的所有项目安装 `Microsoft.Azure.Mobile.Client.SQLiteStore` NuGet 包。
    2. 在解决方案资源管理器中,打开名称中带有 **Portable** 的项目中的 _TodoItemManager.cs_ 文件,该项目是可移植类库项目,然后取消注释以下预处理器指令。
    3. 在解决方案资源管理器中,打开 **Portable** 项目中的 _TodoList.xaml.cs_ 文件,找到 _OnAppearing_ 方法,并确保在调用 _RefreshItems_ 时为 _syncItems_ 传递 `true`,如下所示。
    4. (可选)如果您支持 iOS 设备,请打开 **iOS** 项目中的 AppDelegate.cs 文件,并在 _FinishedLaunching_ 方法中取消注释以下行代码。
    5. 在第二点中,当您取消注释预处理器指令 #define 行时。它会取消注释预处理器指令 #define 代码中的所有代码。

    为了使离线工作正常进行,您需要在可移植类库项目中的 _TodoItemManager.cs_ 中注释掉两行。

在 SyncAsync 任务中

    //await error.CancelAndUpdateItemAsync(error.Result);

    //await error.CancelAndDiscardItemAsync();

您的应用程序已准备好进行离线同步。

关注点

我发现了 Xamarin 跨平台是如何工作的,即一次编写,并在 Android 和 iOS 平台上运行。

© . All rights reserved.