问题
I am creating chatting application like Whatsapp.
I have successfully write the functionality of Text chat, Image, Audio, Video Transfer. Now I am creating the Multi user chat. After a long R&D I am asking this question. Please tell me what I am doing wrong in my code. I have followed all these tutorials but not luck
https://github.com/robbiehanson/XMPPFramework/issues/640
MUC How-to with XMPPFramework
Accepting chatroom invitation
Ok Below is my Code
1. After setting the STREAM successfully i set the XMPPMUC delegate for Invitation in goOnline Method
private func goOnline() {
let presence = XMPPPresence()
let domain = xmppStream.myJID.domain
if domain == "gmail.com" || domain == "gtalk.com" || domain == "talk.google.com"
// || domain == "chat.alqatech.com"
{
let priority = DDXMLElement.elementWithName("priority", stringValue: "24") as! DDXMLElement
presence.addChild(priority)
}
xmppMUC = XMPPMUC(dispatchQueue: dispatch_get_main_queue())
xmppMUC!.activate(self.xmppStream)
xmppMUC!.addDelegate(self, delegateQueue: dispatch_get_main_queue())
xmppStream.sendElement(presence)
}
2. Create a group
func createGroupChat(members:[String],groupName:String){
membersToInvite = members
xmppRoomMemoryStorage = XMPPRoomMemoryStorage()
let xmppJid = XMPPJID.jidWithString("\(groupName)@conference.chat.xxxxxx.com")
let xmppRoom = XMPPRoom.init(roomStorage: xmppRoomMemoryStorage, jid: xmppJid)
xmppRoom.activate(xmppStream)
xmppRoom.addDelegate(self, delegateQueue: dispatch_get_main_queue())
xmppRoom.joinRoomUsingNickname(xmppStream.myJID.user, history: nil)
}
3. Group Created Successfully
func xmppRoomDidCreate(sender: XMPPRoom!) {
print(sender)
}
4. xmppRoomDidJoin called successfully then here i invite users
func xmppRoomDidJoin(sender: XMPPRoom!) {
sender.fetchConfigurationForm()
for JID in membersToInvite! {
sender.editRoomPrivileges([XMPPRoom.itemWithAffiliation("member", jid: XMPPJID.jidWithString(JID))])
sender.inviteUser(XMPPJID.jidWithString(JID), withMessage: "THIS IS GROUP MESSAGE")
}
}
5. didFetchConfigurationForm called successfully
func xmppRoom(sender: XMPPRoom!, didFetchConfigurationForm configForm: DDXMLElement!)
{
let newConfig: DDXMLElement = configForm.copy() as! DDXMLElement
let fields: [AnyObject] = newConfig.elementsForName("field")
for field in fields {
let vars: String = field.attributeStringValueForName("var")
// Make Room Persistent
if (vars == "muc#roomconfig_persistentroom") {
field.removeChildAtIndex(0)
field.addChild(DDXMLElement(name: "value", stringValue : "1"))
}
}
sender.configureRoomUsingOptions(newConfig)
}
6. didReceiveInvitation it is not being called.
func xmppMUC(sender: XMPPMUC!, roomJID: XMPPJID!, didReceiveInvitation message: XMPPMessage!) {
print(roomJID)
xmppRoomMemoryStorage = XMPPRoomMemoryStorage()
let xmppRoom = XMPPRoom.init(roomStorage: xmppRoomMemoryStorage, jid: roomJID)
xmppRoom.activate(xmppStream)
xmppRoom.addDelegate(self, delegateQueue: dispatch_get_main_queue())
xmppRoom.joinRoomUsingNickname(xmppStream.myJID.user, history: nil)
}
回答1:
If you set a breakpoint in file XMPPMUC.m line 317
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
Is that method being called when an invitation is sent to your user? If so keep debugging and check if line 382 is being executed.
That line has this:
[multicastDelegate xmppMUC:self roomJID:roomJID didReceiveInvitation:message];
回答2:
Problem was in this code. Actually i was sending the bare id every time when i was inviting any user.
func xmppRoomDidJoin(sender: XMPPRoom!) {
sender.fetchConfigurationForm()
for JID in membersToInvite! {
sender.editRoomPrivileges([XMPPRoom.itemWithAffiliation("member", jid: XMPPJID.jidWithString(JID))])
sender.inviteUser(XMPPJID.jidWithString(JID), withMessage: "THIS IS GROUP MESSAGE")
}
}
BUT TO INVITE ANY USER YOU HAVE TO USE FULL ID.
For those who dont know
BareID = username@domain FullID = username@domain/resource
To resolve this
I hardcode the resource = APPNAME everywhere in JIDs in whole app.
来源:https://stackoverflow.com/questions/38895012/didreceiveinvitation-is-not-being-called-in-xmppframework-and-swift-2