更新认证的nativescript-azure-mobile-apps
一个用于与 Azure 移动应用协同工作的 NativeScript 插件
npm i --save nativescript-azure-mobile-apps-with-updated-auth

Build Status npm downloads npm downloads npm

一个 NativeScript Azure Mobile Apps 插件。

安装

从项目的根目录运行以下命令

tns plugin add nativescript-azure-mobile-apps

此命令将自动安装必要的文件,并将 nativescript-azure-mobile-apps 作为依赖项存储在项目的 package.json 文件中。

配置

对于大多数功能,您只需知道 Azure 移动应用门户的名称即可。唯一需要额外配置的是 iOS 下的社交登录。请按照以下步骤操作 (以下内容)

从版本 2.0 开始,由于更新了库,Microsoft 现在要求 Android 的最小 SDK 为 19。因此,您需要调整您的应用程序中的 2 个文件

  1. app/App_Resources/Android/AndroidManifest.xml 中,您必须将 android:minSdkVersion 设置为 19 或更高。
  2. app/App_Resources/Android/app.gradle 中,您必须确保在您的 defaultConfig 中将 minSdkVersion 设置与在 AndroidManifest.xml 文件中设置的相同数字。假设您将其设置为 19,则您的文件应类似于以下内容
android {  
defaultConfig {
generatedDensities = []
applicationId = "......"
minSdkVersion 19
}
}

API

MobileServiceClient

静态方法

  • configureClientAuthAppDelegate(): void
    配置 iOS 认证代理。如果您将在 iOS 下使用社交登录,则需要在此应用程序启动之前调用此方法!

方法

  • 构造函数(string)
    使用给定的 Azure 门户 URL 初始化一个新的客户端。

  • getTable(string): MobileServiceTable
    获取具有给定名称的表的引用。

  • login(AuthenticationProvider, string?): Promise
    使用给定的提供者和 URL 方案执行社交登录。

  • loginFromCache(): boolean
    尝试从先前缓存的身份验证登录用户。如果成功,则返回 true

属性

  • user - MobileServiceUser
    返回当前社交登录的用户。

  • push - MobileServicePush 返回一个 MobileServicePush 对象,您可以使用它来处理推送通知。

MobileServicePush

方法

  • register(string): Promise
    将给定的本地推送令牌注册为 Azure 的推送通知。

  • registerWithTemplate(string, string, string): Promise
    将给定的本地推送令牌、模板名称和模板注册为 Azure 的推送通知。有关模板的更多信息,请参阅以下使用说明 (以下内容)

  • registerWithTags(string, string[]): Promise
    将给定的本地推送令牌注册为 Azure 的推送通知,并将给定的标签与设备安装关联。您可以在以下位置了解更多关于标签的信息 这里

  • registerWithTagsAndTemplate(string, string[], string, string): Promise
    此方法结合了上述两种方法,因此您可以同时使用模板和标签进行注册。

  • unregister(): Promise
    从Azure推送通知中注销设备。

属性

  • installationId - 字符串 返回与Azure通知中心注册的设备的installationId。这在需要自定义标签并需要调用后端以添加标签的情况下非常有用。

MobileServiceUser

静态方法

  • clearCachedAuthenticationInfo(): void
    清除之前缓存的认证信息。

  • getFromCache():MobileServiceUser
    返回之前缓存的用户。

方法

  • getProviderCredentials(): Promise
    返回关于当前用户的详细信息(例如姓氏、给定名称、用户ID、声明等)。

属性

  • userId - 字符串
    获取此用户的用户ID。

  • authenticationToken - 字符串
    获取此用户的OAuth令牌。

MobileServiceTable

方法

  • read(): Promise<Array>
    返回表中的所有记录。

  • insert(T): Promise
    将给定项目添加到表中。返回更新后的项目(例如分配了ID)。

  • update(T): Promise
    更新表中的给定项目。返回更新后的项目。

  • deleteById(number|string): Promise
    从表中删除具有给定ID的项目。

  • deleteItem(T): Promise
    从表中删除给定项目。

  • where(): MobileServiceQuery
    返回一个查询对象,您可以使用它来筛选、排序和分页表中的数据。

MobileServiceQuery

查询对象提供了非常易于使用的链式接口,用于筛选、排序和分页表中的数据。

