zoukankan      html  css  js  c++  java
  • 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的方法主要是想服务器发送一个上线的通知

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



    这就说明登录和验证都是成功的,下章节会介绍如何获取好友列表。
     
  • 相关阅读:
    Codeforces Global Round 11 E Xum
    【NFLSPC #2】Polynomial
    【SHOI2015】脑洞治疗仪 题解 (线段树)
    CDQ分治与整体二分 学习笔记
    二维树状数组 学习笔记
    博弈论 学习笔记
    【JSOI2007】文本生成器 题解(AC自动机+动态规划)
    【NOI2018】归程 题解(kruskal重构树+最短路)
    【NOI2017】游戏 题解(2-SAT+缩点)
    【BZOJ4398】福慧双修 题解(建图优化)
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/4049072.html
Copyright © 2011-2022 走看看