iOS 中的 XMPPStreamManagement 无法发送/接收确认和节 id

2024-01-06

我能够向用户发送消息,这意味着我有一个正在工作且经过身份验证的 xmppStream。

但我无法发送和接收来自服务器的确认。我想知道服务器成功接收了哪条消息。我用谷歌搜索发现应该为此实现 XEP-0198。我使用 ejabberd 作为 XMPP 服务器,它支持 XEP-0198。

我尝试过,但我不知道我这样做是否正确。

首先,我包含了头文件并添加了 XMPPStreamManagementDelegate。

#import "XMPPStreamManagement.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate,XMPPStreamManagementDelegate>

在实现文件中,这是我定义流的方式。

XMPPStream *xmppS = [[XMPPStream alloc] init];
[xmppS addDelegate:self delegateQueue:dispatch_get_main_queue()];

XMPPStreamManagement  *xsm = [[XMPPStreamManagement alloc] init];
[xsm addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xsm activate:xmppS];

之后我与服务器连接。连接成功后,我发送一个启用节。

NSXMLElement *enable = [NSXMLElement elementWithName:@"enable" xmlns:@"urn:xmpp:sm:3"];
[xsm.xmppStream sendElement:enable];

然后我发消息

NSXMLElement *a = [NSXMLElement elementWithName:@"request" xmlns:@"urn:xmpp:receipts"];
XMPPElement *e = [[XMPPElement alloc] initWithName:@"message"];
[e addAttributeWithName:@"id" stringValue:@"123456"];
[e addAttributeWithName:@"type" stringValue:@"chat"];
[e addAttributeWithName:@"to" stringValue:@"[email protected] /cdn-cgi/l/email-protection"];
[e addAttributeWithName:@"from" stringValue:@"[email protected] /cdn-cgi/l/email-protection"];
[e addChild:a];
[xsm.xmppStream sendElement:e];

测试用户收到消息,测试用户 2 收到收到的节。

<received xmlns="urn:xmpp:receipts" id="123456"/>

我的问题是,如果我发送以下节,我不会收到任何消息。

NSXMLElement *r = [NSXMLElement elementWithName:@"r"];
[xsm.xmppStream sendElement:r];

我已经实现了以下功能

-(void)xmppStreamManagementDidRequestAck:(XMPPStreamManagement *)sender
{
    NSLog(@"ACK");
}

但仍然没有打印任何内容。 请帮忙。另外,我如何知道服务器何时收到发送的消息。

如果有人想了解我这边代码的任何其他部分,请告诉我。


您可以使用 xmppStreamManagement 中的函数发送请求并获取收到的 id:

[xmppStreamManagement requestAck];

and

- (void)xmppStreamManagement:(XMPPStreamManagement *)sender wasEnabled:(NSXMLElement *)enabled 

- (void)xmppStreamManagement:(XMPPStreamManagement *)sender didReceiveAckForStanzaIds:(NSArray *)stanzaIds

确保通过以下方式启用流管理:

[self.xmppStreamManagement enableStreamManagementWithResumption:YES maxTimeout:0];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 中的 XMPPStreamManagement 无法发送/接收确认和节 id 的相关文章

随机推荐