方法

  • field(string): this
    指定我们将根据给定的字段进行筛选。之后,您可以使用筛选操作之一。

  • eq(string|number|boolean|Date): this
    通过之前指定的field筛选表,使其值等于给定的值。

  • ne(string|number|boolean|Date): this
    通过之前指定的field筛选表,使其值与给定的值不同。

  • gt(string|number||Date): this
    通过之前指定的field筛选表,使其值大于给定的值。

  • ge(string|number||Date): this
    通过之前指定的field筛选表,使其值大于或等于给定的值。

  • lt(string|number||Date): this
    通过之前指定的field筛选表,使其值小于给定的值。

  • le(string|number||Date): this
    通过之前指定的field筛选表,使其值小于或等于给定的值。

  • startsWith(string, string): this
    通过给定字段筛选表,使值以给定的值开头。

  • endsWith(string, string): this
    通过给定字段筛选表,使值以给定的值结尾。

  • and(): this
    在逻辑AND运算符之后应用,然后可以开始另一个筛选条件。

  • or(): this
    在逻辑OR运算符之后应用,然后可以开始另一个筛选条件。

  • orderBy(string, SortDir): this
    根据给定的字段和方向对结果集进行排序。应在指定过滤器之后应用此操作!

  • skip(number): this
    从当前结果集中跳过给定数量的记录。应在所有筛选和排序之后应用此操作!

  • top(number): this
    仅从结果集中获取给定数量的记录。应在所有筛选和排序之后应用此操作!

  • read(): Promise
    读取并返回当前筛选、排序和窗口结果集的记录。

用法

请注意,在Angular NativeScript应用程序中使用插件时没有区别,因此以下用法也适用于Angular应用程序。

创建客户端

import { MobileServiceClient } from "nativescript-azure-mobile-apps/client";
var client = new MobileServiceClient("https://<PORTAL_NAME>.azurewebsites.net");

获取对表的引用

var todoItemTable = client.getTable("TodoItem");

获取表格中所有项

todoItemTable.read<TodoItem>().then(function(results) {
// results is array of TodoItem-s
console.log(results.length);
console.log(results[0].id);
});

向表格中添加项

var item = new TodoItem();
item.text = "NativeScript Rocks!";
todoItemTable.insert(item).then(function(result) {
// result is the inserted item with the id changed
console.log(result.id);
});

更新项

item.text = "Changed Text";
todoItemTable.update(item).then(function(result) {
// result is the updated item
console.log(result);
});

删除项

todoItemTable.deleteItem(item).then(function() {
console.log("Deleted!");
});

按ID删除项

todoItemTable.deleteById("some id").then(function() {
console.log("Deleted!");
});

查询表格

todoItemTable.where().field("completed").eq(true).read().then(function(results) {
console.log("There are " + results.length.toString() + "completed items");
});

排序

import { SortDir } from "nativescript-azure-mobile-apps/query";
todoItemTable.where().field("completed").eq(true).orderBy("createdAt", SortDir.Desc).read().then(function(results) {
// ...
});

分页

import { SortDir } from "nativescript-azure-mobile-apps/query";
todoItemTable.where().field("completed").eq(true).orderBy("createdAt", SortDir.Asc).skip(2).top(3).read().then(function(results) {
// Skips 2 completed tasks and returns the next 3 ordered chronologically by creation.
});

用户认证(社交登录)

iOS登录要求

在版本1.0.0及以下中,iOS上的登录使用了内嵌浏览器。这将被禁止,因此我们需要切换到SafariViewController,它不是“内嵌”的。因此,我们需要能够在外部浏览器之间切换。主要好处是此浏览器可以利用已经由例如Facebook登录设置的cookie,因此用户不需要再次输入凭据。

这是一项工作,但这是一次性努力,应该需要大约5分钟来完成这些步骤

自定义URL方案

切换到外部浏览器没有问题,但切换回来需要您配置一个“自定义URL方案”。打开app/App_Resources/iOS/Info.plist并添加

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>my.bundle.id</string>
<key>CFBundleURLSchemes</key>
<array>
<string>x-msauth-tns-azure-sample</string>
</array>
</dict>
</array>

确保上面的自定义URL方案字符串x-msauth-tns-azure-sample在用户的设备上是唯一的,因此包含您的包标识符是一个好开始(用短横线替换点)。

此外,用您的包标识符替换my.bundle.id

添加允许的外部重定向URL

x-msauth-tns-azure-sample://easyauth.callback添加到这些截图中的Azure后端“允许的外部重定向URL”字段

