Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 实施";有人在打字……”;使用firebase云发布/订阅的聊天应用程序中的功能_Angular_Firebase_Firebase Realtime Database_Chat_Google Cloud Pubsub - Fatal编程技术网

Angular 实施";有人在打字……”;使用firebase云发布/订阅的聊天应用程序中的功能

Angular 实施";有人在打字……”;使用firebase云发布/订阅的聊天应用程序中的功能,angular,firebase,firebase-realtime-database,chat,google-cloud-pubsub,Angular,Firebase,Firebase Realtime Database,Chat,Google Cloud Pubsub,我已经将示例的web版本移植到angular 4套件中。你可以看到我的现场直播,它似乎工作正常。。。我将很快以开源的方式发布它 现在我想实现一个功能,当用户a开始实时键入时,用户B应该会看到“用户a正在键入…”消息。当用户A停止键入时,消息应该消失。显然,如果用户A自己在打字,他不应该看到消息 我正在考虑在db中设置一个对象,如下所示: { “isTyping”:正确, “fromDeviceToken”:“xxxx” } 。。。然后使用firebase realtime更改isTyping字

我已经将示例的web版本移植到angular 4套件中。你可以看到我的现场直播,它似乎工作正常。。。我将很快以开源的方式发布它

现在我想实现一个功能,当用户a开始实时键入时,用户B应该会看到“用户a正在键入…”消息。当用户A停止键入时,消息应该消失。显然,如果用户A自己在打字,他不应该看到消息

我正在考虑在db中设置一个对象,如下所示:

{
“isTyping”:正确,
“fromDeviceToken”:“xxxx”
}
。。。然后使用firebase realtime更改
isTyping
字段

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

我的主要问题是,


是否可以使用Firebase云来执行此操作,而无需在数据库中保持键入状态。。如果是,怎么做?

您可以尝试以下方法:

 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
}

获取的示例如果用户在键入过程中失去连接,则状态将始终保持为真,直到他恢复连接。要解决此问题,您可以在firebase对象中有一个DateTime字段。假设lastTypedCharacter并存储DateTime,并在用户A键入任何内容时每秒更新一次。当显示给其他用户B时,将lastTypedCharacter DateTime与当前时间匹配(如果小于5秒),则可以假定用户A不再键入

这是关于firebase的问题,最好是firebase的cloud pub-sub。你两个都没有提到。你不能在不触发db的情况下向用户显示某些内容,你的live项目基于firebase web示例,该示例使用js作为我的答案,告诉你如何实现,以便为用户显示正在键入的文本。你可能想清楚地定义“正在键入”的含义。这是否意味着他们开始打字,而当他们发送信息时,他们没有打字?如果他们开始打字、改变主意并删除文本怎么办?此外,您还需要保持在数据库中的某个节点中键入的状态,因为客户端将侦听该节点上的事件,以便它们知道何时显示正在键入或未键入的内容。我认为,这不能作为实际的工作示例代码更清楚。。这正是我想要实现的目标的例子。请特别注意
index.js
服务器代码和
public/main.js
客户端代码。。在这些文件中搜索“键入”一词。从这个例子可以看出,一般来说,通过barebones websockets正确传输“正在键入”消息是可能的,而不需要在数据库中保留任何内容。因此,再次强调,我已经知道或有一个非常好的主意如何通过在firebase realtime db中保留某些内容来实现“正在键入”。我的问题是,如何以类似于使用firebase的socket.io聊天示例的方式进行此操作,但不需要不必要的持久化数据(即,使用云函数,或者可能使用我不知道的其他firebase功能)@StuckBetweentries,我希望这能更好地澄清这一点