Подтвердить что ты не робот

Способы регистрации новых пользователей xmpp framework iOS

Я разработал клиент XMPP Chat для iOS, и теперь я изучаю, как сделать новую регистрацию пользователей у самой iOS. Может ли кто-нибудь помочь с методами, используемыми для регистрации нового пользователя. Поскольку он должен связываться с сервером и хранить имя пользователя и пароль в базе данных сервера. Пожалуйста, помогите, я ищу его от 2 дней.

4b9b3361

Ответ 1

Это решение для меня работало

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

Ответ 2

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];
}

Ответ 3

Новый пользователь может зарегистрироваться на сервере XMPP из iOS двумя способами:

Methode 1.). Регистрация в полосе. (Регистрация внутри полосы означает, что пользователи, у которых нет учетной записи на вашем сервере, могут зарегистрировать ее, используя протокол XMPP, поэтому регистрация остается "в band", в том же протоколе, который вы уже используете.) Вы должны использовать расширение XEP-0077.

И ваш сервер также должен поддерживать регистрацию в группе.

Используйте эти шаги для регистрации в группе

шаг 1: подключиться к 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 объявите в @interface часть вашего файла

шаг 2: Когда делегат xmppStream - (void)xmppStreamDidConnect:(XMPPStream *)sender вызывает

Шаг 3: Запустите регистрацию через In-Band Registration как

- (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: Проверьте успешность или неудачу регистрации делегата XMPPStream

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

Methode 2.). XMPP Rest Api на сервере openFire установил плагин (Rest Api plugin), который позволяет нормальную регистрацию.

Используйте эти шаги для регистрации Rest Api

шаг 1: Установить плагин Rest Api на сервере

Шаг 2: Настройте сервер для Rest Api как сервера → настройки сервера → Rest Api затем включите его.

Вы можете использовать "секретный ключ" для безопасной регистрации пользователя, поэтому скопируйте его с сервера openfire и используйте, когда rest api вызывается для регистрации.

шаг 3: Вызов Rest Api для регистрации

-(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 является строкой "Rest api url".

AuthenticationToken является "секретным ключом" (копия с сервера openfire)