Я разработал клиент XMPP Chat для iOS, и теперь я изучаю, как сделать новую регистрацию пользователей у самой iOS. Может ли кто-нибудь помочь с методами, используемыми для регистрации нового пользователя. Поскольку он должен связываться с сервером и хранить имя пользователя и пароль в базе данных сервера. Пожалуйста, помогите, я ищу его от 2 дней.
Способы регистрации новых пользователей xmpp framework iOS
Ответ 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)