我尝试使用mvp开发一对一的聊天应用程序,当应用程序第一次运行时,聊天工作正常,消息发送给用户。问题是,当我尝试注册另一个帐户并尝试发送消息时,firebase创建了两个不同的聊天室,但我无法获得消息,因为第二个用户没有检测到聊天室已经创建并创建了另一个聊天室,请帮助我?这是我试图发送消息的代码:
最终字符串room_type_1=chat.getSenderUID()+“_”+chat.getReceiverUID();最终字符串room_type_2=chat.getReceiverUID()+“_”+chat.getSenderUID();
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child(Constants.ARG_CHAT_ROOMS).getRef().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(room_type_1)) {
Log.e(TAG, "sendMessageToFirebaseUser: " + room_type_1 + " exists");
databaseReference.child(Constants.ARG_CHAT_ROOMS).child(room_type_1).child(String.valueOf(chat.getTimestamp())).setValue(chat);
} else if (dataSnapshot.hasChild(room_type_2)) {
Log.e(TAG, "sendMessageToFirebaseUser: " + room_type_2 + " exists");
databaseReference.child(Constants.ARG_CHAT_ROOMS).child(room_type_2).child(String.valueOf(chat.getTimestamp())).setValue(chat);
} else {
Log.e(TAG, "sendMessageToFirebaseUser: success");
Log.e("sender uis",""+chat.getSenderUid());
Log.e("srevier uis",""+chat.getSenderUid());
databaseReference.child(Constants.ARG_CHAT_ROOMS).child(room_type_1).child(String.valueOf(chat.getTimestamp())).setValue(chat);
getMessageFromFirebaseUser(chat.getSenderUid(), chat.getReceiverUid());
}
sendPushNotificationToReceiver(chat.sender,
chat.message,
chat.senderUid,
new SharedPrefUtil(context).getString(Constants.ARG_FIREBASE_TOKEN),
receiverFirebaseToken);
mOnSendMessageListener.onSendMessageSuccess();
}
@Override
public void onCancelled(DatabaseError databaseError) {
mOnSendMessageListener.onSendMessageFailure("Unable to send message: " + databaseError.getMessage());
}
});
}
这是我从firebase获得消息的代码
public void getMessageFromFirebaseUser(最终上下文Context,String senderUid,String receiverUid,final ChatFragmentListener ChatFragmentListener){
final String room_type_1 = senderUid + "_" + receiverUid;
final String room_type_2 = receiverUid + "_" + senderUid;
final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
final DatabaseReference databaseChats = FirebaseDatabase.getInstance().getReference().child(Constants.ARG_CHAT_ROOMS);
databaseChats.keepSynced(true);
databaseReference.child(Constants.ARG_CHAT_ROOMS).getRef().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(room_type_1)) {
Log.e(TAG, "getMessageFromFirebaseUser: " + room_type_1 + " exists");
FirebaseDatabase.getInstance()
.getReference()
.child(Constants.ARG_CHAT_ROOMS)
.child(room_type_1).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getKey() != s) {
Chat chat = new Chat();
chat = dataSnapshot.getValue(Chat.class);
chatFragmentListener.onGetMessagesSuccess(chat);
Log.e("1", "get");
}
// do something here
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
/* Log.e("childadded","eeeee"+s);
Log.e("chilchanged","ee"+dataSnapshot.getKey());
Chat chat=dataSnapshot.getValue(Chat.class);
String key=dataSnapshot.getKey();
if(!key.equals(s)){chats.add(chat);}*/
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
/* Log.e("childadded","eeeee"+s);
Log.e("childmoved","ee"+dataSnapshot.getKey());
Chat chat=dataSnapshot.getValue(Chat.class);
String key=dataSnapshot.getKey();
if(key.equals(s)){chats.remove(chat);}*/
}
@Override
public void onCancelled(DatabaseError databaseError) {
// lll
chatFragmentListener.onGetMessagesFailure("Unable to get message: " + databaseError.getMessage());
}
});
} else if (dataSnapshot.hasChild(room_type_2)) {
Log.e(TAG, "getMessageFromFirebaseUser: " + room_type_2 + " exists");
FirebaseDatabase.getInstance()
.getReference()
.child(Constants.ARG_CHAT_ROOMS)
.child(room_type_2).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Chat chat = new Chat();
chat = dataSnapshot.getValue(Chat.class);
chatFragmentListener.onGetMessagesSuccess(chat);
Log.e("2", "get");
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
chatFragmentListener.onGetMessagesFailure("Unable to get message: " + databaseError.getMessage());
}
});
} else {
Log.e(TAG, "getMessageFromFirebaseUser: no such room available");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
chatFragmentListener.onGetMessagesFailure("Unable to get message: " + databaseError.getMessage());
}
});
}
.
这个问题最简单的解决方案是创建聊天室,将用户uuid按升序或降序排列。
public String getChatRoom(String fromUserId,String toMessageId){
String chatRoom;
if(fromUserId.compareTo(toMessageId) < 0 ){
// ToMessageId has less alphabetic order then fromUserId
chatRoom = toMessageId+" "+fromUserId;
}else{
chatRoom = fromUserId+" "+toMessageId;
}
return chatRoom;
}
下面是firebase聊天应用程序的示例实现
问题内容: 我想知道为数千名用户编写聊天应用程序的正确方法是什么。 我只是感到困惑,我如何才能每秒使用AJAX或更少的方法来对服务器执行ping操作,并检查MySQL中是否有新记录等,并且服务器负载可以接受。 我目前正在考虑使用jQuery,PHP和MySQL进行编码。 请指教。您的帮助将不胜感激。 问题答案: 客户端 对于需要轮询服务器的任何程序,我建议使用WebSockets。 我写了一个非常
我正在使用XMPP在app引擎上编写一个聊天应用程序。我的想法是允许用户互相聊天。我可以将消息发送到google talk帐户,方法是将登录的用户删除地址的@gmail.com部分,并将其替换为@appid.appspotchat.com)。例如,如果登录的用户是bob@gmail.com,则用于发送的jid将是bob@appid.appspotchat.com)。然后,您可以将消息发送到goog
现在我们已经熟悉了Socket.IO,让我们编写一个聊天应用程序,我们可以用它在不同的聊天室聊天。 我们将允许用户选择用户名并允许他们使用它们进行聊天。 首先,让我们设置我们的HTML文件来请求用户名 - <!DOCTYPE html> <html> <head> <title>Hello world</title> </head> <script src = "/s
我用firebase实时数据库和firebase身份验证方法创建了这个聊天应用程序,但我真的很困惑,我不知道如何在聊天应用程序中获得用户的最后一次露面。 下面是我在onCreate medthod中尝试的代码。 任何想法或替代方法都将不胜感激。
本文向大家介绍Android实现一对一蓝牙聊天APP,包括了Android实现一对一蓝牙聊天APP的使用技巧和注意事项,需要的朋友参考一下 学习了,三天的Android 蓝牙开发,开始是一头雾水,看着别人讲的Google官方的demo感觉很容易,所有自己也尝试写一个很简单的聊天demo.可是想的很简单,自己做起来也花了,将近一天的时间才搞定这个基本的流程设计.下面是几点心得后面再贴代码 1)写一个
事情是这样的: 我已经和离子电容进行了一对一的私聊,在云火商店里保存消息。到目前为止,它工作得很好。两个用户都可以发送和接收消息。另一方面,我使用FCM(Firebase Cloud Messaging)根据Capability的官方文档(https://capacitorjs.com/docs/guides/push-notifications-firebase)进行了推送通知,并且从Fireb