Delete a Friend from Roster in Xmpp/Openfire

2019-04-16 18:27发布

问题:

In my chat application. I am using smack library , with the help of Subscription Management I have done the part of adding a friend to the Roster of a particular person.

Now I want that when some person denies the friend request, I send a UNSUBSCRIBE PACKET to the other user for the same, the friend is not deleted from the roster of the other user. It simply shows NONE subscription.

CODE:

Presence unsubscribe = new Presence(Presence.Type.unsubscribe);
                unsubscribe.setTo(ABC@ABC.COM);             
                connection.sendPacket(unsubscribe);

How can I delete the user from the Roster of the friend. I can do it from openfire portal but don't know how to do it from code.

回答1:

From the Smack forum, this code might work:

RosterPacket packet = new RosterPacket();
packet.setType(IQ.Type.SET);
RosterPacket.Item item  = new RosterPacket.Item("ABC@ABC.COM", null);
item.setItemType(RosterPacket.ItemType.REMOVE);
packet.addRosterItem(item);
connection.sendPacket(packet);


回答2:

This code worked for me

    if(selectedRoster != null) {
        Presence presence = new Presence(Presence.Type.unsubscribe);
        presence.setTo(selectedRoster.getUser());
        presence.setStatus("Offline");
        presence.setShow("unavailable");
        ConnectionController.GetInstance(this).getXMPPConnection().sendPacket(presence);

        try {
            roster.removeEntry(selectedRoster);
        } catch (XMPPException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }