Azure Mobile Apps Cordova 插件使用指南

Viewed 0

本指南介绍如何使用适用于 Azure Mobile Apps 的最新 Apache Cordova 插件执行常见任务。如果您不熟悉 Azure Mobile Apps,建议先完成 Azure Mobile Apps 快速入门,以建立后端、创建数据表并下载预构建的 Apache Cordova 项目。本指南重点介绍客户端 Apache Cordova 插件。

支持的平台

该 SDK 支持 Apache Cordova v6.0.0 及以上版本,适用于 iOS、Android 和 Windows 设备。具体平台支持如下:

  • Android API 19 及以上。
  • iOS 8.0 及以上版本。

警告:本文基于即将淘汰的 v4.2.0 库版本。该库不再更新,包括安全更新。建议考虑迁移到 .NET 客户端,如 .NET MAUI,以获得持续支持。

设置和先决条件

本指南假设您已使用数据表建立后端。示例使用快速入门中的 TodoItem 数据表。要将 Azure Mobile Apps 插件添加到您的项目,请使用以下命令:

cordova plugin add cordova-plugin-ms-azure-mobile-apps

有关创建第一个 Apache Cordova 应用程序的详细信息,请参阅其文档。

配置 Ionic v2 应用程序

要正确配置 Ionic v2 项目,首先创建基本应用程序并添加 Cordova 插件:

ionic start projectName --v2
cd projectName
ionic plugin add cordova-plugin-ms-azure-mobile-apps

将以下行添加到 app.component.ts,以创建客户端对象:

declare var WindowsAzure: any;
var client = new WindowsAzure.MobileServiceClient("https://yoursite.azurewebsites.net");

现在可以在浏览器中构建并运行项目:

ionic platform add browser
ionic run browser

Azure Mobile Apps Cordova 插件同时支持 Ionic v1 和 v2 应用程序。只有 Ionic v2 应用程序需要额外声明 WindowsAzure 对象。

创建客户端连接

创建 WindowsAzure.MobileServiceClient 对象以建立客户端连接。将 appUrl 替换为移动应用的 URL。

var client = WindowsAzure.MobileServiceClient(appUrl);

使用数据表

要访问或更新数据,请创建后端数据表的引用。将 tableName 替换为数据表的名称。

var table = client.getTable(tableName);

一旦有了数据表引用,就可以进一步处理数据表,包括查询、插入、修改和删除数据。

查询数据表引用

有了数据表引用后,可以使用它来查询服务器上的数据。查询使用类似 LINQ 的语言。要返回表中的所有数据,请使用以下代码:

/**
 * 处理通过调用 table.read() 接收到的结果
 *
 * @param {Object} results 作为伪数组的结果
 * @param {int} results.length 结果数组的长度
 * @param {Object} results[] 单个结果
 */
function success(results) {
   var numItemsRead = results.length;
   for (var i = 0 ; i < results.length ; i++) {
       var row = results[i];
       // 每行是一个对象 - 属性是列
   }
}

function failure(error) {
    throw new Error('加载数据时出错: ', error);
}

table.read().then(success, failure);

成功函数会使用结果调用。不要在成功函数中使用 for (var i in results),因为这会遍历结果中包含的其他信息,当使用其他查询函数如 .includeTotalCount() 时。有关查询语法的详细信息,请参阅 Query 对象文档

在服务器上筛选数据

可以在数据表引用上使用 where 子句进行筛选:

table.where({ userId: user.userId, complete: false }).read().then(success, failure);

也可以使用筛选对象的函数,其中 this 变量被分配给正在筛选的当前对象。以下代码的功能与前面的示例相同:

function filterByUserId(currentUserId) {
    return this.userId === currentUserId && this.complete === false;
}

table.where(filterByUserId, user.userId).read().then(success, failure);

分页数据

使用 take()skip() 方法实现分页。例如,如果要将表分割成 100 条记录:

var totalCount = 0, pages = 0;
// 步骤 1 - 获取总记录数
table.includeTotalCount().take(0).read(function (results) {
    totalCount = results.totalCount;
    pages = Math.floor(totalCount/100) + 1;
    loadPage(0);
}, failure);

function loadPage(pageNum) {
    let skip = pageNum * 100;
    table.skip(skip).take(100).read(function (results) {
        for (var i = 0 ; i < results.length ; i++) {
            var row = results[i];
            // 处理每一行
        }
    });
}

.includeTotalCount() 方法用于将 totalCount 字段添加到结果对象,该字段填充了如果不使用分页将返回的记录总数。然后,可以使用 pages 变量和一些 UI 按钮提供页面列表,并通过 loadPage() 加载每个页面的新记录。建议实现缓存以加速访问已加载的记录。

返回排序后的数据

使用 .orderBy().orderByDescending() 查询方法进行排序:

table.orderBy('name').read().then(success, failure);

插入数据

创建 JavaScript 对象并异步调用 table.insert() 来插入数据:

var newItem = {
    name: 'My Name',
    signupDate: new Date()
};

table.insert(newItem).done(function (insertedItem) {
    var id = insertedItem.id;
}, failure);

