2013-05-30 98 views
0

这是我使用的代码,用于发送好友请求工作正常XMPP接受好友请求

XMPPJID *newBuddy = [XMPPJID jidWithString:userName]; 
[[self appDelegate].xmppRoster addUser:newBuddy withNickname:nil]; 

这是我使用用于接受好友请求工作正常的代码。

XMPPJID *newBuddy = [XMPPJID jidWithString:ipAddress]; 
    [[self appDelegate].xmppRoster acceptPresenceSubscriptionRequestFrom:newBuddy andAddToRoster:YES]; 

问题是,无论何时再次接受请求,我从订阅接受的用户那里收到这个问题。如何停止双向认购XMPP帮我

回答

2
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence 
{ 
    DDLogVerbose(@"%@: %@ - %@", THIS_FILE, THIS_METHOD, [presence fromStr]); 

    NSString *presenceType = [presence type];   // online/offline 
    NSString *myUsername = [[sender myJID] user]; 
    NSString *presenceFromUser = [[presence from] user]; 
    // 
    //new request from unknow user 
    if (![presenceFromUser isEqualToString:myUsername]) 
    { 
     if ([presenceType isEqualToString:@"subscribe"]) 
     { 
      //[_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]]; 
      NSLog(@"presence user wants to subscribe %@",presenceFromUser); 
      tempPresence = [[XMPPPresence alloc] init]; 
      tempPresence = presence; 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"New request From:" message:presenceFromUser delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil]; 
      [alert show]; 
     } 
    } 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //accept request 
    if(buttonIndex==1){ 
     [xmppRoster subscribePresenceToUser:[tempPresence from]]; 
    } 
} 
1
- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence { 
    XMPPUserCoreDataStorageObject *user = [self.xmppRosterStorage 
              userForJID:[presence from] 
              xmppStream:self.xmppStream 
              managedObjectContext:[self managedObjectContext_roster]]; 
    DDLogVerbose(@"didReceivePresenceSubscriptionRequest from user %@ ", 
       user.jidStr); [self.xmppRoster 
           acceptPresenceSubscriptionRequestFrom:[presence from] 
           andAddToRoster:YES]; 
} 
0

终于让我找到了备选答案此通过搜索使用自己的用户名和所有的用户。

1.对于与Gmail ID [email protected]与特定名称使用以下用户名

2.对于特定用户的每一个接触。

3.从开放式服务器获取所有用户只需在搜索字符串中放置“*”。

//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" ]]; 


- (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,For all user put @"*" (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); 

}