2015-11-26 21 views
6

Tôi đã triển khai cơ chế Trò chuyện nhóm trong Android của mình, nơi tôi đã tạo nhóm và thêm thành viên thông qua Plugin API REST của Openfire. gửi tin nhắn đến cùng một nhóm không gửi tin nhắn đến tất cả các thành viên trong cùng một nhóm. Vui lòng xem Nhật ký lỗi của tôi cho cùng, và đề xuất cho tôi bất kỳ giải pháp nào giống nhau.Nhóm XMPP Trò chuyện 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(); 
     } 
    } 

Nó trở Lỗi 406, Không được chấp nhận

Trả lời

6

Tôi nghĩ rằng bạn đang thiếu việc thực hiện tự động chấp nhận Trò chuyện nhóm tham gia Yêu cầu trong mã của bạn .

Dưới đây đang làm việc cho AMACK nhóm chat sử dụng Openfire server

1. Tạo XMPP kết nối

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

2. Tạo 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. Gửi lời mời tham gia chuyến đi

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

4. Auto chấp nhận yêu cầu của RIDER tham gia nhắn nhóm 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. Gửi đến các thành viên trò chuyện nhóm

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. Tiếp nhận tin nhắn trò chuyện nhóm của người dùng đi xe

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

Xin chào Mayur, Cảm ơn sự giúp đỡ của bạn, nhưng tôi đã thử các mã này trong ứng dụng của mình, nhưng nó vẫn không hoạt động. Tôi đã chỉnh sửa câu hỏi của mình, vui lòng kiểm tra Mã của tôi và cho tôi biết tôi đang đi sai ở đâu. –

+0

Tôi cũng theo cùng một liên kết bạn đã đề cập đến mã ở trên, https://sites.google.com/site/nextthoughtlabs/engineering/group-chat-using-smack-with-openfire-xmpp-server –

+0

trong mã của bạn, bạn đối tượng được sử dụng của MUC mà bạn đã tạo nhóm để tham gia vào addInvitationListener. Sai rồi.Xin vui lòng, sử dụng đối tượng mới tạo của MultiUserChat như xác định trong bước 4 trong chức năng invitationReceived –

0

Để gửi tin nhắn trong trò chuyện nhóm bạn cần phải tham gia nó đầu tiên:

mMultiUserChat.join("yournickname"); 
+0

Tôi đã thực hiện như vậy. Vui lòng đề xuất bất kỳ lỗi nào trong mã của tôi. –

+0

Trong mã của bạn, tôi chỉ thấy cuộc gọi 'join' khi được mời. Mời người gửi cũng phải tham gia – vitalyster

0

nó không làm việc trong phiên bản 4.1.9, bạn có thể thử cái này:

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

và để gửi tin nhắn:

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

Hy vọng điều này hữu ích, cảm ơn.

Các vấn đề liên quan