2012-04-21 7 views
12

私はiOS用のXMPP Chatクライアントを開発しましたが、今はiOS自体から新しいユーザー登録を行う方法を研究しています。新しいユーザーを登録するために使用された方法を誰かが助けることができます。サーバーと通信し、ユーザー名とパスワードをサーバー・データベースに保管する必要があるためです。私が2日からそれを探しているのを助けてください。新しいユーザー登録の方法xmppフレームワークiOS

+0

です。 – ggozad

+0

私はOpenFire Serverを使用していますが、これについて研究しましたが、xmppフレームワークライブラリの登録に使用されたメソッドは - (BOOL)supportsInBandRegistrationです。 - (BOOL)registerWithPassword:(NSString *)パスワードエラー:(NSError **)errPtr;しかし、それを実装する方法を探しています。 – obaid

+1

ここで私の答えを見てみましょう:http://stackoverflow.com/questions/9988206/new-registration-on-openfire-with-strophe-js/10000927#10000927 – ggozad

答えて

9

このソリューションは私のために働いている

Methodeの1)でバンド登録することにより(のInように2つの方法でのiOSからのXMPPサーバーに登録することができます

NSString *username = @"[email protected]_SERVER_IP_HERE"; // OR [NSString stringWithFormat:@"%@@%@",username,XMPP_BASE_URL]] 
NSString *password = @"SOME_PASSWORD"; 

AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

del.xmppStream.myJID = [XMPPJID jidWithString:username]; 

NSLog(@"Does supports registration %ub ",); 
NSLog(@"Attempting registration for username %@",del.xmppStream.myJID.bare); 

if (del.xmppStream.supportsInBandRegistration) { 
    NSError *error = nil; 
    if (![del.xmppStream registerWithPassword:password error:&error]) 
    { 
     NSLog(@"Oops, I forgot something: %@", error); 
    }else{ 
     NSLog(@"No Error"); 
    } 
} 

// You will get delegate called after registrations in either success or failure case. These delegates are in XMPPStream class 
// - (void)xmppStreamDidRegister:(XMPPStream *)sender 
//- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error 
+0

あなたのコードを試しましたが、私のために働いていませんでした。私はXMPPをopenfireに接続できません。これをどうやって行うのか教えてください。私は1週間答えを探していますが、助けを得ていませんでした。 XMPPの設定方法を教えてください。 @rohit mandiwal。 –

+0

サーバーにアカウントをまだ持っていない場合は、これを行う方法はありますか? – sudo

+0

動作していません..... –

10
NSMutableArray *elements = [NSMutableArray array]; 
[elements addObject:[NSXMLElement elementWithName:@"username" stringValue:@"venkat"]]; 
[elements addObject:[NSXMLElement elementWithName:@"password" stringValue:@"dfds"]]; 
[elements addObject:[NSXMLElement elementWithName:@"name" stringValue:@"eref defg"]]; 
[elements addObject:[NSXMLElement elementWithName:@"accountType" stringValue:@"3"]]; 
[elements addObject:[NSXMLElement elementWithName:@"deviceToken" stringValue:@"adfg3455bhjdfsdfhhaqjdsjd635n"]]; 

[elements addObject:[NSXMLElement elementWithName:@"email" stringValue:@"[email protected]"]]; 

[[[self appDelegate] xmppStream] registerWithElements:elements error:nil]; 

以下の代表者を使用して登録が成功したかどうかがわかります。

- (void)xmppStreamDidRegister:(XMPPStream *)sender{ 


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration" message:@"Registration Successful!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 


- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error{ 

    DDXMLElement *errorXML = [error elementForName:@"error"]; 
    NSString *errorCode = [[errorXML attributeForName:@"code"] stringValue]; 

    NSString *regError = [NSString stringWithFormat:@"ERROR :- %@",error.description]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration Failed!" message:regError delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 

    if([errorCode isEqualToString:@"409"]){   

     [alert setMessage:@"Username Already Exists!"]; 
    } 
    [alert show]; 
} 
+0

こんにちはKarunどこでホスト名とポート名を設定しますか? –

+0

兄、 - (void)xmppStreamDidRegister:(XMPPStream *)送信側メソッドが呼び出していません。 –

+0

が動作していません.... –

0

新しいユーザーバンド登録とは、サーバー上にアカウントを持たないユーザーが、XMPPプロトコル自体を使用して登録することができるため、既に使用しているのと同じプロトコル内で登録が「バンド内」のままであることです)。XEP -0077拡張子。

また、サーバーはインバンド登録もサポートする必要があります。 xmppStream: xmppStream

- (BOOL)connectAndRegister 
{ 
    if (![xmppStream isDisconnected]) { 
     return YES; 
    } 

    NSString *myJID = @"[email protected]_SERVER_IP_HERE"; // OR [NSString stringWithFormat:@"%@@%@",username,XMPP_BASE_URL]] 
    NSString *myPassword = @"SOME_PASSWORD"; 

    // 
    // If you don't want to use the Settings view to set the JID, 
    // uncomment the section below to hard code a JID and password. 
    // 
    // Replace me with the proper JID and password: 
    // myJID = @"[email protected]/xmppframework"; 
    // myPassword = @""; 

    if (myJID == nil || myPassword == nil) { 
     DDLogWarn(@"JID and password must be set before connecting!"); 

     return NO; 
    } 

    [xmppStream setMyJID:[XMPPJID jidWithString:myJID]]; 
    password = myPassword; 

    NSError *error = nil; 
    if (![xmppStream connect:&error]) 
    { 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting" 
                  message:@"See console for error details." 
                  delegate:nil 
                cancelButtonTitle:@"Ok" 
                otherButtonTitles:nil]; 
     [alertView show]; 

     DDLogError(@"Error connecting: %@", error); 

     return NO; 
    } 

    return YES; 
} 

