2015-11-26 8 views
6

Я реализовал механизм группового чата на своем Android, где я создал группы и добавляю членов через REST API Plugin Openfire. отправка сообщений в ту же группу, не доставляющих сообщения всем членам той же группы. Пожалуйста, см. Мой журнал ошибок для того же самого, и предложите мне какое-либо решение относительно того же.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> 

Код:

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

Это возвращение Ошибка 406, не приемлемый

ответ

6

Я думаю, что вам не хватает реализации автоматического принимающему группы чат присоединиться запрос в коде ,

Ниже код работает для AMACK группового чата с использованием OpenFire

лица, вручающим судебными документами

1. Созданием XMPP Connection

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

2. Созданием Устойчивого 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. Отправка приглашения участникам поездки

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

4. Автоматический прием запроса райдера присоединиться к групповой чат

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. Отправка сообщения участников чата группы

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. Получение сообщение группового чата пользователями езды

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

Hi Mayur, Спасибо за вашу помощь, но я уже пробовал эти коды в своем приложении, но все же он не работает. Я отредактировал мой вопрос, пожалуйста, проверьте мой код и скажите мне, где я ошибаюсь. –

+0

Я также придерживаюсь той же ссылки, которую вы упомянули выше, https://sites.google.com/site/nextthoughtlabs/engineering/group-chat-using-smack-with-openfire-xmpp-server –

+0

в своем коде, вы используемый объект MUC, который вы создали, чтобы присоединиться к addInvitationListener. это неверно.Пожалуйста, используйте новый созданный объект MultiUserChat как определение на 4-м шаге в приглашении. Полученная функция –

0

Для того, чтобы отправить сообщение в к конференции вам нужно присоединиться его первым:

mMultiUserChat.join("yournickname"); 
+0

Я уже реализовал то же самое. Пожалуйста, предложите любую ошибку в моем коде. –

+0

В вашем коде я вижу вызов 'join' только при приглашении на получение. Пригласить отправителя также присоединиться – vitalyster

0

Его не работает в 4.1.9 версии, вы можете попробовать это:

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

и для отправки сообщения:

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

Надеюсь, это полезно, спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^