How to create xmpp group chat and add members using smack 4.1 in android

5k Views Asked by At

In my app, I want to create groups and add users to the groups using smack 4.1. I am able to create group but unable to add user in that groups. My Code for create groups is...

create group

if (connection != null) {
        String groupName = XmppUtils.buildMUCName(grpName);
        MultiUserChat multiUserChat = managerMuc.getMultiUserChat(groupName);
        if (!multiUserChat.isJoined()) {
            boolean createNow;
            try {
                multiUserChat.createOrJoin(grpName);
                createNow = true;
                if (createNow) {
                    Form form = multiUserChat.getConfigurationForm().createAnswerForm();
                    form.setAnswer("muc#roomconfig_publicroom", true);
                    form.setAnswer("muc#roomconfig_roomname", grpName); //                        form.setAnswer("muc#roomconfig_roomowners", userDate.getUserId().toString() + "@" + Config.ChatValues.SERVICE_NAME);
                    form.setAnswer("muc#roomconfig_persistentroom", true);
                    List<String> cast_values = new ArrayList<String>();
                    cast_values.add("moderator");
                    cast_values.add("participant");
                    cast_values.add("visitor");
                    form.setAnswer("muc#roomconfig_presencebroadcast", cast_values);
                    multiUserChat.sendConfigurationForm(form);
                    multiUserChat.join(userDate.getUserId().toString() + "@" + Config.ChatValues.SERVICE_NAME); //                        multiUserChat.sendConfigurationForm(new Form(DataForm.Type.submit)); //this is to create the room immediately after join.
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            Log.e("createGroup", "=======multiUserChat.isJoined()=====>");
        }
    }

Code for add users this is what I am doing to add users

  // Create a MultiUserChat using an XMPPConnection for a room

   String roomName = groupName + "@" + Config.ChatValues.GROUP_SERVICE_NAME;
    MultiUserChat muc2 = managerMuc.getMultiUserChat(roomName);
    // User2 joins the new room
    // The room service will decide the amount of history to send
    // The number of chat room services will decide to accept the historical record
   /* DiscussionHistory history = new DiscussionHistory();
    history.setMaxStanzas(0);*/

    //history.setSince(new Date());
    try {

        for (int i = 0; i < selectedLisrArray.size(); i++) {
            String userId = selectedLisrArray.get(i).userId.toString() + "@" + Config.ChatValues.SERVICE_NAME;
            Log.e("joinGroups", "=========>" + roomName + " users to join  " + userId);

            muc2.invite(msg, userId, "let's  join this room ");
            muc2.sendMessage(userId + " : You have joined the group : " + roomName);
        }

    } catch (SmackException.NotConnectedException e) {
        e.printStackTrace();
    }
1

There are 1 best solutions below

26
On BEST ANSWER

I have done little bit same.Just you send invitation and then install plugin Subscription on openfire if you used.Change settings to accept any request.

If you not using openfire then you just accept their invitation on other side. Hope this will help you.

MultiUserChat muc = new MultiUserChat(XMPP.getInstance().getConnection(getActivity()), groupname);
                try {
                    muc.create(StringUtils.parseName(XMPP.getInstance().getConnection(getActivity()).getUser()));
                    muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
                } catch (XMPPException e) {
                } catch (NoResponseException e) {
                    e.printStackTrace();
                } catch (SmackException e) {
                    e.printStackTrace();
                }

                for (int i = 0; i < alSelectedContacts.size(); i++) {

                    Log.e("tag", "group chating purpose1 ::" + alSelectedContacts.get(i).get("id"));
                    try {
                        muc.invite((alSelectedContacts.get(i).get("id") + "_user") + "@" + XMPP.HOST,
                                alSelectedContacts.get(i).get("id") + "_user");
                    } catch (NotConnectedException e) {
                        e.printStackTrace();
                    }

                }

                try {
                    muc.sendMessage("New group created");
                } catch (NotConnectedException e1) {
                    e1.printStackTrace();
                } catch (XMPPException e1) {
                    e1.printStackTrace();
                }

Get Muc invitation here,

MultiUserChat.addInvitationListener(mXmppConnection,
        new InvitationListener() {

            @Override
            public void invitationReceived(Connection connection,
                    String room, String inviter, String reason,
                    String unKnown, Message message) {

                //MultiUserChat.decline(mXmppConnection, room, inviter,
                    //  "Don't bother me right now");
                // MultiUserChat.decline(mXmppConnection, room, inviter,
                // "Don't bother me right now");
                try {
                   muc.join("test-nick-name");
                   Log.e("abc","join room successfully");
                   muc.sendMessage("I joined this room!! Bravo!!");
                } catch (XMPPException e) {
                   e.printStackTrace();
                   Log.e("abc","join room failed!");
                }
            }
        });