2015-11-26 34 views
6

Ho implementato un meccanismo di Chat di gruppo nel mio Android in cui ho creato gruppi e aggiunto membri tramite Plug-in API REST di Openfire. inviando messaggi allo stesso gruppo non consegnando messaggi a tutti i membri dello stesso gruppo. Si prega di consultare il mio registro degli errori per lo stesso, e suggerirmi qualsiasi soluzione per quanto riguarda lo stesso.Chat di gruppo XMPP 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> 

Codice:

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(); 
     } 
    } 

E tornando Errore 406, Non accettabile

risposta

6

Penso che vi manca l'attuazione di auto accettare la chat unirsi richiesta nel codice Group .

Di seguito il codice sta lavorando per AMACK chat di gruppo utilizzando Openfire Server

1. Creazione di XMPP Connection

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

2. Creazione Persistant Group Chat Room

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. Invio dell'invito ai partecipanti

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

4. Auto accettare la richiesta del pilota di unirsi messaggio di chat di gruppo

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. invio ai membri del gruppo di chat

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. Ricezione il messaggio di chat di gruppo da parte degli utenti di corsa

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

Ciao Mayur, grazie per il vostro aiuto, ma ho già provato questi codici nella mia app, ma ancora non funziona. Ho modificato la mia domanda, per favore controlla il mio codice e dimmi dove sto andando male. –

+0

Seguo anche lo stesso link che hai citato il codice precedente, https://sites.google.com/site/nextthoughtlabs/engineering/group-chat-using-smack-with-openfire-xmpp-server –

+0

nel tuo codice, tu Oggetto usato di MUC che hai creato gruppo da aggiungere a addInvitationListener. è sbagliato.Per favore, usa il nuovo oggetto creato di MultiUserChat come definito in 4a fase nella funzione Invito ricevuto –

0

Al fine di inviare messaggi in chat di gruppo è necessario unirsi per primo:

mMultiUserChat.join("yournickname"); 
+0

Ho già implementato lo stesso. Si prega di suggerire qualsiasi errore nel mio codice. –

+0

Nel tuo codice vedo la chiamata 'join' solo quando l'invito viene ricevuto. Invita anche il mittente – vitalyster

0

non il suo lavoro in 4.1.9 versione, è possibile provare questo:

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(); 
    } 

e per il messaggio di invio:

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

Spero che questo sia utile, grazie.