如何在XMPP中发现联系人请求被接受或拒绝



我正在使用smack API接受或拒绝发送给用户的联系请求。在我提交客户端之前(我的产品有一个通知系统,当用户被添加到某人的名册中时,我会创建一个通知给他/她),我想知道订阅请求的状态。这样,我就可以显示接受/拒绝按钮供用户操作,如果操作已经发生,则会显示"您已经接受/拒绝"之类的消息。

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

如果用户拒绝了您的添加好友请求,则侦听。您需要注册一个PacketListener来过滤Presence类的数据包。在其中,您将收到一个类型为unsubscribed的存在信息包,该用户已拒绝该请求。

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

相关内容

最新更新