iOS XMPP 从不接收任何好友/名册请求

Posted

技术标签:

【中文标题】iOS XMPP 从不接收任何好友/名册请求【英文标题】:iOS XMPP never receives any friend / roster requests 【发布时间】:2016-04-17 12:06:00 【问题描述】:

设置

我正在使用此代码发送好友/名册请求:

[[[XMPPController sharedObject] roster] addUser:[XMPPJID jidWithString:[user stringByAppendingString:@"@server.com"]] withNickname:nil];

我可以确认在 ejabberd Web Admin 控制面板中发送了请求。此外,请求在流委托方法中返回:

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq

作为确认。

我在这里阅读了多个问题,请求应在委托方法中处理:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence

或者

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

问题

问题是一旦发送请求,这些方法都不会被调用。

测试于

iPhone 5 (ios 9.3.1) iPhone 模拟器 (iOS 9.3)

从任一设备发送都不会成功。

注意事项

我可以确认好友请求已发送,因为它在 ejabberd 管理面板中可见。此外,如果从管理面板添加用户,则客户端不会发生任何事情(即应该接收请求的用户。)。

【问题讨论】:

【参考方案1】:

没有调用方法- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence ,因为您没有发送任何XMPPPresence

【讨论】:

我在- (void)xmppStreamDidConnect:(XMPPStream *)sender 中使用XMPPPresence *presence = [XMPPPresence presence]; [self.stream sendElement:presence]; 发送出席信息。这是正确的做法吗? 发送好友请求时应该发送出席信息!它应该可以工作 我尝试在发送好友请求之前和之后(以及两者)都放置代码,但我仍然没有收到对方的回应 如果你想接收一个出席对象,你的服务器也必须发送一个出席对象 如何检查/启用它?

以上是关于iOS XMPP 从不接收任何好友/名册请求的主要内容,如果未能解决你的问题,请参考以下文章

XMPPFramework - 如何接收名册的存在信息以及名册列表?

拒绝 Xmpp 中的请求 - 从名册中删除条目

在 Xmpp/Openfire 中从名册中删除一个朋友

使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态

如何在 XMPP 中阻止匿名用户

XMPP:如何查询特定名册的存在