2012-03-14 73 views
3

我正在爲iphone開發一個xmpp客戶端。我能夠發送和接收消息。我想自動接受好友請求,而不會提示用戶。我將在哪些功能中收到請求。請給我任何提示。在xmpp客戶端接受好友請求iphone

在此先感謝。

回答

7

好的,我有一個完美的答案給你!

下面是代碼:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence { 

    // a buddy went offline/online 

    NSString *presenceType = [presence type];   // online/offline 
    NSString *myUsername = [[sender myJID] user]; 
    NSString *presenceFromUser = [[presence from] user]; 

    if (![presenceFromUser isEqualToString:myUsername]) { 

     if ([presenceType isEqualToString:@"available"]) { 

      [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]]; 
       NSLog(@"presence user is %@",presenceFromUser); 

     } 

     else if ([presenceType isEqualToString:@"unavailable"]) { 

      [_chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]]; 
      NSLog(@"presence user is invisible %@",presenceFromUser); 

     } 
     else if ([presenceType isEqualToString:@"subscribe"]) { 

      [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]]; 
         NSLog(@"presence user wants to subscribe %@",presenceFromUser); 

     } 

    } 
} 

我爲你提供了DidReceivePresence方法,爲您更好地瞭解完整的代碼。

現在讓我用代碼解釋你。如果你注意到else條件,我正在比較我們接收到的值(元素)。因此,當我將字符串作爲Subscribe(當用戶發送好友請求時)時,您只需要將該特定用戶添加到您的tableview好友列表中。

您可以從「presenceFromUser」獲取用戶名。

如果您需要了解更多信息,請發送電子郵件至[email protected],因爲當您回覆我的回答時,我沒有收到警報,但我會回來並在此回覆,以便它可以幫助其他人!我很快就會發佈一個教程http://Czartechnogeeks.com/iSolutions

我很高興我可以在幫助我分享一些有價值的東西給用戶後使用。

+2

怎麼可以接受或拒絕訂閱你能告訴我 – 2013-05-24 07:19:36

+0

您將收到朋友的名字與一起presenceType那裏你可以處理接受或拒絕,並將presenceType命令發送給didSendPresence方法中的特定用戶 – obaid 2014-11-02 09:30:27

+0

@obaid,你好。感謝代碼。你可以在這裏清楚「_chatDelegate」是什麼。我怎樣才能接受和接受朋友的要求? – 2014-11-29 06:46:11

4

U不會在單獨的功能中接收請求。每當一個好友開始在線或發送請求時,您的didReceivePresence委託函數就會被調用。如果您獲得presence type = subscription,那麼它是buddyrequest。希望這可以幫助你。

2

您將收到功能didReceivePresence中的訂閱。

要接受訂閱,您可以使用此代碼:

NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"]; 
    [presence addAttributeWithName:@"type" stringValue:@"subscribed"]; 
    [presence addAttributeWithName:@"to" stringValue:[presence fromStr]]; 
    [presence addAttributeWithName:@"from" stringValue:@"[email protected]"]; 
    [[self xmppStream] sendElement:presence]; 

可以將它幫助:)

+0

我嘗試接受訂閱,但它不工作... – 2013-05-24 07:20:54

+0

您收到的錯誤是什麼? – obaid 2014-11-02 09:31:03