我可以向用户发送消息,这意味着我有一个工作且经过身份验证的xmppStream。
但是我无法发送和接收来自服务器的确认。我想知道服务器成功收到了哪条消息。我用Google搜索,发现应该为此实施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:@"testuser@myxmppserver.com"];
[e addAttributeWithName:@"from" stringValue:@"testuser2@myxmppserver.com"];
[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");
}
但仍然没有打印出来。 请帮忙。另外,我怎么知道服务器何时收到发送的消息。
如果有人想知道我方的任何其他代码,请告诉我。
答案 0 :(得分:1)
您可以使用xmppStreamManagement中的函数发送请求并获取收到的ID:
[xmppStreamManagement requestAck];
和
- (void)xmppStreamManagement:(XMPPStreamManagement *)sender wasEnabled:(NSXMLElement *)enabled
- (void)xmppStreamManagement:(XMPPStreamManagement *)sender didReceiveAckForStanzaIds:(NSArray *)stanzaIds
确保通过以下方式启用流管理:
[self.xmppStreamManagement enableStreamManagementWithResumption:YES maxTimeout:0];