Firebase如何知道特定客户端离线?

标签 firebase firebase-authentication firebase-cloud-messaging

我正在使用树莓派和 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 等完全是另一回事。

关于Firebase如何知道特定客户端离线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303327/

相关文章:

java - Firestore 分页

ios - Firebase ios 从数据库中选择值等于某物的数据库

java - 使用电子邮件、用户名和密码进行 Firebase 身份验证

javascript - Firebase(网络)创建/更新与当前不同的用户

node.js - 使用 Node.js 服务器的 Firebase 云消息传递

node.js - 如何用nodejs进行动态调度?

javascript - 我的 Angular 应用程序可以有两个 Firebase 配置吗

ios - Firebase iOS Google 登录——使用未声明的类型 GIDSignInDelegate

ios - 使用firebase云功能时如何在iOS中发送通知?

ios - Postman - Firebase 通知 ios