Firebase 如何知道特定客户端处于离线状态



我正在使用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等完全不同的讨论。

相关内容

  • 没有找到相关文章