首页 > 代码库 > XMPP登录注册好友群组_实战教学1

XMPP登录注册好友群组_实战教学1

1. 环境准备:openfire + mysql 5.1.6 + Xcode5 + XMPP.Framework (至于环境的配置, 请自己百度, 推荐: http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html) 

2. cocoapods 

1 platform :ios, 7.02 pod "XMPPFramework", "~>3.6.4"

3.工程: ARC + COREDATA + XIB(Storyboard)

4.直奔重点:  XMPP工具单例

  1. 首先, 创建一个Infromation.h 文件 用来存放我们需要的一些基本信息,比如host之类的。  然后把这个头文件导入pch文件中 注意我的Domains 后边多一个@

1 #ifndef ADXMPP_BE_Information_h2 #define ADXMPP_BE_Information_h3 4 #define SERVER @"127.0.0.1"5 #define DOMAINS @"@127.0.0.1"6 7 #endif

  2. 创建ADXMPPConn 类、 开始编辑我们的XMPP连接、 登录、 注册核心代码

ADXMPPConn.h

 1 // 2 //  ADXMPPConn.h 3 //  ADXMPP_BE 4 // 5 //  Created by Dylan on 14-10-8. 6 //  Copyright (c) 2014年 Dylan. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 #import <XMPP.h>11 12 /**13  用来判断当前用户在进行什么操作14  */15 typedef enum {16     LOGIN,17     REGISTER18 }USER_TYPE;19 20 /*!21  *  @Author Dylan.22  *23  *  Callbacl Block24  */25 typedef void(^connectSuccess)();26 typedef void(^AuthenticateFailure)(id);27 28 typedef void(^registerSuccess)();29 typedef void(^registerFailure)(id);30 31 @interface ADXMPPConn : NSObject <XMPPStreamDelegate>32 33 /*!34  *  @Author Dylan.35  *36  *  xmppStream37  */38 @property (nonatomic, strong) XMPPStream * xmppStream;39 40 /*!41  *  @Author Dylan.42  *43  *  Username, Password44  */45 @property (nonatomic, strong) NSString * userName;46 @property (nonatomic, strong) NSString * passWord;47 48 /*!49  *  @Author Dylan. UserType50  */51 @property (nonatomic) USER_TYPE USERTYPE;52 53 /*!54  *  @Author Dylan.55  *56  *  Methods57  */58 #pragma mark - Methods59 60 /*!61  *  shareInstance62  */63 + (instancetype)shareInstance;64 65 /*!66  *  setup xmppStream67  */68 - (void) setupXmppStream;69 70 /*!71  *  on/off line72  */73 - (void) online;74 - (void) offline;75 76 /*!77  *  connection/register78  */79 - (BOOL)connectionWithUserName: (NSString *)userName80                       passWord: (NSString *)passWord81                        success: (connectSuccess)Success82                        failure: (AuthenticateFailure)Failure;83 84 - (void)registerWithUserName: (NSString *)userName85                     passWord: (NSString *)passWord86                      success: (registerSuccess)Success87                      failure: (registerFailure)Failure;88 89 @end

ADXMPPConn.m

  1 //  2 //  ADXMPPConn.m  3 //  ADXMPP_BE  4 //  5 //  Created by Dylan on 14-10-8.  6 //  Copyright (c) 2014年 Dylan. All rights reserved.  7 //  8   9 #import "ADXMPPConn.h" 10  11 @interface ADXMPPConn () 12  13 /*! 14  *  @Author Dylan. 15  * 16  *  Callback Block 17  */ 18 @property (nonatomic, copy) connectSuccess connSuccess; 19 @property (nonatomic, copy) AuthenticateFailure authenFailure; 20  21 @property (nonatomic, copy) registerSuccess regisSuccess; 22 @property (nonatomic, copy) registerFailure regisFailure; 23  24 @end 25  26 // shareInstance 27 static ADXMPPConn * xmppConn; 28  29 @implementation ADXMPPConn 30  31 #pragma mark shareInstance 32 + (instancetype)shareInstance { 33     static dispatch_once_t onceToken; 34     dispatch_once(&onceToken, ^{ 35         xmppConn = [[self alloc] init]; 36     }); 37      38     return xmppConn; 39 } 40  41 #pragma mark - Methods 42 - (void)setupXmppStream { 43     self.xmppStream = [[XMPPStream alloc] init]; 44     [_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; 45 } 46  47 #pragma mark on/off line 48 - (void)online { 49     XMPPPresence * presence = [XMPPPresence presence]; 50     [self.xmppStream sendElement:presence]; 51 } 52  53 - (void)offline { 54     XMPPPresence * presence = [XMPPPresence presenceWithType:@"unavailable"]; 55     [self.xmppStream sendElement:presence]; 56     [self.xmppStream disconnect]; 57 } 58  59 #pragma mark connection 60 - (BOOL)connectionWithUserName:(NSString *)userName passWord:(NSString *)passWord success:(connectSuccess)Success failure:(AuthenticateFailure)Failure { 61      62     // setup xmppStream 63     [self setupXmppStream]; 64      65     // get username, password 66     self.userName = userName; 67     self.passWord = passWord; 68      69     // set callback block 70     self.connSuccess = Success; 71     self.authenFailure = Failure; 72      73     if ([self.xmppStream isConnected]) { 74         return YES; 75     } 76      77     if (userName == nil) { 78         return NO; 79     } 80      81     // setJID 82     [self.xmppStream setMyJID:[XMPPJID jidWithString:userName]]; 83     [self.xmppStream setHostName:SERVER]; 84      85     NSError * error = nil; 86     if (![self.xmppStream connectWithTimeout:30 error:&error]) { 87         NSLog(@"%@", [error localizedDescription]); 88         Failure(error); 89         return NO; 90     } 91      92     return YES; 93 } 94  95 - (void)registerWithUserName:(NSString *)userName passWord:(NSString *)passWord success:(registerSuccess)Success failure:(registerFailure)Failure { 96      97     // set user type 98     self.USERTYPE = REGISTER; 99     100     // set username, password101     self.userName = [userName stringByAppendingString:DOMAINS];102     self.passWord = passWord;103     104     self.regisSuccess = Success;105     self.regisFailure = Failure;106     107     [self connectionWithUserName:self.userName passWord:passWord success:Success failure:Failure];108 }109 110 #pragma mark - delegateMethods111 - (void)xmppStreamDidConnect:(XMPPStream *)sender {112     self.connSuccess();113     114     NSError * error = nil;115     116     // kind of user type117     if (self.USERTYPE == REGISTER) {118         119         // registe120         [self.xmppStream setMyJID:[XMPPJID jidWithString:self.userName]];121         NSError * error = nil;122         if (![self.xmppStream registerWithPassword:self.passWord error:&error]) {123             self.regisFailure([error localizedDescription]);124         }125         126     } else {127         // authenticate128         [self.xmppStream authenticateWithPassword:self.passWord error:&error];129         if (error != nil) {130             self.authenFailure([error localizedDescription]);131         }132     }133 }134 135 // dis connect136 - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error {137     NSLog(@"%@", [error localizedDescription]);138 }139 140 // authenticate141 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error {142     self.authenFailure(error);143 }144 145 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {146     // online147     [self online];148     self.connSuccess();149 }150 151 // regist152 - (void)xmppStreamDidRegister:(XMPPStream *)sender {153     self.regisSuccess();154 }155 156 - (void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error {157     self.regisFailure(error);158 }159 160 @end

 

登录注册。  每日更新中。

XMPP登录注册好友群组_实战教学1