XMPPFramework - 自动接受在线订阅请求

时间:2014-02-18 09:22:12

标签: ios xmpp xmppframework user-presence

我认为这个标题已经足够说明了,但这就是故事:

我是iOS的XMPPFramework的新用户,我想将我的客户端设置为自动接受它收到的任何订阅请求。这样,其他客户端可以在请求时查看此客户端的状态。

根据开发人员评论在XMPPRoster.h文件中,有一种在收到订阅请求时调用的方法:

/**
 * Sent when a presence subscription request is received.
 * That is, another user has added you to their roster,
 * and is requesting permission to receive presence broadcasts that you send.
 * 
 * The entire presence packet is provided for proper extensibility.
 * You can use [presence from] to get the JID of the user who sent the request.
 * 
 * The methods acceptPresenceSubscriptionRequestFrom: and rejectPresenceSubscriptionRequestFrom: can
 * be used to respond to the request.
**/
- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence;

但它未在XMPPRoster.m中实施。所以我按如下方式实现了它:

- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence
{
    [self acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
}

由于我是XMPPFramework的新手,我不知道如果我做错了什么,但我仍然无法让这个客户出现在其他客户端。

我也看到类似的主题,如Accept buddy request in xmpp client iphoneXmpp Accepting buddy request,但解决方案似乎并不相关!

任何建议都非常感谢。 感谢。

1 个答案:

答案 0 :(得分:4)

你做错了。您不必在XMPPRoster.m或其他库文件中实现某些功能。 这个功能

- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence;

是xmpp客户端收到状态订阅请求时触发的回调。如果要在此回调触发时执行某些代码,则必须实现名为XMPPRosterDelegate的协议。 Protocol是Java和C#中的接口,或者像C ++中的抽象类。你必须有一个继承自这个XMPPRosterDelegate的类,并最终实现这个函数(如果你愿意,还可以实现其他函数)。

如果您想自动接受所有请求,您必须实现协议功能实现,如下所示:

-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{
    [sender acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
}

另外,名单对象必须知道谁是其委托(实现XMPPRosterDelegate的对象),因为如果你想向某人发送消息,你必须知道两件事:目标和选择器。选择器在协议中指定。目标是delegate属性。您必须在初始化期间设置名册的委托。在我的代码中我添加了行

[xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
行前

[xmppRoster            activate:xmppStream];

当然self实现了XMPPRosterDelegate,尤其是这段代码

-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{
    [sender acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
}

祝你好运,对不起,很长一段时间。