我正在使用Raspberry Pi和Firebase开发一种设备/产品...
系统流程如下:用户在我的网站上购买设备,她可以使用相同的凭据登录移动应用程序。
目前,我依靠一些如何生成的uniuqe id放入设备,以从设备和设备到Firebase实时数据库与数据库进行交互...
现在我需要知道设备是在线还是离线。答案应该是可能的两种解决方案。因为我想通知用户:"您的设备处于离线状态"...
1-在当前代码上(依赖于唯一ID(:如果可能的话,我该如何实现这一点。
2-将系统更改为基于用户:如果我实现这一点,我必须如何思考系统。设备将没有显示输入或键盘。例如,当用户更改密码时会发生什么?
谢谢。。
你想要的是onDisconnect
当设备启动时,您可以设置一个onDisconnect
来更改其状态甚至触发时间:
var lastOnlineRef = firebase.database().ref("devices/1234/lastOnline");
lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP);
var isOnlineRef = firebase.database().ref("devices/1234/isOnline");
isOnlineRef.onDisconnect().set(false);
至于用户的事情,我不完全确定我是否理解。如果将设备与 UID 隔离在如下路径中:/devices/UID
它们独立于用户而存在。
对于您的用户,您只需创建其所有设备的列表:/users/UID/devices
{
1234: 1234,
5678: 5678
}
然后在您的应用程序中,您只需首先获取他们的设备列表,然后创建对它们的引用。
在 Angular 中,它看起来像:
// in the ts
public userDevices = this.db.list('/users/UID/devices').valueChanges();
public getDeviceObservable(deviceId: string) {
return this.db.object('/devices/' + deviceId).valueChanges();
}
//in the template
<div *ngFor="let deviceId of userDevices | async">
<ng-container *ngIf="getDeviceObservable(deviceId) | async as device">
{{ device | json }}
</ng-container>
</div>
在模板中放置getObservable并不完全是最佳实践,您也可以在组件中执行此操作,但这是与switchMap等完全不同的讨论。