如何在订阅模式"两者"中添加名册

sno*_*way 17 java xmpp smack

我正在使用smack 3.1.0,当我添加一个名册时,我无法获得"两者"的订阅.谁能帮我?下面是我的代码:

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

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

Joe*_*and 41

重写@ mschonaker的答案要更清楚一些.

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

Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo('bob@example.com');
connection.sendPacket(subscribe);
Run Code Online (Sandbox Code Playgroud)

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

Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo('alice@example.com');
connection.sendPacket(subscribed);
Run Code Online (Sandbox Code Playgroud)

Bob也可能对Alice的存在感兴趣,所以他订阅了她:

Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo('alice@example.com');
connection.sendPacket(subscribe);
Run Code Online (Sandbox Code Playgroud)

Alice需要批准Bob的请求:

Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo('bob@example.com');
connection.sendPacket(subscribed);
Run Code Online (Sandbox Code Playgroud)

RFC6121的3.1节是当前最佳参考方法.


msc*_*ker 10

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

    Presence presence = new Presence(Presence.Type.subscribe);
    presence.setTo(jid);
    connection.sendPacket(presence);
Run Code Online (Sandbox Code Playgroud)

RFC6121的3.1节将为您提供语义细节.