XMPP在线订阅

时间:2012-10-18 06:30:45

标签: android xmpp subscription user-presence

在我的申请中,当我使用此代码向任何朋友发送请求时..

try {               
                roster.createEntry(idExtension, nickname, null);
                roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
                Presence subscribe = new Presence(Presence.Type.subscribe);
                subscribe.setTo(idExtension);               
                connection.sendPacket(subscribe);


                return true;
            } catch (XMPPException e) {
                System.err.println("Error in adding friend");
                return false;
            }

然后订阅在两个朋友名单中都显示“无”。

但它应该是“TO”和“FROM”。

但是如果对于同一个过程我使用这个代码 -

try {               
                roster.createEntry(idExtension, nickname, null);
                roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
                Presence subscribed = new Presence(Presence.Type.subscribed);
                subscribed.setTo(idExtension);              
                connection.sendPacket(subscribed);


                return true;
            } catch (XMPPException e) {
                System.err.println("Error in adding friend");
                return false;
            }

然后它给了我正确的结果,我应该在前面的案例中得到。

请告诉我为什么我在SUBSCRIBE模式下没有这样做。

由于

1 个答案:

答案 0 :(得分:3)

我猜你没有在Presence中获得类型的含义。

  

订阅 - 发件人希望订阅收件人   存在。

     

订阅 - 发件人已允许收件人   接受他们的存在。

因此,当您发送第一个请求时,您请求用户订阅他的状态事件,直到他不允许您这样做,订阅类型为无。

在第二种情况下,您允许用户订阅您的状态,即您允许他聆听您的状态,从而获得订阅类型。