iOS 앱을 Digits에서 Firebase로 이전

Digits를 사용하여 전화번호로 사용자를 로그인 처리하는 경우 앱을 Firebase 인증으로 이전해야 합니다. 전화번호 로그인 기능은 이제부터 Firebase에서만 업데이트가 이루어지며 Digits는 2017년 9월 30일에 종료됩니다.

이 페이지의 안내에 따라 현재 Digits 사용자에게 불편을 주지 않으면서 Digits에서 Firebase로 앱을 이전할 수 있습니다.

개요

앱을 Digits에서 Firebase 인증으로 이전하는 방법은 다음과 같습니다.

  1. Digits 사용자 계정을 Firebase로 이전
  2. Digits SDK를 Firebase SDK로 대체
  3. 활성 Digits 세션을 Firebase로 이전

첫 번째 단계는 앱이나 기존 사용자에게 영향을 주지 않고 즉시 완료할 수 있으며, 이와 동시에 나머지 단계를 완료해야 합니다.

Digits 사용자 계정을 Firebase로 이전

우선 Fabric 개발자 문서의 설명에 따라 Digits 사용자 계정을 Firebase로 이전합니다.

계정 이전 단계를 완료한 후 Digits 계정이 Firebase 프로젝트로 이전될 때까지 몇 시간 정도 기다립니다. 이전이 완료되면 모든 Digits 사용자 계정을 포함하는 Firebase 프로젝트가 생깁니다. 또한 이전을 시작한 후에 생성한 모든 Digits 계정이 자동으로 Firebase로 이전됩니다.

Digits SDK를 Firebase SDK로 대체

다음으로, 앱에서 Digits SDK에 대한 호출을 Firebase SDK에 대한 호출로 바꿉니다.

미리 구성된 Digits 로그인 버튼인 DGTAuthenticateButton을 사용하는 경우 다음 중 하나를 수행하여 Firebase로 전환할 수 있습니다.

  • FirebaseUI를 설치하고 DGTAuthenticateButton의 상위 보기를 FirebaseUI의 authViewController로 바꿉니다.
  • 전화번호 로그인을 사용하도록 Firebase SDK를 설정합니다. 그런 다음 DGTAuthenticateButtonUIButton으로 바꿉니다. 사용자가 UIButton을 누르면 verifyPhoneNumber:completion:을 호출합니다.

Digits SDK의 authenticateWithCompletion: 메소드를 호출하는 맞춤 버튼을 사용하는 경우 전화번호 로그인을 사용하도록 Firebase SDK를 설정합니다. 그런 다음 authenticateWithCompletion:에 대한 호출을 Firebase SDK의 verifyPhoneNumber:completion: 메소드로 바꿉니다.

Digits를 Firebase로 대체한 후 Podfile 및 빌드 구성에서 Digits SDK를 삭제합니다.

활성 Digits 세션을 Firebase로 이전

마지막으로, 업데이트된 앱을 배포한 후 사용자가 다시 로그인할 필요가 없도록 활성 사용자 세션을 Digits에서 Firebase로 이전합니다.

Digits 세션을 Firebase 세션으로 이전하려면 Digits Migration Helper SDK를 사용하여 활성 Digits 세션으로부터 Firebase 인증 토큰을 생성합니다. 그런 다음 토큰을 사용하여 Firebase에 로그인합니다. 마지막으로, Firebase를 사용하여 성공적으로 로그인한 후 Digits 세션을 지웁니다.

  1. Podfile에 Digits Migration Helper SDK를 추가합니다.
    pod 'DigitsMigrationHelper'
    그런 다음 pod install 명령을 실행합니다.
  2. 앱이 로드되면 활성 Digits 세션이 있는지 확인하고 세션이 있으면 Firebase 세션으로 변환합니다. 그런 다음 clearLegacyAuth:를 사용하여 Digits 세션을 지웁니다. 예를 들면 다음과 같습니다.

    Swift

    let migrator = DigitsMigrator.init(digitsAppConsumerKey: key as! String, withDigitsAppConsumerSecret: secret as! String)
    
    migrator.getLegacyAuth { (customSignInToken, session) in
      if let customSignInToken = customSignInToken {
        print("Legacy digits session detected: token=\(customSignInToken), session=\(DigitsSession.describe(session))")
    
        Auth.auth().signIn(withCustomToken: customSignInToken) { (user, error) in
          if let error = error {
            print("signInWithCustomToken, user=\(String(describing: user)), error=\(error)")
            return
          }
    
          migrator.clearLegacyAuth { (success, error) in
            print("clearLegacyAuth, success=\(success), error=\(error?.localizedDescription ?? "")")
          }
        }
      }
    }
    

    Objective-C

    FIRDigitsMigrator *migrator = [[FIRDigitsMigrator alloc] initWithDigitsAppConsumerKey:key
                                                              withDigitsAppConsumerSecret:secret];
    
    [migrator getLegacyAuth:^(NSString *customSignInToken, FIRDigitsSession *session){
      if (customSignInToken) {
        NSLog(@"Legacy digits session detected: token=%@, session=%@", customSignInToken, [FIRDigitsSession describe:session]);
    
        [[FIRAuth auth] signInWithCustomToken:customSignInToken
                                   completion:^(FIRUser * _Nullable user, NSError * _Nullable error) {
          NSLog(@"signInWithCustomToken, user=%@, error=%@", user, error);
          if (!error) {
            NSString *msg = [NSString stringWithFormat:@"Converted to firebase user with id as %@", user.uid];
    
            [migrator clearLegacyAuth:^(BOOL success, NSError * _Nullable error){
              NSLog(@"clearLegacyAuth, success=%d, error=%@", success, error);
            }];
          }
        }];
      } else {
        NSLog(@"No legacy digits session detected");
        // ...
      }
    }];
    

    앱에서 편의에 따라 어디에서든 이 변환을 수행할 수 있습니다. 대부분의 경우 AppDelegate가 적합합니다.

    getLegacyAuth:에서 맞춤 토큰을 생성하지 않으면 사용자가 Digits에 로그인되지 않은 것이며 Firebase 로그인을 계속 진행할 수 있습니다.

  3. 선택사항: Digits 세션이 이전되었음을 기록하고, 이전 단계가 이미 완료된 경우 상황에 따라 적절히 건너뜁니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.