确保用您自己的自定义URL方案替换x-msauth-tns-azure-sample

App Delegate连接

现在,虽然您的应用可以从外部调用,但它仍然不能切换到前台,除非您在App Delegate中连接一个方法。不要担心,此插件会为您处理,您唯一需要做的事情是在app.js / app.ts中在app.start()之前添加此行。

// add this
require("nativescript-azure-mobile-apps/client").MobileServiceClient.configureClientAuthAppDelegate();

// something like this is already there
application.start({ moduleName: "main-page" });
将URL方案传递给login

请注意,调用login有了一些变化;现在您需要向此函数传递第二个参数以使用新的登录机制。如果不这样做,将回退到已弃用的内嵌浏览器认证方法。确保用您在Info.plist中配置的方案替换x-msauth-tns-azure-sample。如果您只针对Android,可以省略它。

import { AuthenticationProvider } from "nativescript-azure-mobile-apps/user";
client.login(AuthenticationProvider.Google, "x-msauth-tns-azure-sample").then((user) => {
console.log(`Logged In! UserID:${user.userId}`);
}, (e) => {
console.log("Error Logging in!", e);
});

一旦认证,userId和token将被缓存,因此您可以通过简单地调用来登录

client.loginFromCache(); // Will return true if there are cached credentials and will setup the client accordingly

如果您想获取有关用户的更多信息(例如提供者令牌、名称、电子邮件、个人资料照片等),可以通过调用getProviderCredentials()来实现

client.user.getProviderCredentials().then((result) => {
console.log(`Surname: ${result.surname}`);
console.log(`Given Name: ${result.givenName}`);
console.log(`Name: ${result.name}`);
});

注意:由于每个提供者提供的详细信息数量不同(也取决于您在Azure门户中授权的内容),如果您正在寻找某些特定的信息,您应该检查结果的claims属性。它是一个字典,包含从Azure返回的所有信息。

如果您想删除缓存的认证信息,应使用

import { MobileServiceUser } from "nativescript-azure-mobile-apps/user";
MobileServiceUser.clearCachedAuthenticationInfo();

推送通知

注意:为了使用推送通知,您还需要安装nativescript-push-notifications插件。您可以通过运行以下命令来完成此操作

tns install nativescript-push-notifications

您可以在此处了解更多有关如何使用推送插件的信息。

注册

您需要在推送插件的成功回调中调用推送注册,并通过传递推送插件返回的注册令牌将Azure。

pushPlugin.register(pushSettings, (data) => {
if (pushPlugin.onMessageReceived) {
pushPlugin.onMessageReceived(pushSettings.notificationCallbackAndroid);
}
client.push.register(data)
.then(() => console.log("Azure Register OK!"))
.catch((e) => console.log(e));
}, (e) => { console.log(e); });

使用模板注册

如果您想为通知使用自定义模板,可以使用registerWithTemplate方法传递您的模板名称和正文。

let pushTemplates = {};
pushTemplates[platform.platformNames.android] = "{\"data\":{\"message\":\"$(param)\"}}";
pushTemplates[platform.platformNames.ios] = "{\"aps\":{\"alert\":\"$(param)\"}}";

pushPlugin.register(pushSettings, (data) => {
if (pushPlugin.onMessageReceived) {
pushPlugin.onMessageReceived(pushSettings.notificationCallbackAndroid);
}
client.push.registerWithTemplate(data, "MyTemplate", pushTemplates[platform.device.os])
.then(() => console.log("Azure Register OK!"))
.catch((e) => console.log(e));
}, (e) => { console.log(e); });

注销

pushPlugin.unregister(() => {
console.log("Device Unregister OK!");
client.push.unregister()
.then(() => console.log("Azure Unregister OK!"))

.catch((e) => console.log(e));
}, (e) => console.log(e), pushSettings);

演示

此存储库包含一个纯NativeScript演示。要运行它,请在您的shell中执行以下操作

$ git clone https://github.com/peterstaev/nativescript-azure-mobile-apps
$ cd nativescript-azure-mobile-apps
$ npm install
$ npm run demo-ios

这将运行纯NativeScript演示项目在iOS上。如果您想在Android上运行它,只需使用-android代替-ios后缀。

捐赠

Donate

bitcoin:14fjysmpwLvSsAskvLASw6ek5XfhTzskHC

Donate