我认为这个标题已经足够说明了,但这就是故事:
我是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 iphone或Xmpp Accepting buddy request,但解决方案似乎并不相关!
任何建议都非常感谢。 感谢。
答案 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];
}
祝你好运,对不起,很长一段时间。