2016-02-25 4 views
1

я отправить запрос на IQ, но я не получаю правильный result.The назад IQ ошибкаXMPP не удается получить Реестры IOS

<error code="403" type="auth"><forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error>

Мой код:

- (void)queryRoster { 
 
    NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"]; 
 
    NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"]; 
 
    XMPPJID *myJID = self.stream.myJID; 
 
    [iq addAttributeWithName:@"from" stringValue:@"[email protected]"]; 
 
    [iq addAttributeWithName:@"to" stringValue:@"127.0.0.1"]; 
 
    [iq addAttributeWithName:@"id" stringValue:@"1993"]; 
 
    [iq addAttributeWithName:@"type" stringValue:@"get"]; 
 
    [iq addChild:query]; 
 
    [self.stream sendElement:iq]; 
 
}

ответ

-1

I T hink может возникнуть проблема с аутентификацией. проверьте конфигурационный файл еще раз. и еще одна возможность, если ваш файл конфигурации верен, вам необходимо проверить, что вы предоставили правильные правила доступа на главной странице администратора Ejabbered.

Перейти на домашнюю страницу администратора Ejabbered -> Вход с учетными данными администратора -> в меню слева вы найдете вкладку «Правила доступа».

Дополнительную информацию о правилах доступа вы найдете на следующей странице.

Access Rules for Ejabbered XMPP

После проверил все детали попробуйте следующий код: -

- (void)FetchFriends 
{ 
    NSError *error = [[NSError alloc] init]; 
    NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='jabber:iq:roster'/>"error:&error]; 
    NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"]; 
[iq addAttributeWithName:@"type" stringValue:@"get"]; 
    [iq addAttributeWithName:@"id" stringValue:@"ID_NAME"]; 
    [iq addAttributeWithName:@"from" stringValue:@"[email protected]***.com"]; // Try with name in-place of ip like 127.0.0.1 
[iq addChild:query]; 
    [xmppStream sendElement:iq]; 
} 

И проверить ответ сервера в методе делегата

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq 
{ 
    NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"]; 
    if (queryElement) 
    { 
     NSArray *itemElements = [queryElement elementsForName: @"item"]; 
     for (int i=0; i<[itemElements count]; i++) 
     { 
      NSLog(@"Friend: %@",[[itemElements[i] attributeForName:@"jid"]stringValue]); 

     } 
    } 
    return NO; 
} 
+0

Спасибо, но я использую сервер openfire –

0

Чтобы получить у вас есть список, в соответствии с RFC 6121 §2.1.3 , вам нужно отправить iq на свой собственный JID. В коде вы отправляете iq на JID сервера.

- (void)queryRoster { 
    NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"]; 
    NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"]; 
    XMPPJID *myJID = self.stream.myJID; 
    // Don't add a "from" attribute, it is not necessary 
    [iq addAttributeWithName:@"to" stringValue:@"[email protected]"]; 
    // Probably better: 
    // [iq addAttributeWithName:@"to" stringValue:[myJID bare]]; 
    [iq addAttributeWithName:@"id" stringValue:@"1993"]; 
    [iq addAttributeWithName:@"type" stringValue:@"get"]; 
    [iq addChild:query]; 
    [self.stream sendElement:iq]; 
} 

Извлечение реестров для других не допускается, отсюда и «недопустимая» ошибка.

+0

Спасибо, я понял! –

Смежные вопросы