Search code examples
iosobjective-copenfirexmppframework

iOS XMPP Framework with Openfire Server get all registered users


for my IOS Chatting Application i am using Openfire Server, i am retrieving particular user friends list but now i want to retrieve all registered users from Openfire Server. Please help me out and thanks in advance.


Solution

  • Finally I found the alternative answer for this by searching users using their username:

    1.for every contact i am adding emailid username@domainname like this.
    2.in the place searchstring if we use domainname then we will get all registered users.

    //Request
    - (void)getDetailsofRegisteredUser {
        
        //To Search Peticular User either by using their name, email or username
        NSString *userBare1  = [[[[self appDelegate] xmppStream] myJID] bare];
        NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
        [query addAttributeWithName:@"xmlns" stringValue:@"jabber:iq:search"];
        
        NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"jabber:x:data"];
        [x addAttributeWithName:@"type" stringValue:@"submit"];
        
        NSXMLElement *formType = [NSXMLElement elementWithName:@"field"];
        [formType addAttributeWithName:@"type" stringValue:@"hidden"];
        [formType addAttributeWithName:@"var" stringValue:@"FORM_TYPE"];
        [formType addChild:[NSXMLElement elementWithName:@"value" stringValue:@"jabber:iq:search" ]];
        
        NSXMLElement *userName = [NSXMLElement elementWithName:@"field"];
        [userName addAttributeWithName:@"var" stringValue:@"Username"];
        [userName addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1" ]];
        
        NSXMLElement *name = [NSXMLElement elementWithName:@"field"];
        [name addAttributeWithName:@"var" stringValue:@"Name"];
        [name addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
        
        NSXMLElement *email = [NSXMLElement elementWithName:@"field"];
        [email addAttributeWithName:@"var" stringValue:@"Email"];
        [email addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
        
        //Here in the place of SearchString we have to provide registered user name or emailid or username(if it matches in Server it provide registered user details otherwise Server provides response as empty)
        NSXMLElement *search = [NSXMLElement elementWithName:@"field"];
        [search addAttributeWithName:@"var" stringValue:@"search"];
        [search addChild:[NSXMLElement elementWithName:@"value" stringValue:[NSString stringWithFormat:@"%@", SearchString]]];
        
        [x addChild:formType];
        [x addChild:userName];
        [x addChild:name];
        [x addChild:email];
        [x addChild:search];
        [query addChild:x];
        
        NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
        [iq addAttributeWithName:@"type" stringValue:@"set"];
        [iq addAttributeWithName:@"id" stringValue:@"searchByUserName"];
        [iq addAttributeWithName:@"to" stringValue:[NSString stringWithFormat:@"search.%@",DOMAIN_NAME]];
        [iq addAttributeWithName:@"from" stringValue:userBare1];
        [iq addChild:query];
        [[[self appDelegate] xmppStream] sendElement:iq];
        
    }
    
    //We will get response here
    
    - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
    {
        
        DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
        NSLog(@"searched format %@", iq);
    
    }