我有一个Firechat实现,可以正确初始化,但是登录后可以创建和输入房间,但消息无处可去。我已经构建了处理消息发送的功能,但我认为它无法将FirechatUI和Firechat对象正确连接到Firebase数据库。
function initChat(user) {
var room = '';
var db = firebase.database().ref("chat");
var chat = new FirechatUI(db, document.getElementById('firechat'));
var api = chat._chat;
console.log(api);
api.setUser(user.uid, user.displayName, function(user) {
api.resumeSession();
});
chat.setUser(user.uid, user.displayName, function(user) {
chat.resumeSession();
});
api.on('message-add', function(messagedRoom, messageContent) {
console.log('Sent message to room: '+messagedRoom.id+' with the content "'+messageContent+'"');
api.sendMessage(messagedRoom.id, messageContent, 'default');
});
api.on('room-enter', function(enteredRoom) {
api.enterRoom(enteredRoom.id);
room = enteredRoom.id;
});
api.on('room-exit', function(exitedRoom) {
api.leaveRoom(exitedRoom.id);
room = '';
});
isInitialized = true;
}
“消息添加”事件永远不会触发,但“房间进入”和“房间退出”事件却不会触发。
答案 0 :(得分:1)
好的,我尝试使用firebase创建新应用并部署您的代码。
数据库 我选择实时数据库 https://docs.microsoft.com/en-gb/xamarin/android/platform/binding-java-library/binding-an-aar
您不需要创建表,应该设置数据库规则。在我的示例中,我设置了 true 进行读写
然后,我们可以转到已部署的应用程序,登录并尝试创建聊天和发布消息。
恢复:您应该设置数据库规则。
答案 1 :(得分:0)
根据documentation ...调用api.on()
时,此操作仅绑定事件,但不执行任何操作。正如上面的函数initChat()
看起来一样,其他事件可能来自何处甚至令人怀疑。您需要先加入一个会议室,然后向该会议室发送消息,以触发事件message-add
。 data-structure和security rules也可以发挥作用;例如。
"$roomId": {
...
// a list of users that may read messages from this room.
"authorizedUsers": {
".write": "(auth != null) && (!data.exists() || root.child('moderators').hasChild(auth.uid) || data.hasChild(auth.uid))"
}
}
除非moderators
或"$roomId/authorizedUsers"
没有添加相关用户key
,否则没有理由触发事件。其中的key
条目等于邮件订阅。