Issue in blocking user in chatlist using smack and open fire server

后端 未结 4 1924
小蘑菇
小蘑菇 2021-02-15 17:51

I want to block a particular friend from my chat list with XMPP. code works fine. There is no Exception, but I am not able to block a user. I\'m using open fire ser

相关标签:
4条回答
  • 2021-02-15 18:12

    try this ...

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

    and for unblock just replace false with true in object of privacyitem `

    0 讨论(0)
  • 2021-02-15 18:12

    Privacy is a method for users to block communications from particular other users. In XMPP this is done by managing one's privacy lists.

    1 - In order to add a new list in the server, the client MAY implement something like:

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

    2 - In order to add a new list in the server, the client MAY implement something like:

     

    // 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);
    

    0 讨论(0)
  • 2021-02-15 18:19

    I think that the problem should be one of the following:

    • userName isn't correct, for example "someuser@myxmppserver.com".
    • You are not listening for privacy changes I mean, you didn't implement the PrivacyListListener interface.
    • In the PrivacyItem constructor don't you should use PrivacyRule.JID instead PrivacyItem.Type.jid.toString()?.
    • If you wanna block a friend don't you should use updatePrivacyList instead createPrivacyList.

    I reccomend you take a closer look to the documentation Smack documentation

    0 讨论(0)
  • 2021-02-15 18:30
        // 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;
    }
    
    0 讨论(0)
提交回复
热议问题