我是 XMPP 的新手,我已经实现了 ejabberd。我的本地主机名是
'Orange.local'
有三个用户。一个从我的模拟器登录为 admin@orange.local,第二个 mihir@orange.local 来自 iMessanger。
我正在创建一个组作为
@IBAction func CreateGroupBtn(sender: UIButton)
{
var roomJID = XMPPJID.jidWithString("testRoom@conference.orange.local")
var roomMemoryStorage = XMPPRoomMemoryStorage()
var xmppRoom = XMPPRoom(roomStorage: roomMemoryStorage, jid: roomJID, dispatchQueue: dispatch_get_main_queue())
xmppRoom.activate(xmppStream())
xmppRoom.addDelegate(self, delegateQueue: dispatch_get_main_queue())
xmppRoom.joinRoomUsingNickname("admin", history: nil);
}
func xmppRoomDidCreate(sender: XMPPRoom!)
{
println("room created \(sender.description)");
}
func xmppRoomDidJoin(sender: XMPPRoom!) {
println("romm joined")
sender.fetchConfigurationForm()
sender.configureRoomUsingOptions(nil)
sender.fetchMembersList();
sender.sendMessageWithBody("null");
var strInvitedUserName = XMPPJID.jidWithString("mihir@orange.local");
sender.inviteUser(strInvitedUserName, withMessage: "greetings");
}
房间已创建,我可以在群组中与 mihir@orange.local 聊天。 现在我想获取 admin@orange.local 的所有组名,我的意思是 admin@orange.local 是组成员的所有组(房间)。
我正在应用此代码来获取群组列表:
override func viewDidLoad()
{
super.viewDidLoad()
var server = "conference.orange.local";
var id = xmppStream().generateUUID();
var serverJID = XMPPJID.jidWithString(server)
var iq = XMPPIQ.iqWithType("get", to: serverJID, elementID: id)
iq.addAttributeWithName("from", stringValue: "admin@orange.local")
var query = DDXMLElement.elementWithName("query") as! DDXMLElement;
query.addAttributeWithName("xmlns", stringValue: "http://jabber.org/protocol/disco#items" )
iq.addChild(query);
xmppStream().addDelegate(self, delegateQueue: dispatch_get_main_queue())
xmppStream().sendElement(iq);
}
但我收到这样的花名册回复:
<iq xmlns="jabber:client" from="admin@orange.local"
to="admin@orange.local/35441594471443421711351344"
id="3F9B0234-0233-4DF0-9174-34CC82FF6B70" type="result">
<query xmlns="jabber:iq:roster">
<item subscription="both" jid="mihir@orange.local">
<group>Buddies</group>
</item>
<item subscription="both" jid="kalpesh@orange.local">
</item>
</query>
</iq>
我的第二个问题是,当我获取所有组成员时,它返回空数组这是代码:
func xmppRoom(sender: XMPPRoom!, didFetchMembersList items: [AnyObject]!) {
println("members= \(items)");
}
请帮助我获取所有组和特定组的成员。 提前致谢,抱歉我的英语不好。
最佳答案
XMPP MUC 中的成员列表不是当前可用用户的列表,它只是房间管理员用于区分房间权限/角色/从属关系的“访问控制列表”之一:房间所有者可以授予“成员”、“管理员” ”,特定 JID 的“所有者”特权,禁止他与“弃儿”从属关系等。
您需要跟踪发送到 session jid 的 presence
数据包,以便获得实际的用户列表:XMPPRoom
接口(interface)有 xmppRoomDidJoin
和 xmppRoomDidLeave
方法。
关于ios - 获取花名册而不是组列表 XMPP iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817300/