我正在为iOS开发基于XMPP的聊天应用程序。该应用程序的一个功能是我需要阻止我的公鸡中的一些用户。在XMPP框架中是否有任何可用的方法?如果没有,是否有一些工作可以做到这一点?
也可以帮助我使用XMPP将图像从一个用户发送到另一个用户吗?
答案 0 :(得分:4)
您可能需要考虑许多事项:
可能您的用户订阅了联系人的在线状态,反之亦然。他将取消订阅该联系人的存在(因此他将不再通过发送来接收来自他的在线通知)
<presence to='contact@example.com' type='unsubscribe'/>
他将通过发送:
撤销订阅他自己在线的信息<presence to='contact@example.com' type='unsubscribed'/>
最后,您可以从名单中删除该项目。
<iq from='user@example.com/home' type='set' id='roster'>
<query xmlns='jabber:iq:roster'>
<item jid='contact@example.com' subscription='remove'/>
</query>
</iq>
事实上,如果你发送上面的节,即如果你想取消两个订阅,你不需要发送存在节,它们将由服务器处理。
最后,您现在可以通过jabber:iq:privacy
API阻止与用户的进一步互动。详细解释了here。
一般存在/名册管理在相同的rfc中解释,可能是最好的here。
答案 1 :(得分:1)
请检查此代码以实现用户阻止:
-(void)blockUser{
XMPPIQ *iq = [[XMPPIQ alloc]init];
NSString *from = [NSString stringWithFormat:@"from@mail.com/resources"];
[iq addAttributeWithName:@"from" stringValue: from];
[iq addAttributeWithName:@"type" stringValue:@"set"];
NSXMLElement *block =[NSXMLElement elementWithName:@"block" xmlns:@"urn:xmpp:blocking"];
NSXMLElement *item = [NSXMLElement elementWithName:@"item"];
[item addAttributeWithName:@"jid" stringValue:@"to@mail.com/resources"];
[block addChild:item];
[iq addChild:block];
[xmppStream sendElement:iq];
}
答案 2 :(得分:-1)
- (void)setupXMPPPrivacy
{
NSLog((@"%s [Line %d] "), __PRETTY_FUNCTION__, __LINE__);
//Init XMPPPrivacy List
//xmppPrivacy = [[XMPPPrivacy alloc] init];
xmppPrivacy = [[XMPPPrivacy alloc] initWithDispatchQueue:dispatch_get_main_queue()];
//Activate xmpp modules
[xmppPrivacy activate:[[self appDelegate] xmppStream]];
//Delegate XMPPPrivacy
[xmppPrivacy addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xmppPrivacy retrieveListWithName :@"Block_List"];
}
-(void)privacyblock
{
[xmppPrivacy retrieveListWithName:@"Block_List"];
[xmppPrivacy setActiveListName:@"Block_List"];
NSXMLElement *privacyElement = [XMPPPrivacy privacyItemWithType:@"jid" value:xmpp_jid action:@"deny" order:1];
[XMPPPrivacy blockIQs:privacyElement];
[XMPPPrivacy blockMessages:privacyElement];
[XMPPPrivacy blockPresenceIn:privacyElement];
[XMPPPrivacy blockPresenceOut:privacyElement];
NSLog(@"-------> PRIVACY ELEMENT: %@", privacyElement);
[arrayPrivacy addObject:privacyElement];
[xmppPrivacy setListWithName:@"Block_List" items:arrayPrivacy];
}