如何在XMPP中接受或拒绝联系请求?

时间:2012-04-02 10:30:36

标签: xmpp smack

我使用smack API接受或拒绝发送给用户的联系请求。 在我呈现客户端之前(我的产品有一个通知系统,当我/她被添加到某个人的名单时我会向用户创建通知),我想知道订阅请求的状态。这样我就可以显示接受/拒绝按钮供用户采取行动,如果已经发生的行为将呈现出“你已经接受/拒绝”的消息。

据我所知,如果用户A收到了来自B的请求,并且A接受了请求,那么名册条目的订阅状态将变为FROM或BOTH。 但是,如何判断我是否拒绝了某个用户的订阅请求?

1 个答案:

答案 0 :(得分:0)

如果用户拒绝了您的添加好友请求,请收听。您需要注册PacketListener并过滤Presence类的数据包。在其中,您将获得一个取消订阅类型的在线数据包,该用户已拒绝该请求。

public class RequestListener implements PacketListener {
    @Override
    public void processPacket(Packet pack) {
        Presence pres = (Presence) pack;
        if (pres.getType() != null && 
                     pres.getType().equals(Presence.Type.unsubscribed)) {
            // user with jid pres.getFrom() rejected your request.
        }
    }
}

// somewhere in code to register the request listener after login
connection.addPacketListener(new RequestListener(), 
      new PacketTypeFilter(Presence.class));