成功插入后,会返回插入的项目,其中包含同步操作所需的额外字段。使用此信息更新缓存以供后续更新。Azure Mobile Apps Node.js Server SDK 支持动态架构以供开发,允许在插入或更新操作中指定列,但建议在将应用程序移至生产环境之前关闭动态架构。

修改数据

创建 Update 对象并调用 .update() 来修改数据,update 对象必须包含要更新的记录标识符:

var updateItem = {
    id: '7163bc7a-70b2-4dde-98e9-8818969611bd',
    name: 'My New Name'
};

table.update(updateItem).done(function (updatedItem) {
    // 现在可以更新缓存的副本
}, failure);

删除数据

调用 .del() 方法并传递记录标识符来删除数据:

table.del({ id: '7163bc7a-70b2-4dde-98e9-8818969611bd' }).done(function () {
    // 记录现已删除 - 更新缓存
}, failure);

验证用户

Azure App Service 支持使用外部身份提供者(如 Facebook、Google、Microsoft 账户和 Twitter)来验证和授权用户。可以配置表的权限以限制访问,或在服务器脚本中使用已验证用户的身份实现授权规则。有关详细信息,请参阅 验证教程。在 Apache Cordova 应用程序中使用验证时,必须安装以下 Cordova 插件:

注意:iOS 和 Android 中最近的安全变更可能使服务器流程验证无法使用,此时必须使用客户端流程。支持两种验证流程:服务器流程和客户端流程。服务器流程依赖提供者的 Web 验证界面,提供简单体验;客户端流程允许更深入地集成设备特定功能(如单点登录),依赖提供者特定的 SDK。

向提供者进行验证(服务器流程)

要让 Mobile Apps 管理验证过程,需向身份提供者注册应用程序并在 Azure App Service 中配置应用程序标识符和秘密。注册后,使用提供者的名称调用 .login() 方法,例如使用 Facebook 登录:

client.login("facebook").done(function (results) {
     alert("You are now signed in as: " + results.userId);
}, function (err) {
     alert("Error: " + err);
});

有效提供者值为 'aad'、'facebook'、'google'、'microsoftaccount' 和 'twitter'。注意:某些提供者可能无法使用服务器流程,需改用客户端流程。服务器流程中,Azure App Service 管理 OAuth 2.0 流程,显示登录页面并生成验证令牌;登录函数返回包含 userId 和 authenticationToken 的 JSON 对象,令牌可缓存至到期。

向提供者进行验证(客户端流程)

应用程序可独立联系身份提供者,然后将令牌提供给 App Service 进行验证,以实现单点登录或检索额外用户数据。示例使用 Facebook 客户端 SDK:

client.login("facebook", {"access_token": token}).done(function (results) {
     alert("You are now signed in as: " + results.userId);
}, function (err) {
     alert("Error: " + err);
});

假设令牌存储在变量中,具体格式因提供者而异,请参阅 Azure App Service 验证文档 了解详细信息。

获取已验证用户的相关信息

通过 HTTP 调用 /.auth/me 端点可检索验证信息,需设置 X-ZUMO-AUTH 标头为验证令牌(存储在 client.currentUser.mobileServiceAuthenticationToken 中)。使用 Fetch API 的示例:

var url = client.applicationUrl + '/.auth/me';
var headers = new Headers();
headers.append('X-ZUMO-AUTH', client.currentUser.mobileServiceAuthenticationToken);
fetch(url, { headers: headers })
    .then(function (data) {
        return data.json();
    }).then(function (user) {
        // user 对象包含已验证用户的声明
    });

Fetch 可从 npm 包CDNJS 获取,数据以 JSON 对象形式返回。

为外部重定向 URL 配置您的移动 App Service

Apache Cordova 应用程序常使用回环地址处理 OAuth UI 流程(如 Ripple 模拟器、Ionic 实时重载、本地运行后端等),但验证服务默认不知如何处理 localhost。需配置 allowedExternalRedirectUrls 以添加回环 URL。

  1. 登录 Azure 门户
  2. 选择 所有资源应用服务,点击移动应用程序名称。
  3. 点击 工具
  4. 观察 菜单中点击 资源管理器,然后点击 Go 打开新窗口。
  5. 展开左侧导航中 配置authsettings 站点的验证设置。
  6. 点击 编辑
  7. 找到 "allowedExternalRedirectUrls" 元素,将其值更改为包含服务 URL 的数组,例如:
"allowedExternalRedirectUrls": [
       "http://localhost:3000",
       "https://localhost:3000"
]

替换 URL 为您的实际服务地址(如 Node.js 服务的 http://localhost:3000 或 Ripple 服务的 http://localhost:4400)。
8. 点击 读/写 按钮,然后点击绿色 PUT 按钮保存设置。

同时,将这些回环 URL 添加到 App Service 的 CORS 设置:

  1. 在 Azure 门户中,选择移动应用程序。
  2. 打开 设置 边栏,或点击 所有设置
  3. API 菜单下点击 CORS
  4. 输入 URL 并按 Enter,视需添加更多。
  5. 点击 保存

新设置需约 10-15 秒生效。

0 Answers