Используйте службу пользователей в Openfire для регистрации нового пользователя через платформу xmpp для iOS

Теперь я вижу пользователей, созданных вручную на моем сервере openfire, я работаю с книгой, чтобы добиться этого, но есть способ, которым программист регистрирует пользователя через http, используя openfire и плагин пользовательского сервиса. Я хочу знать, как зарегистрировать нового пользователя с помощью этой функции и могу ли я проверить, существует ли уже пользователь на сервере openfire с моим приложением для iOS. Как я могу получить http-ссылку моего openfire для регистрации или есть другой способ? я читал, что для пользовательской регистрации было бы хорошо создать веб-сервис, но я очень мало знаю о веб-сервисах, поэтому, пожалуйста, кто-нибудь может помочь, спасибо.


person jdecuirm    schedule 19.06.2014    source источник


Ответы (2)


Вам необходимо зарегистрировать пользователя, создав NSXMLElement и передать его в xmppstream для регистрации нового пользователя. Убедитесь, что у вас есть объект xmppstream, чтобы вы могли отправлять запросы на сервер и получать требуемый результат.

NSMutableArray *elements = [NSMutableArray array];
[elements addObject:[NSXMLElement elementWithName:@"username" stringValue:@"abc"]];
[elements addObject:[NSXMLElement elementWithName:@"password" stringValue:@"xyz"]];
[elements addObject:[NSXMLElement elementWithName:@"name" stringValue:@"abc"]];
[elements addObject:[NSXMLElement elementWithName:@"email" stringValue:@"[email protected]"]];
[self.xmppStream registerWithElements:elements error:nil];
[self connect];

Это зарегистрирует нового пользователя или, если пользователь уже существует на вашем сервере, вы получите ошибку в полученном iq.

person satwal    schedule 25.06.2014
comment
Привет @skaur спасибо за ответ! я проверю это! какие поля являются обязательными для корректной регистрации пользователя? И еще один вопрос, который у меня есть, теперь я могу подключиться к серверу openfire и указать присутствие, я фиксирую список autofetch, но я его не получаю, я использую coredatarosterstorage, реализованный в структуре xmpp, как я могу проверить, является ли список правильно заселены? я не получаю друзей аккаунта! - person jdecuirm; 26.06.2014
comment
Привет, @user3741129, вы можете запросить поля регистрации с вашего сервера. Это XML-запрос для получения полей регистрации: iq type='get' id='reg1' to='shakespeare.lit'›‹query xmlns=' jabber:iq:register'/›‹/iq› NSXMLElement *query = [NSXMLElement elementWithName:@query xmlns:@jabber:iq:register]; NSXMLElement *iq = [NSXMLElement elementWithName:@iq]; [iq addAttributeWithName:@type stringValue:@get]; [iq addAttributeWithName:@id stringValue:@admin@domain/xmppframework]; [iq addAttributeWithName:@to stringValue:@domain]; [iq addChild:запрос]; [self.xmppStream sendElement:iq]; - person satwal; 27.06.2014
comment
также вы можете проверить свой сервер openfire при создании нового пользователя, обязательные поля отмечены *, но вам не нужно вводить пароль для подтверждения при регистрации нового пользователя из кода. - person satwal; 27.06.2014

Это решение РАБОТАЛО для меня. Более организованный подход

NSString *username = @"rohit@XMPP_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
person Rohit Mandiwal    schedule 03.10.2014