2015-11-26 9 views
6

Ich habe einen Gruppenchat-Mechanismus in meinem Android implementiert, wo ich Gruppen erstellt und Mitglieder über das REST API Plugin von Openfire hinzugefügt habe. Senden von Nachrichten an dieselbe Gruppe, die keine Nachrichten an alle Mitglieder derselben Gruppe liefert. Bitte sehen Sie mein Fehlerprotokoll für das gleiche, und schlagen Sie mir eine Lösung in Bezug auf das gleiche vor.XMPP Group Chat Android

Log:

11-26 17:51:42.364 10035-10035/com.myoneapp.chat V/Cursor data==>>﹕ To User ID==> onCreateLoader=>terehokerahenge 
11-26 17:51:47.018 10035-10654/com.myoneapp.chat I/System.out﹕ 05:51:47 PM SENT (0): <message to='[email protected]' id='362-05' type='groupchat'><body>hi</body><SenderName></SenderName><mediaType>0</mediaType><request xmlns='urn:xmpp:receipts'/></message> 
11-26 17:51:47.066 10035-10035/com.myoneapp.chat V/ChatWindow﹕ MESSAGE TYPE==>0 
11-26 17:51:47.070 10035-10035/com.myoneapp.chat V/ChatWindow﹕ MESSAGE TYPE==>0 
11-26 17:51:47.072 10035-10035/com.myoneapp.chat V/ChatWindow﹕ MESSAGE TYPE==>0 
11-26 17:51:48.097 10035-10655/com.myoneapp.chat I/System.out﹕ 05:51:48 PM RECV (0): <message to="[email protected]/chat.spectratech.in" id="362-05" type="error" from="[email protected]"><body>hi</body><SenderName/><mediaType>0</mediaType><request xmlns="urn:xmpp:receipts"/><error code="406" type="modify"><not-acceptable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></message> 
11-26 17:51:48.102 10035-10654/com.myoneapp.chat I/System.out﹕ 05:51:48 PM SENT (0): <message to='[email protected]' id='CGIln-9' type='error'><received xmlns='urn:xmpp:receipts' id='362-05'/></message> 

Code:

new Thread(new Runnable() { 
       @Override 
       public void run() { 
        activity.getmService().xmpp.createMUCGroup(etGroupSubject.getText().toString(), mAppPreferences.getUserName()); 

        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          activity.getmService().xmpp.inViteUserstoGroup(jabberids); 
         } 
        }); 
       } 
      }).start(); 

