·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> XMPP登录注册1

XMPP登录注册1

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

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.0'
2 pod "XMPPFramework", "~>3.6.4"

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

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

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

1 #ifndef ADXMPP_BE_Information_h
2 #define ADXMPP_BE_Information_h
3 
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     REGISTER
18 }USER_TYPE;
19 
20 /*!
21  *  @Author Dylan.
22  *
23  *  Callbacl Block
24  */
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  *  xmppStream
37  */
38 @PRoperty (nonatomic, strong) XMPPStream * xmppStream;
39 
40 /*!
41  *  @Author Dylan.
42  *
43  *  Username, PassWord
44  */
45 @property (nonatomic, strong) NSString * userName;
46 @property (nonatomic, strong) NSString * passWord;
47 
48 /*!
49  *  @Author Dylan. UserType
50  */
51 @property (nonatomic) USER_TYPE USERTYPE;
52 
53 /*!
54  *  @Author Dylan.
55  *
56  *  Methods
57  */
58 #pragma mark - Methods
59 
60 /*!
61  *  shareInstance
62  */
63 + (instancetype)shareInstance;
64 
65 /*!
66  *  setup xmppStream
67  */
68 - (void) setupXmppStream;
69 
70 /*!
71  *  on/off line
72  */
73 - (void) online;
74 - (void) offline;
75 
76 /*!
77  *  connection/register
78  */
79 - (BOOL)connectionWithUserName: (NSString *)userName
80                       passWord: (NSString *)passWord
81                        success: (connectSuccess)Success
82                        failure: (AuthenticateFailure)Failure;
83 
84 - (void)registerWithUserName: (NSString *)userName
85                     passWord: (NSString *)passWord
86                      success: (registerSuccess)Success
87                      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, password
101     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 - delegateMethods
111 - (void)xmppStreamDidConnect:(XMPPStream *)sender {113     
114     NSError * error = nil;
115     
116     // kind of user type
117     if (self.USERTYPE == REGISTER) {
118         
119         // registe
120         [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         // authenticate
128         [self.xmppStream authenticateWithPassword:self.passWord error:&error];
129         if (error != nil) {
130             self.authenFailure([error localizedDescription]);
131         }
132     }
133 }
134 
135 // dis connect
136 - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error {
137     NSLog(@"%@", [error localizedDescription]);
138 }
139 
140 // authenticate
141 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDxmlElement *)error {
142     self.authenFailure(error);
143 }
144 
145 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
146     // online
147     [self online];
148     self.connSuccess();
149 }
150 
151 // regist
152 - (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

 

登录注册。  每日更新中。