2016-11-11 6 views
1

Я имею ряд трудностей, с 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

ответ

0

Если вам нужна только одна дополнительная база данных, то вы должны смотреть в Firebase Auth. Он позволяет регистрироваться с помощью электронной почты и пароля, а также таких поставщиков, как Google, Facebook, Twitter и GitHub. Тогда вам понадобится только один URL-адрес базы данных, а затем ссылка на Firebase Auth.

Смежные вопросы