如何通过目标c中的ios中的XMPPFramework连接XMPP服务器

时间:2017-01-06 13:33:49

标签: ios objective-c xmpp xmppframework

我在目标C中通过IOS中的XMPPFramework连接到XMPP服务器, 我在viewDidLoad方法中初始化了连接参数,如下所示:

- (void)viewDidLoad {
[super viewDidLoad];
xmppStream = [[XMPPStream alloc] init];
[xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

xmppStream.hostName = @"hostname";
xmppStream.hostPort = 5222;

NSString *username = @"name@domainname.net";
NSString *password = @"123456";

[xmppStream setMyJID:[XMPPJID jidWithString:username]];

NSError *error = nil;
if (![xmppStream oldSchoolSecureConnectWithTimeout:XMPPStreamTimeoutNone error:&error])
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:[NSString stringWithFormat:@"Can't connect to server %@", [error localizedDescription]]
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [alertView show];
}
}

尝试按下按钮点击进行身份验证:

- (IBAction)connectToXmpp:(id)sender {

NSLog(@"%hhd", [xmppStream isConnected]);
NSError *error = nil;

if (![xmppStream authenticateWithPassword:@"123456" error:&error]) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:[NSString stringWithFormat:@"Can't authenticate %@", [error localizedDescription]]
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [alertView show];
}
[xmppStream sendElement:[XMPPPresence presence]];
}

但是在按钮上单击此处获取错误消息是错误消息:

enter image description here

有人可以帮助我。谢谢。

1 个答案:

答案 0 :(得分:1)

@prem nath

在上面的代码中,您尝试连接到- (void)viewDidLoad中的服务器。 但您可以在建立服务器连接后使用密码进行身份验证。

在建立连接时调用- (void)xmppStreamDidConnect:(XMPPStream *)sender XMPPStream Delegate。您必须在XMPPStream Delegate中对服务器进行身份验证。