实施"有人正在打字......"使用firebase cloud pub / sub

时间:2017-04-07 04:40:44

标签: angular firebase firebase-realtime-database chat google-cloud-pubsub

我已将friendlychat示例的网络版移植到角度4套件中。你可以看到我的直播over here它似乎工作正常......我将很快发布它开源。

现在我想要实现一个功能,当用户A开始实时键入时,用户B应该看到"用户A正在键入...."信息。当用户A停止输入时,该消息应该消失。显然,如果用户自己正在打字,用户A不应该看到该消息。

我正在考虑在db中只有一个对象:

{
  "isTyping":true,
  "fromDeviceToken": "xxxx"
}

...然后只使用firebase实时更改isTyping字段。

关于如何实现这一点的任何更好的想法?有任何意见/改进吗?

我的主要问题是,

可以使用Firebase Cloud pub/sub trigger来执行此操作而不会在数据库中保持输入状态。如果是这样,怎么做?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

 this.messageInput.onkeyup = function(){
    So when user starts typing update your database and set isTyping true. 
    Dont forget to check if isTyping set to true so it will not update every 
    time user presses the key
}

示例来自here

答案 1 :(得分:0)

如果在键入期间用户A连接丢失,则状态将始终保持为真,直到他恢复连接。要解决此问题,可以在firebase对象中包含一个DateTime字段。让我们说lastTypedCharacter并存储DateTime,并在用户A输入任何内容时每秒更新一次。当向其他用户B显示时,如果其小于5秒,则将lastTypedCharacter DateTime与当前时间匹配,则可以假设用户A不再输入