xmppframework for iOS client(四) 注冊新帳號


 

懶得打字 資料來自:http://www.cnblogs.com/uvsjoh/archive/2012/09/02/2667348.html

1 帶內注冊(In-band registration)的概念
帶內注冊指的是未在你的服務器上開通賬號的用戶可以通過xmpp協議注冊新賬號。相反的概念是帶外注冊(out-of-band registration),例如
你必須到某個指定的web頁面進行注冊。
如果服務器允許帶內注冊,那么我們就可以通過自己開發的客戶端注冊新賬號。與帶內注冊相關的協議是XEP-0077。

2 使用XMPPFramework進行帶內注冊
XMPPStream.h中聲明了進行簡單帶內注冊(提供用戶名和密碼進行注冊)的函數
- (BOOL)registerWithPassword:(NSString *)password error:(NSError **)errPtr;
注冊前需要先建立stream連接, 因為沒有帳號,所以需要建立匿名連接

NSError *err;
NSString *tjid = [[NSString alloc] initWithFormat:@"anonymous@%@", server.text];
[[delegate xmppStream] setMyJID:[XMPPJID jidWithString:tjid]];
if ( ![[delegate xmppStream] connect:&err])
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"連接服務器失敗"
message:[err localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];

}

建立連接之后, 不需要進行用戶驗證, 可以如下處理 -- 如果是在注冊,則跳過驗證這一步

復制代碼
- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    
    isXmppConnected = YES;
    
    NSError *error = nil;
    if (isRegister == YES)
        return;

    if (![[self xmppStream] authenticateWithPassword:password error:&error])
    {
        DDLogError(@"Error authenticating: %@", error);
    }
}
復制代碼

xmppStream connect 是立即返回的, 所以connect返回並不能說明連接已經建立好.
[delegate xmppStream] isConnected 為YES時才能確定連接已經建立好.

連接建立好之后,我們就可以發注冊信息

NSString *jid = [[NSString alloc] initWithFormat:@"%@@%@", user.text, server.text];
[[delegate xmppStream] setMyJID:[XMPPJID jidWithString:jid]];
NSError *error=nil;
if (![[delegate xmppStream] registerWithPassword:password.text error:&error])
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"創建帳號失敗"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}

registerWithPassword:error 方法也是立即返回的
需要通過代理方法來判斷注冊是否成功
注冊成功會調用:- (void)xmppStreamDidRegister:(XMPPStream *)sender
注冊失敗會調用:- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error

復制代碼
- (void)xmppStreamDidRegister:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    registerSuccess = YES;
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"創建帳號成功" 
                                                        message:@""
                                                       delegate:self 
                                              cancelButtonTitle:@"Ok" 
                                              otherButtonTitles:nil];
    [alertView show];
}

- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"創建帳號失敗" 
                                                        message:@"用戶名沖突"
                                                       delegate:nil 
                                              cancelButtonTitle:@"Ok" 
                                              otherButtonTitles:nil];
    [alertView show];
}
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM