如何在同一个侦听器上收听多用户聊天和单个用户聊天的传入消息。现在对于单用户聊天我正在使用以下代码:
chatManager.addChatListener(new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean createdLocally) {
chat.addMessageListener(new ChatStateListener() {
@Override
public void stateChanged(Chat chat, ChatState state) {
Log.d(TAG,"...stateChanged called...");
if (ChatState.composing.equals(state)) {
Log.d("Chat State",chat.getParticipant() + " is typing..");
} else if (ChatState.gone.equals(state)) {
Log.d("Chat State",chat.getParticipant() + " has left the conversation.");
} else {
Log.d("Chat State",chat.getParticipant() + ": " + state.name());
}
}
@Override
public void processMessage(Chat chat, Message message) {
Log.d(TAG,"---Received a message---");
Log.d(TAG,"participant: "+chat.getParticipant());
Log.d(TAG,"message.getBody(): "+message.getBody());
Log.d(TAG,"message.getFrom(): "+message.getFrom());
Log.d(TAG,"message.getType(): "+message.getType());
Log.d(TAG,"message.getSubject(): "+message.getSubject());
String from=message.getFrom();
String sender_id="";
if(from.contains("/"))
{
sender_id=from.split("/")[0];
Log.d(TAG,"The real sender_id is :" +sender_id);
}
else
{
sender_id=from;
}
Intent intent=new Intent(ChattingConnectionService.NEW_MESSAGE);
intent.setPackage(mContext.getPackageName());
intent.putExtra(ChattingConnectionService.BUNDLE_FROM_USERID,sender_id);
intent.putExtra(ChattingConnectionService.BUNDLE_MESSAGE_BODY,message.getBody());
mContext.sendBroadcast(intent);
Log.d(TAG,"Received message from :"+sender_id+" broadcast sent.");
}
});
}
});
对于多用户聊天,我使用以下代码:
multiUserChat=multiUserChatManager.getMultiUserChat(stringExtra);
multiUserChat.addMessageListener(new MessageListener() {
@Override
public void processMessage(Message message) {
Log.d(TAG,"---process message called in joinRoom method");
Log.d(TAG,"---Received a message from: "+message.getFrom());
Log.d(TAG,"message.getBody(): "+message.getBody());
Log.d(TAG,"message.getFrom(): "+message.getFrom());
Log.d(TAG,"message.getType(): "+message.getType());
Log.d(TAG,"message.getSubject(): "+message.getSubject());
if(message.getBody()!=null)
{
Intent intent=new Intent(ChattingConnectionService.NEW_MESSAGE);
intent.setPackage(mContext.getPackageName());
intent.putExtra(ChattingConnectionService.BUNDLE_FROM_USERID,message.getFrom());
intent.putExtra(ChattingConnectionService.BUNDLE_MESSAGE_BODY,message.getBody());
mContext.sendBroadcast(intent);
Log.d(TAG,"Received message from :"+message.getFrom()+" broadcast sent.");
}
}
});
我想在同一个监听器上收听所有这些传入的消息?请帮我?我在办公室里着火了。提前谢谢。
答案 0 :(得分:0)
我不知道您的聊天基础设施是什么样的,但无论如何我建议使用Firebase Cloud Messaging Api(以前的Google云消息传递)
当用户A
向用户B
发送消息时,当服务器收到此消息时,您可以使用Firebase云消息传递消息或有效负载给用户B
并通知他/她收到消息的用户。
对于群聊,您可以使用上述解决方案,当用户A
向群聊workaholics
发送消息时,您的聊天服务器正在查询该会议室中的所有收件人,例如用户{ {1}}和B
。
处理群聊的听众的另一个提示是使用此处的Firebase云消息传递中的主题消息功能:
https://firebase.google.com/docs/cloud-messaging/android/topic-messaging
当您要向特定设备或设备组发送通知时,FCM(Firebase云消息传递)是您的选择。适用于Android,iOS等等..