• xmpp开发教程(三)-连接和认证


    从这章节开始,我将手把手的操作如何实现聊天里面的一些基本功能,从容易向高难度的过渡,这也是我编写程序的基本方法。

    这章我们要研究的是连接和认证两个操作。

    首先献上代码

     1 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     2 #pragma mark Connect/disconnect
     3 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     4 
     5 - (void)connect {
     6     
     7     if (self.xmppStream == nil) {
     8         self.xmppStream = [[XMPPStream alloc] init];
     9         [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
    10         
    11         xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];
    12         //    xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore];
    13         
    14         xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];
    15         
    16         xmppRoster.autoFetchRoster = YES;
    17         xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
    18         [xmppRoster            activate:xmppStream];
    19         [xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
    20     }
    21     
    22     
    23     if (![self.xmppStream isConnected]) {
    24         
    25        NSString *userId=@"admin@helloworldtekimac-mini.local";
    26        NSString *pass=@"***********";
    27        NSString *server=@"helloworldtekimac-mini.local";
    28         
    29         //设置用户
    30        [xmppStream setMyJID:[XMPPJID jidWithString:userId]];
    31         //设置服务器
    32        [xmppStream setHostName:server];
    33         //密码
    34        password = pass;
    35         
    36         NSError *error = nil;
    37         NSTimeInterval timeInter=15;
    38         if (![self.xmppStream connectWithTimeout:timeInter error:&error]){
    39             NSLog(@"Connect Error: %@", [[error userInfo] description]);
    40         }
    41     }
    42 }

    第8,9行是初始化xmppStream对象并且设置delegate,保证后边能回调相应的函数。

    第14~19行是初始化xmppRoster对象并且设置存储方式,自动检索数据,delegate,与前边的xmppStream相关联。

    第25~39行是连接服务器

    userId是登录的用户名,pass是密码,server是服务器域名
    connectWithTimeout是最新的连接方法,之前用的是connect,不过已经废弃了。

    如果一切顺利,会回调相应的方法
    1 - (void)xmppStreamDidConnect:(XMPPStream *)sender {
    2    // NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"password"];
    3     NSError *error = nil;
    4     if (![self.xmppStream authenticateWithPassword:password error:&error]) {
    5         NSLog(@"Authenticate Error: %@", [[error userInfo] description]);
    6     }
    7 }

    第4行表示回调成功后会验证密码,会进入到下面的方法

     1 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     2 #pragma mark Authenticate
     3 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     4 
     5 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
     6     [self goOnline];
     7 }
     8 
     9 -(void)goOnline
    10 {
    11     XMPPPresence *presence = [XMPPPresence presenceWithType:@"available"];
    12     [self.xmppStream sendElement:presence];
    13 }
    14 
    15 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
    16 {
    17     NSLog(@"Authenticate Error: %@", error);
    18 }
     -(void)goOnline的方法主要是想服务器发送一个上线的通知

    我们运行程序,设置断点,跟踪路径,可以根据服务器页面来判断用户是否上线



    这就说明登录和验证都是成功的,下章节会介绍如何获取好友列表。
     
  • 相关阅读:
    HtmlEncode 和 HtmlDecode
    Visual Studio .Net 的一些小技巧(2)
    Array和ArrayList的区别
    c#中 ?? 是什么意思?
    带有图片预览功能的上传表单 上传预览
    Js实现Repeater全选/反选 功能 终极解决方案
    处理URL重写后postback重写失效的问题 .browser文件
    在TreeView中使用CheckBox(c#)
    SQL操作全集
    智能仓库管理系统方案(一)
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/4049072.html
Copyright © 2020-2023  润新知