xmpp 与服务器连接并身份验证成功
生活随笔
收集整理的這篇文章主要介紹了
xmpp 与服务器连接并身份验证成功
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?*? XMPP的特點,所有的請求都是通過代理的方式實現的
?*
?*? 因為xmpp是經由網絡服務器進行數據通訊的,因此所有的,因此所有的請求都是提交給服務器處理
?*
?*? 服務器處理完畢止嘔,以代理的方式告訴客戶端處理結果
?*
?*? 官方推薦AppDelegate處理所有來自XMPP服務器的代理響應
AppDelegate.h
// // AppDelegate.h // xmpp練習 // // Created by tqh on 15/4/12. // Copyright (c) 2015年 tqh. All rights reserved. // #import <UIKit/UIKit.h> #import "XMPPFramework.h" @interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;#pragma mark - XMPP相關的屬性和方法定義 /*** 全局xmppstream,只讀屬性*/ @property (strong,nonatomic,readonly) XMPPStream *xmppStream;@endAppDelegate.m
// // AppDelegate.m // xmpp練習 // // Created by tqh on 15/4/12. // Copyright (c) 2015年 tqh. All rights reserved. // #import "AppDelegate.h"//提示,此處不遵守XMPPStreamDlegate協議,程序仍然能夠正常運行 @interface AppDelegate ()<XMPPStreamDelegate> /*** 設置xmppStream*/ - (void)setupStream;/*** 通知服務器用戶上線*/ - (void)goOneline;/*** 通知服務器用戶下線*/ - (void)goOffline;/*** 鏈接服務器*/ - (void)connect;/*** 與服務器斷開連接*/- (void)disConnect;@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // [self connect];return YES; }- (void)applicationWillResignActive:(UIApplication *)application {[self disConnect]; }- (void)applicationDidBecomeActive:(UIApplication *)application {[self connect]; }#pragma mark - XMPP相關方法#pragma mark - 設置XMPPStream- (void)setupStream {//避免被重復實例化if (_xmppStream == nil) {//1.實例化XMPPStream_xmppStream = [[XMPPStream alloc]init];//2.添加代理//因為所有網絡請求都是做基于網絡數據處理,跟UI界面無關,因此可以讓代理方法在其它線程中運行//從而提高程序的運行性能[_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];}}#pragma mark - 通知服務器用戶上線- (void)goOneline {//1.實例化一個"展現",上線的報告XMPPPresence *presence = [XMPPPresence presence];//2.發送presence給服務器//服務器知道"我"上線后,只需要通知我的好友,而無需通知我,因此,次方法沒有回調 [_xmppStream sendElement:presence];}#pragma mark - 通知服務器用戶下線- (void)goOffline {NSLog(@"用戶下線");//1.實例化一個“展現”,下線報告XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];//2.發送Presence給服務器,通知服務器客戶端下線 [_xmppStream sendElement:presence]; }#pragma mark - 連接- (void)connect {//1.設置XMPPStream [self setupStream];//2.設置用戶名,密碼,主機(服務器),連接時不需要passwordNSString *userName = @"tqhTest";NSString *hostName = @"127.0.0.1";//3.設置XMPPStream的JID和主機 // [_xmppStream setMyJID:[XMPPJID jidWithString:userName]]; //@127.0.0.1[_xmppStream setMyJID:[XMPPJID jidWithUser:userName domain:@"127.0.0.1" resource:nil]];[_xmppStream setHostName:hostName];//4.開始鏈接NSError *error = nil;[_xmppStream connectWithTimeout:10 error:&error];//提示:如果沒有制定JID和hostName,才會出錯,其他都不會出錯if (error) {NSLog(@"連接請求發送出錯:%@",error.localizedDescription);}else {NSLog(@"連接請求發送成功");} }#pragma mark - 斷開連接- (void)disConnect {//1.通知服務器下線 [self goOffline];//2.XMPPStream斷開連接 [_xmppStream disconnect]; }#pragma mark - 代理方法 #pragma mark - 連接完成(如果服務器地址不對,就不會調用此方法) - (void)xmppStreamDidConnect:(XMPPStream *)sender {NSLog(@"連接建立");//開始發送身份驗證請求NSError *error = nil;NSString *password = @"123456";[_xmppStream authenticateWithPassword:password error:&error];}#pragma mark - 身份驗證通過- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {NSLog(@"身份驗證通過"); }#pragma mark - 密碼錯誤,身份驗證失敗- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error {NSLog(@"身份驗證失敗%@",error);} //<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized></not-authorized></failure> @end?
轉載于:https://www.cnblogs.com/hxwj/p/4420923.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的xmpp 与服务器连接并身份验证成功的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postfix本机测试本机时,telne
- 下一篇: Mybatis源码研究6:元数据(met