【问题标题】:XMPPFramework - Auto Accept of Presence Subscription RequestsXMPPFramework - 自动接受状态订阅请求
【发布时间】:2014-03-17 22:22:30
【问题描述】:

我认为标题已经足够说明问题,但故事如下:

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

根据开发者 cmets 在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,但解决方案似乎并不相关!

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

【问题讨论】:

  • 你试过使用'revokePresencePermissionFromUser'吗?
  • 不!我应该吗?我该怎么做?我是 XMPPFramework 的新手
  • 而不是 acceptPresence 只是尝试 revokePresencePermissionFromUser 看看它是否有效
  • 试图这样做。还是不行:(
  • 你怎么知道它不工作?你可以记录一下并提供详细信息吗?

标签: ios xmpp xmppframework user-presence


【解决方案1】:

你做错了。您不必在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];
}

还有 roster 对象要知道谁是它的委托人(实现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];
}

祝你好运,很抱歉发了这么长的帖子。

【讨论】:

  • 那么,存在节仅在 XMPPRoster 中处理?
  • @AsimRazaKhan 我记不太清了,但看起来是这样
猜你喜欢
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2011-06-03
  • 2012-03-01
相关资源
最近更新 更多