从这章节开始,我将手把手的操作如何实现聊天里面的一些基本功能,从容易向高难度的过渡,这也是我编写程序的基本方法。
这章我们要研究的是连接和认证两个操作。
首先献上代码
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 *[email protected]"[email protected]"; 26 NSString *[email protected]"***********"; 27 NSString *[email protected]"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的方法主要是想服务器发送一个上线的通知 我们运行程序,设置断点,跟踪路径,可以根据服务器页面来判断用户是否上线
这就说明登录和验证都是成功的,下章节会介绍如何获取好友列表。
时间: 2024-12-29 12:04:43