Проблема с блокировкой пользователя в списке чатов с использованием сервера smack и open fire

Я хочу заблокировать конкретного друга из моего списка чатов с помощью XMPP . Код работает отлично. Исключения нет, но я не могу заблокировать пользователя. Я использую сервер открытого огня. Какие изменения я должен сделать на сервере?

Может у ребят есть идея?

Мой код:

 public void XMPPAddNewPrivacyList(Connection connection, String userName) { String listName = "newList"; // Create the list of PrivacyItem that will allow or // deny some privacy aspect List<PrivacyItem> privacyItems = new Vector<PrivacyItem>(); PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid.toString(), false, 1); item.setValue(userName); privacyItems.add(item); // Create the new list. try { PrivacyListManager privacyManager = new PrivacyListManager(connection); privacyManager = PrivacyListManager .getInstanceFor(connection); privacyManager.createPrivacyList(listName, privacyItems); } catch (XMPPException e) { System.out.println("PRIVACY_ERROR: " + e); } } 

попробуй это …

 public boolean blockFriend(String friendName) { PrivacyItem item=new PrivacyItem(PrivacyItem.Type.jid,friendName, false, 7); PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(connection); List<PrivacyItem> list=new ArrayList<PrivacyItem>(); list.add(item); try { privacyManager.updatePrivacyList(NEWLIST, list); privacyManager.setActiveListName(NEWLIST); return true; } catch (SmackException.NoResponseException |XMPPException.XMPPErrorException | SmackException.NotConnectedException e) { e.printStackTrace(); return false; } } 

И для разблокировки просто замените false на true в объекте privacyitem `

Я думаю, что проблема должна быть одной из следующих:

  • UserName неверно, например, «someuser@myxmppserver.com».
  • Вы не слушаете изменения конфиденциальности, я имею в виду, что вы не реализовали интерфейс PrivacyListListener.
  • В конструкторе PrivacyItem вы не должны использовать PrivacyRule.JID вместо PrivacyItem.Type.jid.toString () ?.
  • Если вы хотите заблокировать друга, вы не должны использовать updatePrivacyList вместо createPrivacyList.

Я рекомендую вам подробнее ознакомиться с документацией документации Smack

  // Here function for block user on xmpp public boolean blockUser(String userName) { String jid = userName@localhost String listName = "public"; // Create the list of PrivacyItem that will allow or // deny some privacy aspect //ArrayList privacyItems = new ArrayList(); List<PrivacyItem> privacyItems = new Vector<PrivacyItem>(); PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid, jid, false, 1); // item.setValue(userName); item.setFilterIQ(false); item.setFilterMessage(false); item.setFilterPresenceIn(false); item.setFilterPresenceOut(false); privacyItems.add(item); // Get the privacy manager for the current connection. // Create the new list. PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(XMPPUtils.INSTANCE.connection); try { privacyManager.updatePrivacyList(listName, privacyItems); privacyManager.setActiveListName(listName); return true; } catch (Exception e) { Log.e("PRIVACY_ERROR: ", " " + e.toString()); e.printStackTrace(); } return false; } 

Конфиденциальность – это метод, позволяющий пользователям блокировать связь с другими пользователями. В XMPP это делается путем управления списками конфиденциальности.

1 – Чтобы добавить новый список на сервер, клиент МОЖЕТ реализовать что-то вроде:

 // Create a privacy manager for the current connection._ PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection); // Retrieve server privacy lists_ PrivacyList[] lists = privacyManager.getPrivacyLists(); 

2 – Чтобы добавить новый список на сервер, клиент МОЖЕТ реализовать что-то вроде:


 // Set the name of the list_ String listName = "newList"; // Create the list of PrivacyItem that will allow or deny some privacy aspect_ String user = "tybalt@example.com"; String groupName = "enemies"; ArrayList privacyItems = new ArrayList(); PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid, user, true, 1); privacyItems.add(item); item = new PrivacyItem(PrivacyItem.Type.subscription, PrivacyItem.SUBSCRIPTION_BOTH, true, 2); privacyItems.add(item); item = new PrivacyItem(PrivacyItem.Type.group, groupName, false, 3); item.setFilterMessage(true); privacyItems.add(item); // Get the privacy manager for the current connection._ PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection); // Create the new list._ privacyManager.createPrivacyList(listName, privacyItems);