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

來源:互聯網
上載者:User

 

懶得打字 資料來自: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];}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.