如何使用订阅模式“两者”添加花名册

2022-09-02 19:17:50

我正在使用smack 3.1.0,当我添加花名册时,我无法订阅“两者”。谁能帮我?下面是我的代码:

Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
Roster roster = connection.getRoster();
roster.createEntry("buddy@test.com","me",null)

代码执行后,我在openfire中观察到订阅是“to”


答案 1

重写@mschonaker的答案更清晰一些。

两个用户都需要相互订阅接受他们收到的订阅请求。让我们称他们为爱丽丝和鲍勃。Alice 向 Bob 发送订阅请求:

Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo('bob@example.com');
connection.sendPacket(subscribe);

当 Bob 收到请求时,他会批准它:

Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo('alice@example.com');
connection.sendPacket(subscribed);

鲍勃也可能对爱丽丝的存在感兴趣,所以他订阅了她:

Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo('alice@example.com');
connection.sendPacket(subscribe);

爱丽丝需要批准鲍勃的请求:

Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo('bob@example.com');
connection.sendPacket(subscribed);

RFC6121 的第 3.1 节是当前有关其工作原理的最佳参考。


答案 2

两个用户都需要相互订阅。通过发送状态订阅节。在 Smack 中:

    Presence presence = new Presence(Presence.Type.subscribe);
    presence.setTo(jid);
    connection.sendPacket(presence);

RFC6121 的第 3.1 节将为您提供语义详细信息。


推荐