- 版本:6.1.0-dev
- GitHub: https://github.com/masaar/ns-limp
- NPM: https://npmjs.net.cn/package/ns-limp
- 下载
- 昨天: 0
- 上周: 0
- 上个月: 0
ns-limp
官方 NativeScript Angular SDK for LIMP.
快速开始
当前 SDK 有两个依赖
jsrasgin
nativescript-websockets
这些依赖项应该会自动与库一起安装。
为 NativeScript 安装 ns-limp
tns plugin add ns-limp
如何使用
- 在组件中使用
import { Component, OnInit } from '@angular/core';
import { ApiService, Res } from 'ns-limp/api.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(private api: ApiService) {}
ngOnInit() {
this.api.init({
api: 'ws://127.0.0.1:8081/ws',
anonToken: '__ANON',
authAttrs: ['email']
});
}
}
SDK 配置
初始化 SDK 时,您应该传递一个符合 SDKConfig
接口的对象,该对象具有以下属性
api
(必需):您要连接到的 LIMP 应用程序的 URI。anonToken
(必需):LIMP 应用的ANON_TOKEN
。authAttrs
(必需):从 LIMP APIv5.8 开始,LIMP 应用程序没有严格的 User 模块属性结构。这包括每个应用程序设置的认证属性。此属性表示一个指向应用程序相同认证属性的Array<string>
。debug
(可选):一个表示 SDK 上调试模式状态的Boolean
。如果true
,您将在浏览器控制台看到关于传输和接收的消息的详细消息。默认false
。fileChunkSize
(可选):一个表示作为将二进制数据推送到 LIMP 应用程序的过程的一部分上传的文件块大小的Number
(以字节为单位)。默认512000
。authHashLevel
(可选):可以是5.0
或5.6
。由于 LIMP APIv5.6 中引入的认证哈希生成更改,一些遗留应用程序由于哈希差异而无法升级到 APIv5.6 和更高版本。SDKv5.7 添加了authHashLevel
,以允许开发人员使用更高版本的 API 和 SDK 与遗留应用程序一起使用。默认5.6
;
最佳实践
您可以根据自己的开发风格完全使用 SDK,但我们有一些提示
会话重新认证
处理 reauth
场景的最佳实践是尽快尝试 checkAuth
。这可以通过订阅 inited$
主题来实现,该主题通知订阅有关 SDK 初始化状态的任何更改,这些更改反映为 SDK 中的 inited
属性。可以这样做
this.api.inited$.subscribe((init: boolean) => {
if (init) {
// SDK is inited and ready for your calls:
try {
// Wrap in try..catch to handle error thrown if no credentials cached
this.api.checkAuth();
} catch { }
}
}, (err: Res<Doc>) => {
console.log('inited$.err', err);
});
认证状态检测
虽然您可以在 auth
、reauth
和 checkAuth
调用的订阅中检测用户认证状态,但最佳实践是使用全局的 authed$
状态 Subject
。您可以通过在启动 SDK 的相同组件(通常是 AppComponent
)中订阅 authed$
来做到这一点。这确保了作为 api.init
订阅的一部分可以成功处理 checkAuth
。建议的模式是
this.api.authed$.subscribe((session: Doc) => {
if (session) {
console.log('We are having an `auth` condition with session:', session);
} else {
console.log('We just got unauthenticated');
}
});
断开连接后重新连接
WebSocket 是始终活跃的连接。这里可能发生很多错误,从而导致与您的 LIMP 应用程序的连接。为了确保您始终可以重新连接,当 SDK 变得不再 inited
时,请再次调用 SDK 的 init
方法。
import { Component, OnInit } from '@angular/core';
import { ApiService, Res } from 'ns-limp/api.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(private api: ApiService) {
this.api.inited$.subscribe((init: boolean) => {
if (init) {
// SDK is inited and ready for your calls:
try {
// Wrap in try..catch to handle error thrown if no credentials cached
this.api.checkAuth();
} catch { }
} else {
// SDK just got not inited, let's init SDK again:
this.init();
}
}, (err: Res<Doc>) => {
console.log('inited$.err', err);
});
}
ngOnInit() {
this.init();
}
init(): void {
this.api.init({
api: 'ws://127.0.0.1:8081/ws',
anonToken: '__ANON',
authAttrs: ['email']
});
}
}
API 参考
debug
表示SDK上调试模式状态的布尔值。如果为true
,您将在浏览器控制台中看到有关传输和接收的消息的详细消息。默认false
。
fileChunkSize
表示在将二进制数据推送到LIMP应用的过程中上传的文件块大小的数字(以字节为单位)。默认512000
。
session
表示当前会话的Doc
对象。仅在用户认证时具有值。
authed
存储当前用户认证状态的布尔值。
authed$
可以订阅以处理用户认证状态变化的Subject<Boolean | Doc>
。
init()
用于与LIMP应用建立连接的基本方法。如果出于任何原因需要读取API接收到的每条消息,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
init(api: String, anonToken: String): Observable<Res<Doc>> { /*...*/ }
close()
关闭与LIMP应用当前连接的方法。如果出于任何原因需要读取close
调用的响应,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
close(): Observable<Res<Doc>> { /*...*/ }
auth()
可以使用此方法对用户进行认证。如果出于任何原因需要读取auth
调用的响应,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
auth(authVar: string, authVal: string, password: string): Observable<Res<Doc>> { /*...*/ }
reauth()
可以使用此方法重新认证用户。如果没有从以前的成功的认证调用中缓存sid
和token
属性,则此方法会失败。此方法不应直接调用,而是使用checkAuth()
。如果出于任何原因需要读取reauth
调用的响应,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
reauth(sid: string = this.cache.get('sid'), token: string = this.cache.get('token')): Observable<Res<Doc>> { /*...*/ }
signout()
可以使用此方法注销当前用户。成功后,此方法将删除会话的所有缓存属性。如果出于任何原因需要读取signout
调用的响应,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
signout(): Observable<Res<Doc>> { /*...*/ }
checkAuth()
检查是否存在缓存的会话并尝试重新认证用户的函数。如果没有缓存的凭据,则会抛出错误,因此您需要始终将其包裹在try..catch
中。如果出于任何原因需要读取checkAuth
调用的响应,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
checkAuth(): Observable<Res<Doc>> { /*...*/ }
generateAuthHash()
用于生成认证散列的方法。此方法用于auth()
调用。但是,您还需要在创建用户时生成这些值。方法定义
generateAuthHash(authVar: string, authVal: string, password: string): string { /*...*/ }
deleteWatch()
删除正在进行的监视的方法。您可以传递要删除的监视ID,或者传递__all
以删除所有监视。如果出于任何原因需要读取deleteWatch
调用的响应,则此方法返回一个Observable
以进行链式订阅,但订阅它不是必需的。方法定义
deleteWatch(watch: string | '__all'): Observable<Res<Doc>> { /*...*/ }
call()
SDK中最重要的方法。您使用此方法调用LIMP应用中的不同端点。尽管在params中的callArgs
对象具有所有调用属性的完整定义,但您通常只需在大多数情况下传递query
和/或doc
。第三个参数awaitAuth
指定调用是否应在会话认证后排队。方法定义
call(endpoint: string, callArgs: callArgs, awaitAuth: boolean = false): Observable<Res<Doc>> { /*...*/ }
贡献指南
感谢您对ns-limp
感兴趣。
有关向此项目贡献的更多详细信息,请参阅贡献指南。