- 版本: 2.0.4
- GitHub:
- NPM: https://npmjs.net.cn/package/nativescript-azure-mobile-apps
- 下载
- 昨日: 0
- 上周: 2
- 上月: 33
NativeScript Azure 移动应用插件
一个 NativeScript Azure 移动应用插件。
安装
从项目的根目录运行以下命令
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(number||Date): this
根据之前指定的field
筛选表,使其值小于给定的值。 -
le(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,它不是“应用程序内”。因此,我们需要能够在外部浏览器之间来回切换。主要好处是,这个浏览器可以利用已经设置好的cookie,例如Facebook登录,因此用户不需要再次输入他的凭据。
这需要一点工作,但这是一次性努力,应该只需要大约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
在用户的设备上是唯一的,因此包括您的包ID是一个好开始(用短横线代替点)。
另外,将my.bundle.id
替换为您的包ID。
添加允许的外部重定向URL
将x-msauth-tns-azure-sample://easyauth.callback
添加到以下这些截图中的您的Azure后端的“允许的外部重定向URL”字段。
确保将x-msauth-tns-azure-sample
替换为您自己的自定义URL方案。
应用程序代理绑定
现在,虽然您的应用程序可以由外部方调用,但它仍然不能切换回前台,除非您在应用程序代理中绑定一个方法。不用担心,此插件会为您处理这件事,您唯一需要做的是在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-plugin-firebase
插件。您可以通过运行以下命令来执行此操作
tns plugin add nativescript-plugin-firebase
当提示时,回答是,以在仅推送设置中使用该插件(如果您不会使用Firebase插件中的任何内容)。您可以在此处了解更多有关如何使用Firebase仅推送设置的信息:这里。
注册
您需要在onPushTokenReceivedCallback
中调用Azure的推送注册,并通过传递插件返回的注册令牌。
import { messaging } from "nativescript-plugin-firebase/messaging";
messaging.registerForPushNotifications({
onPushTokenReceivedCallback: (token) => {
client.push.register(token)
.then(() => { console.log("Azure Register OK!", client.push.installationId); })
.catch((e) => { console.error(e); });
}
});
使用模板注册
如果您想使用自定义通知模板,可以使用registerWithTemplate
方法传递您的模板名称和正文。
import { messaging } from "nativescript-plugin-firebase/messaging";
let pushTemplates = {};
pushTemplates[platform.platformNames.android] = "{\"data\":{\"message\":\"$(param)\"}}";
pushTemplates[platform.platformNames.ios] = "{\"aps\":{\"alert\":\"$(param)\"}}";
messaging.registerForPushNotifications({
onMessageReceivedCallback: (message) => {
console.log(message);
},
onPushTokenReceivedCallback: (token) => {
client.push.registerWithTemplate(token, "MyTemplate", pushTemplates[platform.device.os])
.then(() => { console.log("Azure Register OK!", client.push.installationId); })
.catch((e) => { console.error(e); });
},
});
注销
import { messaging } from "nativescript-plugin-firebase/messaging";
messaging.unregisterForPushNotifications()
.then(() => {
console.log("Device Unregister OK!");
client.push.unregister()
.then(() => console.log("Azure Unregister OK!"))
.catch((e) => console.log(e));
})
.catch((e) => { console.error(e); });
示例
此存储库包含一个普通的NativeScript示例。要运行它,请在您的shell中执行以下操作
$ git clone https://github.com/peterstaev/nativescript-azure-mobile-apps
$ cd nativescript-azure-mobile-apps
$ npm install
$ npm run demo-ios
这将运行iOS上的原生NativeScript示例项目。如果您想在Android上运行,只需使用-android
后缀代替-ios
后缀即可。
捐赠
比特币地址:14fjysmpwLvSsAskvLASw6ek5XfhTzskHC