내가 목표 C.중포 기지 도움말 - 여러 데이터베이스
사용자 정의 로그인 데이터베이스에 대한 중포 기지를 사용하는 응용 프로그램에서 내 iOS 앱에서 중포 기지 어려움의 수를 데.
앱이 원래 사용자 이름과 비밀번호가 포함 된 firebase 데이터베이스에 연결되었습니다.
나는 이후 firebase에 대한 또 다른 연결을 도입하여 실시간으로 tableView에 데이터를 가져 왔습니다. 이것은 별도의 firebase 프로젝트에 있습니다. 하나의 프로젝트의 일부로 두 데이터베이스를 보유하는 방법을 모르겠습니다.
GoogleService-Info.plist를 추가했으며 하나의 DATABASE_URL 만 허용합니다. 여러 개의 DATABASE_URL을 가질 수 있습니까? 필요한 경우 프로젝트를 전환하고 싶습니다.
로그인 코드는 firebase 버전 1.0을 기반으로합니다. 앱이 'webservice'URL을 통해 firebase에 연결되었습니다.
나는 최신 Firebase 버전으로 업데이트하여 코드가 손상되었습니다. 일부 지원 중단 된 참조를 업데이트하고 대부분의 오류를 해결했습니다.
앱을 실행하고 로그인을 시도 할 때 오류가 발생합니다. 로그인을위한 firebase 프로젝트의 URL에 연결되어 있지 않습니다.
다음 로그인 기능 코드를 추가하겠습니다.
- (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