iOS XMPP PubSub在向我订阅的用户发布节点时未接收事件

我正在使用XMPPClient和ejjaberd进行聊天应用(如Whatsapp)。 我想实现XMPPPubsub,以便在任何一个用户更改他/她的个人资料图片时通知所有用户。

我的框架: https : //github.com/robbiehanson/XMPPFramework

这是我的代码

初始化XMPPPubsub

XMPPJID *serviceJID =[XMPPJID jidWithString:[NSString stringWithFormat:@"pubsub.%@",[[SharedClass sharedInstance] hostName]]]; _xmppPubSub = [[XMPPPubSub alloc]initWithServiceJID:serviceJID dispatchQueue:dispatch_get_main_queue()]; [_xmppPubSub addDelegate:self delegateQueue:dispatch_get_main_queue()]; [_xmppPubSub activate:xmppStream]; 

要创建节点:

 NSString *nodeName =[[NSUserDefaults standardUserDefaults] valueForKey:@"kmobileNo"]; // logged in user or current user [[[XmppClient sharedInstance] xmppPubSub] createNode:nodeName withOptions:@{@"pubsub#title":nodeName,@"pubsub#deliver_notifications":@"1",@"pubsub#subscribe":@"1",@"pubsub#presence_based_delivery":@"1",@"pubsub#publish_model":@"open",@"pubsub#access_model":@"open",@"pubsub#persist_items":@"1",@"pubsub#notify_sub":@"1",@"pubsub#deliver_payloads":@"1"}]; 

订阅用户

 for (Contact *obj in arrayUsers) { NSLog(@"elsa user %@",obj.phoneNumber); [[XmppClient sharedInstance].xmppPubSub subscribeToNode:obj.phoneNumber withJID:[XmppClient sharedInstance].xmppStream.myJID options: @{ @"pubsub#deliver" : @(YES), @"pubsub#digest" : @(YES), @"pubsub#include_body" : @(YES), @"pubsub#show-values" : @[ @"chat", @"online", @"away" ] }]; } 

要发布事件:

  NSString *nodeName =[[NSUserDefaults standardUserDefaults] valueForKey:@"kmobileNo"]; NSXMLElement *body = [NSXMLElement elementWithName:@"body"]; [body setStringValue:@"String to post"]; NSXMLElement *messageBody = [NSXMLElement elementWithName:@"message"]; [messageBody setXmlns:@"jabber:client"]; [messageBody addChild:body]; [[[XmppClient sharedInstance] xmppPubSub] publishToNode:nodeName entry:messageBody withItemID:nil options:@{@"pubsub#access_model":@"open"}]; 

我的问题是

  1. 当用户将节点发布到我订阅的用户时,我没有在下面的委托上接收事件

    – (void)xmppPubSub:(XMPPPubSub *)sender didReceiveMessage:(XMPPMessage *)message {NSLog(@“Message%@”,message); }

但是当我创建节点时,我正在上面的委托中正确地获取所有事件。 我在初始化pubsub后创建了我的节点。 因此,当我启动应用程序时,我正在获取所有活动因为我正在Appdelegate上初始化pubsub。

每当我启动应用程序时,我也会不断收到相同的事件。 例如,如果我要接收事件(配置文件图片已更改),那么我将在启动应用程序时获取“didReceiveMessage”。 下次每次发布时我都会得到同样的结果。

当有人发布给我订阅的用户时(当用户更改个人资料图片时),而不是在启动应用程序时(创建节点时),我想在“didReceiveMessage”委托上获取事件。

  1. 如何获得所有订阅我的用户。 ?

3.如何知道我的号码已创建节点?

4.我想知道为什么我在创建节点时而不是在用户发布到节点时获取事件?

5.为什么每当我创建节点时,我一次又一次地收到相同的事件? 请帮帮我 。 提前致谢。