我将 XMPPClient 与 ejjaberd 用于我的聊天应用程序(如 Whatsapp)。我想实现 XMPPPubsub 以在任何用户更改其个人资料图片时通知所有用户。
我的框架:https://github.com/robbiehanson/XMPPFramework
这是我的代码
初始化 XMPP 发布订阅
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"}];
我的问题是
-
当用户向我的订阅用户发布节点时,我没有收到下面委托上的事件
-(void)xmppPubSub:(XMPPubSub *)发送者 didReceiveMessage:(XMPPMessage *)消息
{
NSLog(@"消息%@",消息);
}
但是当我创建节点时,我在上面的委托上正确地获取了所有事件。我正在初始化 pubsub 后创建我的节点。因此,当我启动应用程序时,我会收到所有事件,因为我正在 Appdelegate 上初始化 pubsub。
每当我启动应用程序时,我也会不断收到相同的事件。例如,如果我要接收事件(个人资料图片已更改),那么我将在启动应用程序时在“didReceiveMessage”上获取它。在接下来的每次发射中我都会得到同样的结果。
当有人发布给我的订阅用户时(当用户更改个人资料图片时),而不是在启动应用程序时(创建节点时),我想在“didReceiveMessage”委托上获取事件。
- 如何获取所有被我订阅的用户。 ?
3.如何知道节点已经用我的号码创建了?
4.我想知道为什么我在创建节点时而不是在用户发布到节点时收到事件?
5.为什么每次创建节点时我都会一次又一次收到相同的事件?
请帮我 。提前致谢。