NSString *passwordに接続してファイル

ステップ2の@interface部に宣言します。

は、ステップ1は、ではバンドの登録のためにこれらのステップを使用しますデリゲート- (void)xmppStreamDidConnect:(XMPPStream *)senderコール

ステップ3:XMPPことでXMPPStreamデリゲートによってチェック登録成功または失敗

- (void)xmppStreamDidRegister:(XMPPStream *)sender 
- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error 

Methodeの2)スタート

- (void)xmppStreamDidConnect:(XMPPStream *)sender{ 
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD); 
    [[NSNotificationCenter defaultCenter] postNotificationName:XMPPStreamStatusDidConnectNotification 
                 object:nil 
                 userInfo:nil]; 
    _isXmppConnected = YES; 
    NSError *error = nil; 
    DDLogVerbose(@"Start register via In-Band Registration..."); 

    if (xmppStream.supportsInBandRegistration) { 

     if (![xmppStream registerWithPassword:password error:&error]) { 
      NSLog(@"Oops, I forgot something: %@", error); 
     }else { 
      NSLog(@"No Error"); 
    } 
    } 
// [_xmppStream authenticateWithPassword:password error:&error]; 
} 

ステップ4として、インバンド登録を経て登録OpenFireサーバーのRest APIには、通常の登録が可能なプラグイン(Rest Apiプラグイン)がインストールされていました。

は、RESTのAPI登録の手順を使用し

ステップ1:サーバー上に残りのAPIプラグインをインストール

ステップ2:サーバーとして残りAPIの設定サーバー - >サーバーの設定 - >休憩アピそれを有効にします。

セキュアなユーザ登録に「秘密鍵認証」を使用することができます。したがって、その認証をopenfireサーバからコピーし、残りのapiが登録のために呼び出されたときに使用します。

ステップ3:登録

-(void)CreateUserAPI 
{ 
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"abc",@"username",@"SOME_PASSWORD",@"password",@"abc-nickname",@"name",@"[email protected]",@"email", nil]; 
    NSData* RequestData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil]; 

    NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString:[NSString stringWithFormat:@"%@users",RESTAPISERVER]]]; 


    [request setHTTPMethod: @"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:AuthenticationToken forHTTPHeaderField:@"Authorization"]; 
    [request setHTTPBody: RequestData]; 

    NSURLSession *session = [NSURLSession sharedSession]; 
    [[session dataTaskWithRequest:request 
      completionHandler:^(NSData *data, 
           NSURLResponse *response, 
           NSError *error) { 
       // handle response 
       if (!error) 
       { 

        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
        if ([httpResponse statusCode]==201) 
        { 

         NSLog(@"Registration Successful"); 

        }else 
        { 
         NSLog(@"Registration failed"); 
        } 

       }else 
       { 
        NSLog(@"Try again for registration"); 
       } 


      }] resume]; 
} 

RESTAPISERVERためコール休憩APIは残りのAPI URL文字列です。

AuthenticationTokenあなたは違いがたくさんになるだろう使用するサーバーに言及し、「秘密キー認証」(openfireサーバからのコピー)

関連する問題