public void createMUCGroup(String gJID, String owner){ 
     mMultiUserChat = getMUChatManager().getMultiUserChat(gJID + "@conference.chat.spectratech.in"); 
     try { 
      mMultiUserChat.create(mAppPreferences.getUserName()); 

// Get the the room's configuration form 
      // org.jivesoftware.smackx.xdata.Form form = mMultiUserChat.getConfigurationForm(); 
// Create a new form to submit based on the original form 


      org.jivesoftware.smackx.xdata.Form form = mMultiUserChat.getConfigurationForm().createAnswerForm(); 
      form.setAnswer("muc#roomconfig_publicroom", true); 
      form.setAnswer("muc#roomconfig_roomname", gJID); 
      form.setAnswer("muc#roomconfig_roomowners",gJID); 
      form.setAnswer("muc#roomconfig_persistentroom", true); 

      mMultiUserChat.sendConfigurationForm(form); 
      /*org.jivesoftware.smackx.xdata.Form submitForm = form.createAnswerForm(); 
// Add default answers to the form to submit 
      for (java.util.Iterator fields = (java.util.Iterator) form.getFields(); fields.hasNext();) { 
       org.jivesoftware.smackx.xdata.FormField field = (org.jivesoftware.smackx.xdata.FormField) fields.next(); 
       if (!org.jivesoftware.smackx.xdata.FormField.Type.hidden.equals(field.getType()) && field.getVariable() != null) { 
        // Sets the default value as the answer 
        submitForm.setDefaultAnswer(field.getVariable()); 
       } 
      }*/ 
// Sets the new owner of the room 
      /*java.util.List owners = new java.util.ArrayList(); 
      owners.add(mAppPreferences.getUserName()+"@chat.spectratech.in"); 
      submitForm.setAnswer("muc#roomconfig_roomowners", owners); 
// Send the completed form (with default values) to the server to configure the room 
      mMultiUserChat.sendConfigurationForm(submitForm);*/ 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

public void inViteUserstoGroup(java.util.ArrayList<String> users){ 
     getMUChatManager().addInvitationListener(MyXMPP.this); 
     for (int i = 0; i < users.size(); i++) { 
      try { 
       mMultiUserChat.invite(users.get(i)+"@chat.spectratech.in", "Meet me in this group."); 
      } catch (org.jivesoftware.smack.SmackException.NotConnectedException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

@Override 
    public void invitationReceived(org.jivesoftware.smack.XMPPConnection xmppConnection, org.jivesoftware.smackx.muc.MultiUserChat multiUserChat, String s, String s1, String s2, org.jivesoftware.smack.packet.Message message) { 
     try { 
      System.out.println("Invitation Received==========================>"); 
      mMultiUserChat.join(s1); 
     } catch (org.jivesoftware.smack.SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } catch (org.jivesoftware.smack.XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (org.jivesoftware.smack.SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
     } 
    } 

Es Fehler Rückkehr 406 Nicht akzeptabel

Antwort

6

Ich denke, Sie die Implementierung von Auto fehlen Gruppe akzeptieren Chat-Anfrage in Ihrem Code Beitritt .

Im Folgenden Code arbeitet für Amack Gruppen-Chat mit Openfire Server

1. XMPP Erstellen von Verbindungs ​​

XMPPTCPConnection connection = new XMPPTCPConnection(config); 
    connection.connect(); 
    connection.login(ID1, password1); 
    Presence presence = new Presence(Presence.Type.available); 
    connection.sendPacket(presence); 

2. Erstellen von persistierendem Gruppenchatraum

MultiUserChat chatRoom = new MultiUserChat(connection, "[email protected]"); 
    chatRoom.create("nagarjuna"); 
    Form form = chatRoom.getConfigurationForm().createAnswerForm(); 
    form.setAnswer("muc#roomconfig_publicroom", true); 
    form.setAnswer("muc#roomconfig_roomname", "room786"); 
    form.setAnswer("muc#roomconfig_roomowners",owners); 
    form.setAnswer("muc#roomconfig_persistentroom", true); 
    chatRoom.sendConfigurationForm(form); 

3. Einladung an die Teilnehmer senden

MultiUserChat.addInvitationListener(connection, groupChatListener); 
    chatRoom.invite("[email protected]", "hi surya"); 

4. Auto die Anforderung von RIDER akzeptieren Gruppen-Chat

public class GroupChatListener implements InvitationListener{ 
    String nickname; 

    public GroupChatListener(String nick) 
    { 
     nickname = nick; 
    } 

    @Override 
    public void invitationReceived(XMPPConnection con, String room,String inviter, String reason, String password, Message message) 
    { 
     System.out.println(" Entered invitation handler... "); 
     try 
     { 
      MultiUserChat chatRoom = new MultiUserChat(con, room); 
      chatRoom.join(nickname); 
     } 
     catch (NoResponseException | XMPPErrorException| NotConnectedException e) 
     { 
      e.printStackTrace(); 
     } catch (SmackException e) 
     { 
      e.printStackTrace(); 
     } 
     System.out.println(" Invitation Accepted... "); 
    } 

} 

5. Senden Nachricht an Gruppen-Chat Mitglieder

private static void sendMessageToRoomOccupants(XMPPTCPConnection connection) throws NotConnectedException 
{ 
    Message msg = new Message("[email protected]",Message.Type.groupchat); 
    msg.setBody("This is nagarjuna friednds. Please join this room and let us have fun."); connection.sendPacket(msg); 
} 

6. Receiving beitreten die Gruppe Chat Nachricht von Fahrt Benutzer

MultiUserChat chatRoom = new MultiUserChat(connection, "[email protected]"); 
chatRoom.addMessageListener(new GroupChatMsgListener()); 

package com.disha.test; 
import org.jivesoftware.smack.PacketListener; 
import org.jivesoftware.smack.SmackException.NotConnectedException; 
import org.jivesoftware.smack.packet.Packet; 

public class GroupChatMsgListener implements PacketListener 
{ 

    @Override 
    public void processPacket(Packet packet) throws NotConnectedException 
    { 
     System.out.println(" Received group cht messages... "); 
     System.out.println("from : "+packet.getFrom()); 
     System.out.println("to : "+packet.getTo()); 
     System.out.println(packet.toString()); 
    } 
} 
+0

Hallo Mayur, Danke für deine Hilfe, aber ich habe diese Codes bereits in meiner App ausprobiert, aber es funktioniert immer noch nicht. Ich habe meine Frage bearbeitet, bitte überprüfe meinen Code und sag mir, wo ich falsch liege. –

+0

Ich folge auch dem gleichen Link, den Sie erwähnten Code, https://sites.google.com/site/nextthoodtlabs/engineering/group-chat-using-smack-with-openfire-xmpp-server –

+0

in Ihrem Code, Sie verwendetes Objekt von MUC, das Sie erstellt haben, um eine Gruppe in addInvitationListener hinzuzufügen. das ist falsch.Bitte verwenden Sie das neu erstellte Objekt MultiUserChat wie im 4. Schritt in der Funktion receiveReceived definiert –

0

Um Nachrichten im Gruppenchat Sie müssen senden beitreten es zuerst:

mMultiUserChat.join("yournickname"); 
+0

Ich habe das bereits implementiert. Bitte schlagen Sie einen Fehler in meinem Code vor. –

+0

In Ihrem Code sehe ich 'Join' Anruf nur beim Einladen. Der Einladungssender muss ebenfalls beitreten – vitalyster

0

Sein nicht in 4.1.9 Version arbeiten, können Sie dieses versuchen:

public MultiUserChat mMultiUserChat; 
    private MultiUserChatManager mMultiUserChatManager; 

    mMultiUserChatManager = MultiUserChatManager.getInstanceFor(mAbstractXMPPConnection); 
    mMultiUserChatManager.addInvitationListener(this); 

    mMultiUserChat = mMultiUserChatManager.getMultiUserChat(room); 
    mMultiUserChat.addMessageListener(this); 

    try { 
     mMultiUserChat.join(yournickname); 

     // mMultiUserChat.sendConfigurationForm(new Form(DataForm.Type.submit)); 

    } catch (SmackException.NoResponseException e) { 
     e.printStackTrace(); 
    } catch (XMPPException.XMPPErrorException e) { 
     e.printStackTrace(); 
    } catch (SmackException.NotConnectedException e) { 
     e.printStackTrace(); 
    } 

und für Nachrichtens:

 Message msg = new Message(room, Message.Type.groupchat); 
    msg.setBody(message); 
    mMultiUserChat.sendMessage(msg); 

Hoffe, das ist hilfreich, danke.