- 版本:2.0.4
- GitHub: https://github.com/romandragan/nativescript-azure-mobile-apps
- NPM: https://npmjs.net.cn/package/nativescript-azure-mobile-apps-with-updated-auth
- 下载
- 昨天: 2
- 上周: 8
- 上个月: 14
一个 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 个文件
- 在
app/App_Resources/Android/AndroidManifest.xml
中,您必须将android:minSdkVersion
设置为 19 或更高。 - 在
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
后缀。
捐赠
bitcoin:14fjysmpwLvSsAskvLASw6ek5XfhTzskHC