Я имею ряд трудностей, с Firebase в моем приложении IOS в Objective C.Firebase помощи - несколько баз данных
Приложения используется Firebase для базы данных пользовательских входа.
Приложение, первоначально подключенное к базе данных firebase, содержащей имена пользователей и пароли.
С тех пор я представил другое подключение к firebase для поиска в реальном времени данных в tableView. Это относится к отдельному проекту firebase. Я не уверен, как иметь обе базы данных как часть одного проекта.
Я добавил GoogleService-Info.plist, и он позволяет использовать только один DATABASE_URL. Возможно ли иметь несколько DATABASE_URL? Я хотел бы переключиться между проектами, когда это необходимо.
Код для входа основан на версии firebase 1.0. Приложение подключено к firebase через URL-адрес «webservice».
С тех пор я обновил до последней версии Firebase, и теперь код сломан. Я обновил некоторые устаревшие ссылки и очистил большинство ошибок.
У меня возникают ошибки при запуске приложения и попытка войти в систему. Нет связи с URL-адресом проекта firebase для входа.
Я добавлю код для функции входа в систему ниже.
- (IBAction)login:(id)sender
{
if (txtEmail.text.length > 0 && txtToken.text.length > 0) {
if ([sharedHelper isConnectedToInternet]) {
[self.activityView startAnimating];
//If the user has purchased but not logged in, when they do login we want to add their purchases to their user
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
[settings setObject:txtEmail.text forKey:@"userEmail"];
[settings setObject:txtToken.text forKey:@"userToken"];
NSMutableDictionary *purchase = [settings objectForKey:@"UnRecordedPurchase"];
NSString *subscriptionLength = @"0";
NSString *expiryDate = @"";
NSString *receiptData = @"";
if (purchase)
{
subscriptionLength = [purchase objectForKey:@"subscriptionLength"];
expiryDate = [purchase objectForKey:@"expiryDate"];
receiptData = [purchase objectForKey:@"receiptData"];
}
[settings setObject:nil forKey:@"UnRecordedPurchase"];
[settings synchronize];
//Firebase *firebase = [[Firebase alloc] initWithUrl:kLOGINWEBSERVICEURL];
FIRDatabaseReference *firebase= [[FIRDatabase database] reference];
[firebase observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
[self.activityView stopAnimating];
if (snapshot.value == [NSNull null]) {
// No data found
NSString *errorMessage = @"Unable to check login details - please contact [email protected]";
[self showStatusMessage:errorMessage];
} else {
NSMutableArray *matchingEmailChildren = [[NSMutableArray alloc] initWithCapacity:0];
for (FIRDataSnapshot *child in snapshot.children) {
NSDictionary *dict = child.value;
// Check the email address
if ([[[dict valueForKey:@"Email"] lowercaseString] isEqualToString:[self.txtEmail.text lowercaseString]]) {
[matchingEmailChildren addObject:child];
}
}
if ([matchingEmailChildren count] > 0) {
NSMutableArray *matchingTokenChildren = [[NSMutableArray alloc] initWithCapacity:0];
// Check for matching token
for (FIRDataSnapshot *child in matchingEmailChildren) {
NSDictionary *dict = child.value;
if ([[[dict valueForKey:@"Token"] lowercaseString] isEqualToString:[self.txtToken.text lowercaseString]]) {
[matchingTokenChildren addObject:child];
}
}
if ([matchingTokenChildren count] > 0) {
BOOL loginSuccess = NO;
// Check expiry date
for (FIRDataSnapshot *child in matchingTokenChildren) {
NSDictionary *dict = child.value;
// Get today's date, just as the date without time values
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay
fromDate:[NSDate date]];
[components setHour:12];
[components setMinute:0];
[components setSecond:0];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
NSDate *todaysDate = [calendar dateFromComponents:components];
// Format expiry date to just the date component
components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay
fromDate:[dateFormatter dateFromString:[dict valueForKey:@"ExpiryDate"]]];
[components setHour:12];
[components setMinute:0];
[components setSecond:0];
NSDate *expiryDate = [calendar dateFromComponents:components];
if ([expiryDate compare:todaysDate] == NSOrderedSame || [expiryDate compare:todaysDate] == NSOrderedDescending) {
NSMutableDictionary *userDict = [[NSMutableDictionary alloc] init];
[userDict setObject:self.txtEmail.text forKey:@"Username"];
[userDict setObject:self.txtToken.text forKey:@"Token"];
// Change format of expiry date for compatibility purposes and convert to string to save locally
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyyMMdd"];
NSString *expiryDateAsString = [dateFormatter stringFromDate:expiryDate];
[userDict setObject:expiryDateAsString forKey:@"ExpiryDate"];
[sharedHelper addUserWithDictionary:userDict fromCloud:NO];
[self loginSuccess];
loginSuccess = YES;
break;
}
}
if (loginSuccess == NO) {
NSString *errorMessage = @"Your Annual Subscription has expired. Contact [email protected]";
[self showStatusMessage:errorMessage];
}
} else {
NSString *errorMessage = @"Your Code is incorrect for this email address.";
[self showStatusMessage:errorMessage];
[self.txtToken becomeFirstResponder];
}
} else {
NSString *errorMessage = @"We cannot find your email address on our system.\r\n\r\n For assistance contact [email protected]";
[self showStatusMessage:errorMessage];
[self.txtEmail becomeFirstResponder];
}
}
} withCancelBlock:^(NSError *error) {
NSString *errorMessage = @"Unable to check login details - please contact [email protected]";
[self showStatusMessage:errorMessage];
}];
} else {
NSString *errorMessage = @"Unable to validate email & code details. Please check your internet connection.";
[self showStatusMessage:errorMessage];
}
} else {
NSString *errorMessage = @"Please enter email address and code.";
[self showStatusMessage:errorMessage];
}
}
Не могли бы вы указать любые ошибки в приведенном выше коде.
Благодаря WG