2016-02-25 63 views
1

我發送一個智商的要求,但我沒有得到正確的result.The回智商是錯誤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

餘噸可能會有認證問題。請再次檢查您的配置文件。還有一種可能性,如果你的配置文件是正確的,那麼你需要檢查你在Ejbbered管理主頁上提供了適當的訪問規則。

轉到您的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

非常感謝,我明白了! –