没有收到多用户聊天消息Xmpp samck android
我正在聊天的应用程序中,我可以发送消息,图像,视频等 我已经在一对一的聊天做到这一点,也可以在群聊中完成它。 但问题是: - 我每次登录时都必须加入每个组,否则我无法接收来自不同组的消息。没有收到多用户聊天消息Xmpp samck android
这里是我每次加入组的方式。
MultiUserChat muc= new MultiUserChat(mConnection,"[email protected]");
String userNAme ="222222222";
muc.join(userNAme);
如果我不加入组,每次我都不接收邮件。 如果我加入组我开始收到邮件。
我的问题是这是唯一的解决方案或所有群聊这样工作。 还是我在做一些错误的事情
我google了,但没有找到任何解决方案。 如果是重复的问题,或涉及到我的问题,请分享链接 感谢
这任何回答是代码: -
public boolean createChatRoom() {
String name = edtGroupName.getText().toString();
if (!(connection.isConnected() && name.length() != 0)) {
return false;
}
try {
// Create a MultiUserChat
String userName = Utils.covertIntoSubString(connection.getUser(), Constant.AT);
roomName = (name + md5String(getDateTime()) + userName + Constant.CONFERENCE + connection.getServiceName()).replaceAll(" ", "");
MultiUserChat muc = new MultiUserChat(connection, roomName);
// Create a chat room
muc.create(roomName);
// set Room Name as room subject
muc.changeSubject(name);// RoomName room name
// To obtain the chat room configuration form
Form form = muc.getConfigurationForm();
// Create a new form to submit the original form according to the.
Form submitForm = form.createAnswerForm();
// To submit the form to add a default reply
for (Iterator<FormField> fields = form.getFields(); fields
.hasNext();) {
FormField field = (FormField) fields.next();
if (!FormField.TYPE_HIDDEN.equals(field.getType())
&& field.getVariable() != null) {
// Set default values for an answer
submitForm.setDefaultAnswer(field.getVariable());
}
}
// Set the chat room of the new owner
List<String> owners = new ArrayList<String>();
owners.add(connection.getUser());// The user JID
// submitForm.setAnswer("muc#roomconfig_roomowners", owners);
// Set the chat room is a long chat room, soon to be preserved
submitForm.setAnswer("muc#roomconfig_persistentroom", true);
// chat room is public
submitForm.setAnswer("muc#roomconfig_publicroom", true);
// Allows the user to modify the nickname
submitForm.setAnswer("x-muc#roomconfig_canchangenick", true);
// Allows the possessor to invite others
// submitForm.setAnswer("muc#roomconfig_allowinvites", true);
// submitForm.setAnswer("muc#roomconfig_enablelogging", true);
// Only allow registered nickname log
// submitForm.setAnswer("x-muc#roomconfig_reservednick", true);
// Allows the user to register the room
// submitForm.setAnswer("x-muc#roomconfig_registration", true);
muc.sendConfigurationForm(submitForm);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public void inviteFriends(String userJid) {
try {
String groupName = edtGroupName.getText().toString();
Message msg = new Message();
msg.setBody(groupName);
MultiUserChat muc = new MultiUserChat(connection, roomName);
if (muc != null) {
muc.grantMembership(userJid);
muc.invite(msg, userJid, groupName);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void invitationrecvd(){
MultiUserChat chatRoom = new MultiUserChat(con, rum);
try {
chatRoom.join(userName);
saveGroupsToDb(userName + Constant.AT + Constant.HOST + Constant.SLASHSMACK, rum, group);
} catch (Exception e) {
e.printStackTrace();
}
}
,这是主屏幕上的群消息监听器
PacketFilter filter = new MessageTypeFilter(Message.Type.groupchat);
groupMessagesListeners = new GroupMessagesListeners();
mConnection.addPacketListener(groupMessagesListeners,filter);
该群聊被发送到XMPP muc(多用户聊天),因此您需要加入muc才能接收在该群组中发送的消息。您可以在https://xmpp.org/extensions/xep-0045.html中阅读更多关于此的信息。
这里是从链路的摘录:
7.2.1 GROUPCHAT 1.0协议
为了参加在多用户聊天室 进行的讨论,用户必须首先通过进入房间成为占用者。在 旧群聊1.0协议,这是通过发送存在与 no'type'属性来完成的,其中“room”是房间 ID,“service”是聊天服务的主机名,“nick”是在房间内 用户所需的昵称:
或多或少我已经回答了这种答案的,但你的代码,它是更清洁(Can't able to receive group chat messages using smack-android:4.1.4)。
1)当你创建一个多用户聊天,为了完成它,你必须加入这个聊天室,或者它只是被配置但不是仍然活动的房间。
muc.sendConfigurationForm(submitForm);
muc.join("My Nickname","password"); //omit password if not needed
2)自动加入您的groupchats,您可以使用PubSub的功能 与嫌片段可以是这样的:
BookmarkManager bookmarkManager = BookmarkManager.getBookmarkManager(mConnection);
bookmarkManager.addBookmarkedConference
("My roomname label",
roomName,
true,
"My Nickname",
password);
添加此代码时:
- 你创建群聊
- 您接受群聊邀请。
(要删除书签,只需:
this.bookmarkManager.removeBookmarkedConference(roomName)
)
最后,登录后,添加一个方法来自动联接的群聊:
List<BookmarkedConference> list = BookmarkManager.getBookmarkManager(mConnection).getBookmarkedConferences();
MultiUserChat muc;
for (BookmarkedConference conference : list)
{
System.out.println("- Conference with bookmark: " + conference.getName() +
" and jid: " + conference.getJid());
if ((muc = multiUserChatManager.getMultiUserChat(conference.getJid())) != null
&& conference.isAutoJoin())
{
muc.join("My Nickname");
//foo
}
}
这个你有后全部用于配置和管理你的群组。我个人不喜欢在mConnection
中增加一个通用的PacketListener
,这是由于后续难以同步前端的消息,但这将最终成为另一个分支。
感谢朋友详细调查代码。但是你分享的东西总是加入我们创建的房间......而我的问题是,每当我们已经成为成员时,我们不需要加入任何空间。或者它是唯一的解决方案。谢谢@MrPk –
唯一的解决方案。成为会员(所有者,管理员,成员,弃儿)只会给你的权利做一些事情(如变更主题等),但理论上可以将管理员用户添加为默认的所有者,当然他不需要收到任何消息。基本上你会收到来自Time TJ(加入)直到Time TL(左)的消息,其他配置只是配置。 – MrPk
所以我的理解是我必须每次启动应用程序时加入所有组。所以在此之后,我开始接收来自加入和离开团体的消息。 –
问题是我必须重新加入已加入的组才能收到消息...否则我无法收到消息反对我是组的成员...... –
加入后您是否离开组?可能每隔10秒发送一次你仍然是房间的一部分 – manishg
不,我不离开该组我是组的一部分,但不接收消息...我不知道最新错误... –