如何在 iOS 中使用 XMPP 删除或退出特定群聊

Posted

技术标签:

【中文标题】如何在 iOS 中使用 XMPP 删除或退出特定群聊【英文标题】:How to delete or Exit Particular Groupchat using XMPP in iOS 【发布时间】:2017-02-02 12:41:02 【问题描述】:

目前我正在制作聊天应用程序,我需要删除特定的群聊。

要删除组,我尝试了 2 个解决方案,但都不起作用。

我应用的第一个解决方案如下:-

xmppRoomStorage = [[XMPPRoomMemoryStorage alloc] init];

XMPPJID *roomJid = [XMPPJID jidWithString:self.strnameofgroup];

_xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:xmppRoomStorage jid:roomJid];

[_xmppRoom removeDelegate:self delegateQueue:dispatch_get_main_queue()];

[_xmppRoom deactivate];

[_xmppRoom leaveRoom];

我应用的第二个解决方案如下:-

首先获取群聊中的所有成员,然后所有成员手动离开群聊,但它也不起作用。

NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/muc#admin"];

 NSXMLElement *item = [NSXMLElement elementWithName:@"item"];

 [item addAttributeWithName:@"affiliation" stringValue:@"member"];

 [item addAttributeWithName:@"jid" stringValue:@"jid to remove"];

 [query addChild:item];

XMPPIQ *RemoveUser = [[XMPPIQ alloc] initWithType:@"set" to:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",dialuser2,kSIPDomain]] elementID:@"some random id" child:query];

  [SharedAppDelegate.xmppStream sendElement:RemoveUser];

如果有任何删除特定组的解决方案,请帮助我。

谢谢

【问题讨论】:

【参考方案1】:

您的房间的配置是什么?它是一个持久的房间吗?

如果是,那么房间必须由主人销毁。

xmppRoom.destroyRoom()

否则,如果所有成员都离开,房间将被自动删除。

【讨论】:

感谢您的帮助,我的房间配置是持久的,所以我会尝试破坏房间。 [_xmppRoom destroyRoom];调用但不删除/退出组。如果可能,请给我删除/退出组的步骤。 它对我有用并经过测试。阅读此文档,xmpp.org/extensions/xep-0045.html#roomconfig。确保只有所有者可以破坏房间。您可以检查 xmppStreamDelegate 并查看是否有任何错误响应。 你好 dichen,我尝试了你的代码并成功删除了 Room,但现在我需要从 Room 中删除特定用户。为此,我尝试了很多代码,但没有奏效。如果您有任何信息或代码,请帮助我。谢谢 你能告诉我你做了什么来删除一个成员吗?说真的,你需要仔细阅读我上面提到的XEP-0045,这里是修改成员的标签,xmpp.org/extensions/xep-0045.html#modifymember。根据文档,管理员角色(默认为所有者)可以修改成员列表。可惜XmppFramework没有实现这个,你需要自己制作iq并发送给服务器。

以上是关于如何在 iOS 中使用 XMPP 删除或退出特定群聊的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中编辑和删除 XMPP 中的特定消息?

如何在 iOS 中通过 xmpp 删除单个聊天?

iOS 让用户退出群聊

IOS XMPP如何使用特定用户名和聊天进入下一个控制器

如何在ios中使用xmpp获取在线好友?

XMPP房间邀请好友IOS