3

我正在为 iphone 开发一个 xmpp 客户端。我能够发送和接收消息。我想在不提示用户的情况下自动接受好友请求。我将在哪个函数中收到请求。请给我任何提示。

提前致谢。

4

3 回答 3

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 if 条件中注意到我正在比较我们收到的值(元素)。因此,当我将字符串作为订阅时(当用户发送好友请求时),您只需将该特定用户添加到您的 tableview 好友列表中。

您可以从“presenceFromUser”获取用户名。

如果您需要更多理解,请通过 blueobaid@gmail.com 给我发电子邮件,因为当您回复我的回答时我不会收到警报,尽管我会回来并自行回复,以便它也可以帮助其他人!我很快就会在http://Czartechnogeeks.com/iSolutions上发布一个教程

我很高兴在它对我帮助很大之后,我能够通过 stackoverflow 分享对用户有价值的东西。

于 2012-05-23T06:06:02.433 回答
4

你不会在单独的函数中接收请求。每当好友上线或发送请求时,都会调用您的 didReceivePresence 委托函数。如果您获得出席类型 = 订阅,则它是 buddyrequest。希望这对您有所帮助。

于 2012-03-14T16:24:04.913 回答
2

您将在函数didReceivePresence中收到订阅。

要接受订阅,您可以使用以下代码:

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

可能会有所帮助:)

于 2012-08-01T03:39:48.183 回答