Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

Apple 플랫폼에서 Google 로그인을 사용하여 인증

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

당신은 사용자가 앱에 구글 로그인을 통합하여 Google 계정을 사용하여 중포 기지를 인증하도록 할 수 있습니다.

시작하기 전에

  1. 애플 프로젝트에 중포 기지를 추가합니다 . 당신의 다음 포드 포함 Podfile :
    pod 'FirebaseAuth'
    pod 'GoogleSignIn'
    
  2. 당신이 아직 중포 기지 프로젝트에 응용 프로그램을 연결하지 않은 경우에서 그렇게 중포 기지 콘솔 .
  3. 사인-에서 중포 기지 콘솔의 방법으로 구글을 사용 :
    1. 에서 중포 기지 콘솔인증 섹션을 엽니 다.
    2. 방법 탭에서 로그인에서 구글 로그인 방법을 활성화하고 저장을 클릭합니다.

1. 가져 오기 필요한 헤더 파일

먼저, 앱에 중포 기지 SDK와 구글 로그인 SDK 헤더 파일을 가져와야합니다.

빠른

import FirebaseCore
import GoogleSignIn

목표 - C

@import FirebaseCore;
@import GoogleSignIn;

구글 로그인을 구현합니다

다음 단계에 따라 구글 로그인을 구현합니다. 참고 항목 구글 로그인 개발자 문서에 아이폰 OS와 구글 로그인을 사용하는 방법에 대한 자세한 내용을.

  1. Xcode 프로젝트에 사용자 정의 URL 체계를 추가 :
    1. 프로젝트 구성을 엽니 왼쪽 트리보기에서 프로젝트 이름을 두 번 클릭합니다. 다음, 대상 섹션에서 응용 프로그램을 선택하고 정보 탭을 선택하고 URL 유형 섹션을 확장합니다.
    2. + 버튼을 클릭하고 반전 클라이언트 ID에 대한 URL 방식을 추가 할 수 있습니다. 이 값을 찾으려면 열 GoogleService-Info.plist 구성 파일을, 그리고에 대한 모습 REVERSED_CLIENT_ID 키를 누릅니다. 해당 키의 값을 복사 한 구성표가 구성 페이지에 상자의 URL에 붙여 넣습니다. 다른 필드를 비워 둡니다.

      완료되면, 당신의 설정은 (그러나 응용 프로그램 고유의 값으로) 다음과 같은 보일 것이다 :

  2. 앱 대리인의에서 application:didFinishLaunchingWithOptions: 방법, 구성 FirebaseApp 개체를.

    빠른

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    목표 - C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. 도구 용 application:openURL:options: 앱 위임의 방법을. 이 방법은 호출해야 handleURL 의 방법 GIDSignIn 제대로 응용 프로그램이 인증 프로세스의 마지막에 수신하는 URL을 처리 할 인스턴스를.

    빠른

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any])
      -> Bool {
      return GIDSignIn.sharedInstance.handle(url)
    }
    

    목표 - C

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
    
  4. 로그인 방법은 구글 로그인 귀하의 응용 프로그램에 대한 제시 뷰 컨트롤러와 클라이언트 ID에 합격 만들 중포 기지 인증 자격 증명에서 결과 구글 인증 토큰 :

    빠른

    guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    
    // Create Google Sign In configuration object.
    let config = GIDConfiguration(clientID: clientID)
    
    // Start the sign in flow!
    GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
    
      if let error = error {
        // ...
        return
      }
    
      guard
        let authentication = user?.authentication,
        let idToken = authentication.idToken
      else {
        return
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: authentication.accessToken)
    
      // ...
    }
    

    목표 - C

    GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
    
    __weak __auto_type weakSelf = self;
    [GIDSignIn.sharedInstance signInWithConfiguration:config presentingViewController:self callback:^(GIDGoogleUser * _Nullable user, NSError * _Nullable error) {
      __auto_type strongSelf = weakSelf;
      if (strongSelf == nil) { return; }
    
      if (error == nil) {
        GIDAuthentication *authentication = user.authentication;
        FIRAuthCredential *credential =
        [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                         accessToken:authentication.accessToken];
        // ...
      } else {
        // ...
      }
    }];
    
    
  5. 추가 GIDSignInButton 스토리 보드, XIB 파일, 또는 프로그램을 인스턴스화합니다. 스토리 보드 또는 XIB 파일에 버튼을 추가하려면보기를 추가하고 해당 사용자 정의 클래스를 설정 GIDSignInButton .
  6. 옵션 : 버튼을 사용자 정의하려면 다음을 수행합니다 :

    빠른

    1. 보기 컨트롤러에서 로그인 버튼 속성으로 선언합니다.
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. 받는 버튼을 연결 signInButton 방금 선언 속성입니다.
    3. 의 속성을 설정하여 버튼을 사용자 정의 GIDSignInButton의 개체를.

    목표 - C

    1. 뷰 컨트롤러의 헤더 파일에서 로그인 버튼 속성으로 선언합니다.
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. 받는 버튼을 연결 signInButton 방금 선언 속성입니다.
    3. 의 속성을 설정하여 버튼을 사용자 정의 GIDSignInButton의 개체를.

중포 기지 3. 인증합니다

마지막으로, 이전 단계에서 생성 된 인증 자격 증명과 중포 기지 로그인 프로세스를 완료합니다.

빠른

Auth.auth().signIn(with: credential) { authResult, error in
    if let error = error {
      let authError = error as NSError
      if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
        // The user is a multi-factor user. Second factor challenge is required.
        let resolver = authError
          .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
        var displayNameString = ""
        for tmpFactorInfo in resolver.hints {
          displayNameString += tmpFactorInfo.displayName ?? ""
          displayNameString += " "
        }
        self.showTextInputPrompt(
          withMessage: "Select factor to sign in\n\(displayNameString)",
          completionBlock: { userPressedOK, displayName in
            var selectedHint: PhoneMultiFactorInfo?
            for tmpFactorInfo in resolver.hints {
              if displayName == tmpFactorInfo.displayName {
                selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
              }
            }
            PhoneAuthProvider.provider()
              .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                 multiFactorSession: resolver
                                   .session) { verificationID, error in
                if error != nil {
                  print(
                    "Multi factor start sign in failed. Error: \(error.debugDescription)"
                  )
                } else {
                  self.showTextInputPrompt(
                    withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                    completionBlock: { userPressedOK, verificationCode in
                      let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                        .credential(withVerificationID: verificationID!,
                                    verificationCode: verificationCode!)
                      let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                        .assertion(with: credential!)
                      resolver.resolveSignIn(with: assertion!) { authResult, error in
                        if error != nil {
                          print(
                            "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                          )
                        } else {
                          self.navigationController?.popViewController(animated: true)
                        }
                      }
                    }
                  )
                }
              }
          }
        )
      } else {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      // ...
      return
    }
    // User is signed in
    // ...
}

목표 - C

[[FIRAuth auth] signInWithCredential:credential
                          completion:^(FIRAuthDataResult * _Nullable authResult,
                                       NSError * _Nullable error) {
    if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
      FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
      NSMutableString *displayNameString = [NSMutableString string];
      for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
        [displayNameString appendString:tmpFactorInfo.displayName];
        [displayNameString appendString:@" "];
      }
      [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                           completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
       FIRPhoneMultiFactorInfo* selectedHint;
       for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
         if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
           selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
         }
       }
       [FIRPhoneAuthProvider.provider
        verifyPhoneNumberWithMultiFactorInfo:selectedHint
        UIDelegate:nil
        multiFactorSession:resolver.session
        completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
          if (error) {
            [self showMessagePrompt:error.localizedDescription];
          } else {
            [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                 completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
             FIRPhoneAuthCredential *credential =
                 [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                              verificationCode:verificationCode];
             FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
             [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
               if (error) {
                 [self showMessagePrompt:error.localizedDescription];
               } else {
                 NSLog(@"Multi factor finanlize sign in succeeded.");
               }
             }];
           }];
          }
        }];
     }];
    }
  else if (error) {
    // ...
    return;
  }
  // User successfully signed in. Get user data from the FIRUser object
  if (authResult == nil) { return; }
  FIRUser *user = authResult.user;
  // ...
}];

다음 단계

처음 사용자가 로그인 한 후, 새 사용자 계정이 만들어지고 자격 증명-이며, 사용자 이름과 비밀번호, 전화 번호, 또는에 로그인 인증 제공자 정보를 사용자에게 연결. 이 새로운 계정은 중포 기지 프로젝트의 일환으로 저장되고, 관계에서 어떻게 사용자 징후, 프로젝트의 모든 응용 프로그램에서 사용자를 식별 할 수 있습니다.

  • 당신의 애플 리케이션에서, 당신은에서 사용자의 기본 프로필 정보를 얻을 수 있습니다 FIRUser 개체를. 페이지는 사용자 관리 .

  • 당신의 중포 기지 실시간 데이터베이스 및 클라우드 스토리지에 보안 규칙 , 당신은 얻을 수로부터 사용자의 고유 한 사용자 ID에 서명 auth 변수와 어떤 데이터를 사용자가 액세스 할 수 제어하는 데 사용합니다.

당신은 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 할 수 있습니다 기존 사용자 계정에 인증 업체 자격 증명을 연결.

사용자를 로그 아웃하려면 전화 signOut: .

빠른

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

목표 - C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

또한 인증 오류의 전체 범위에 대한 오류 처리 코드를 추가 할 수 있습니다. 참조 핸들 오류 .

,

당신은 사용자가 앱에 구글 로그인을 통합하여 Google 계정을 사용하여 중포 기지를 인증하도록 할 수 있습니다.

시작하기 전에

  1. 애플 프로젝트에 중포 기지를 추가합니다 . 당신의 다음 포드 포함 Podfile :
    pod 'FirebaseAuth'
    pod 'GoogleSignIn'
    
  2. 당신이 아직 중포 기지 프로젝트에 응용 프로그램을 연결하지 않은 경우에서 그렇게 중포 기지 콘솔 .
  3. 사인-에서 중포 기지 콘솔의 방법으로 구글을 사용 :
    1. 에서 중포 기지 콘솔인증 섹션을 엽니 다.
    2. 방법 탭에서 로그인에서 구글 로그인 방법을 활성화하고 저장을 클릭합니다.

1. 가져 오기 필요한 헤더 파일

먼저, 앱에 중포 기지 SDK와 구글 로그인 SDK 헤더 파일을 가져와야합니다.

빠른

import FirebaseCore
import GoogleSignIn

목표 - C

@import FirebaseCore;
@import GoogleSignIn;

구글 로그인을 구현합니다

다음 단계에 따라 구글 로그인을 구현합니다. 참고 항목 구글 로그인 개발자 문서에 아이폰 OS와 구글 로그인을 사용하는 방법에 대한 자세한 내용을.

  1. Xcode 프로젝트에 사용자 정의 URL 체계를 추가 :
    1. 프로젝트 구성을 엽니 왼쪽 트리보기에서 프로젝트 이름을 두 번 클릭합니다. 다음, 대상 섹션에서 응용 프로그램을 선택하고 정보 탭을 선택하고 URL 유형 섹션을 확장합니다.
    2. + 버튼을 클릭하고 반전 클라이언트 ID에 대한 URL 방식을 추가 할 수 있습니다. 이 값을 찾으려면 열 GoogleService-Info.plist 구성 파일을, 그리고에 대한 모습 REVERSED_CLIENT_ID 키를 누릅니다. 해당 키의 값을 복사 한 구성표가 구성 페이지에 상자의 URL에 붙여 넣습니다. 다른 필드를 비워 둡니다.

      완료되면, 당신의 설정은 (그러나 응용 프로그램 고유의 값으로) 다음과 같은 보일 것이다 :

  2. 앱 대리인의에서 application:didFinishLaunchingWithOptions: 방법, 구성 FirebaseApp 개체를.

    빠른

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    목표 - C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. 도구 용 application:openURL:options: 앱 위임의 방법을. 이 방법은 호출해야 handleURL 의 방법 GIDSignIn 제대로 응용 프로그램이 인증 프로세스의 마지막에 수신하는 URL을 처리 할 인스턴스를.

    빠른

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any])
      -> Bool {
      return GIDSignIn.sharedInstance.handle(url)
    }
    

    목표 - C

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
    
  4. 로그인 방법은 구글 로그인 귀하의 응용 프로그램에 대한 제시 뷰 컨트롤러와 클라이언트 ID에 합격 만들 중포 기지 인증 자격 증명에서 결과 구글 인증 토큰 :

    빠른

    guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    
    // Create Google Sign In configuration object.
    let config = GIDConfiguration(clientID: clientID)
    
    // Start the sign in flow!
    GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
    
      if let error = error {
        // ...
        return
      }
    
      guard
        let authentication = user?.authentication,
        let idToken = authentication.idToken
      else {
        return
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: authentication.accessToken)
    
      // ...
    }
    

    목표 - C

    GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
    
    __weak __auto_type weakSelf = self;
    [GIDSignIn.sharedInstance signInWithConfiguration:config presentingViewController:self callback:^(GIDGoogleUser * _Nullable user, NSError * _Nullable error) {
      __auto_type strongSelf = weakSelf;
      if (strongSelf == nil) { return; }
    
      if (error == nil) {
        GIDAuthentication *authentication = user.authentication;
        FIRAuthCredential *credential =
        [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                         accessToken:authentication.accessToken];
        // ...
      } else {
        // ...
      }
    }];
    
    
  5. 추가 GIDSignInButton 스토리 보드, XIB 파일, 또는 프로그램을 인스턴스화합니다. 스토리 보드 또는 XIB 파일에 버튼을 추가하려면보기를 추가하고 해당 사용자 정의 클래스를 설정 GIDSignInButton .
  6. 옵션 : 버튼을 사용자 정의하려면 다음을 수행합니다 :

    빠른

    1. 보기 컨트롤러에서 로그인 버튼 속성으로 선언합니다.
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. 받는 버튼을 연결 signInButton 방금 선언 속성입니다.
    3. 의 속성을 설정하여 버튼을 사용자 정의 GIDSignInButton의 개체를.

    목표 - C

    1. 뷰 컨트롤러의 헤더 파일에서 로그인 버튼 속성으로 선언합니다.
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. 받는 버튼을 연결 signInButton 방금 선언 속성입니다.
    3. 의 속성을 설정하여 버튼을 사용자 정의 GIDSignInButton의 개체를.

중포 기지 3. 인증합니다

마지막으로, 이전 단계에서 생성 된 인증 자격 증명과 중포 기지 로그인 프로세스를 완료합니다.

빠른

Auth.auth().signIn(with: credential) { authResult, error in
    if let error = error {
      let authError = error as NSError
      if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
        // The user is a multi-factor user. Second factor challenge is required.
        let resolver = authError
          .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
        var displayNameString = ""
        for tmpFactorInfo in resolver.hints {
          displayNameString += tmpFactorInfo.displayName ?? ""
          displayNameString += " "
        }
        self.showTextInputPrompt(
          withMessage: "Select factor to sign in\n\(displayNameString)",
          completionBlock: { userPressedOK, displayName in
            var selectedHint: PhoneMultiFactorInfo?
            for tmpFactorInfo in resolver.hints {
              if displayName == tmpFactorInfo.displayName {
                selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
              }
            }
            PhoneAuthProvider.provider()
              .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                 multiFactorSession: resolver
                                   .session) { verificationID, error in
                if error != nil {
                  print(
                    "Multi factor start sign in failed. Error: \(error.debugDescription)"
                  )
                } else {
                  self.showTextInputPrompt(
                    withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                    completionBlock: { userPressedOK, verificationCode in
                      let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                        .credential(withVerificationID: verificationID!,
                                    verificationCode: verificationCode!)
                      let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                        .assertion(with: credential!)
                      resolver.resolveSignIn(with: assertion!) { authResult, error in
                        if error != nil {
                          print(
                            "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                          )
                        } else {
                          self.navigationController?.popViewController(animated: true)
                        }
                      }
                    }
                  )
                }
              }
          }
        )
      } else {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      // ...
      return
    }
    // User is signed in
    // ...
}

목표 - C

[[FIRAuth auth] signInWithCredential:credential
                          completion:^(FIRAuthDataResult * _Nullable authResult,
                                       NSError * _Nullable error) {
    if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
      FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
      NSMutableString *displayNameString = [NSMutableString string];
      for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
        [displayNameString appendString:tmpFactorInfo.displayName];
        [displayNameString appendString:@" "];
      }
      [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                           completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
       FIRPhoneMultiFactorInfo* selectedHint;
       for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
         if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
           selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
         }
       }
       [FIRPhoneAuthProvider.provider
        verifyPhoneNumberWithMultiFactorInfo:selectedHint
        UIDelegate:nil
        multiFactorSession:resolver.session
        completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
          if (error) {
            [self showMessagePrompt:error.localizedDescription];
          } else {
            [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                 completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
             FIRPhoneAuthCredential *credential =
                 [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                              verificationCode:verificationCode];
             FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
             [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
               if (error) {
                 [self showMessagePrompt:error.localizedDescription];
               } else {
                 NSLog(@"Multi factor finanlize sign in succeeded.");
               }
             }];
           }];
          }
        }];
     }];
    }
  else if (error) {
    // ...
    return;
  }
  // User successfully signed in. Get user data from the FIRUser object
  if (authResult == nil) { return; }
  FIRUser *user = authResult.user;
  // ...
}];

다음 단계

처음 사용자가 로그인 한 후, 새 사용자 계정이 만들어지고 자격 증명-이며, 사용자 이름과 비밀번호, 전화 번호, 또는에 로그인 인증 제공자 정보를 사용자에게 연결. 이 새로운 계정은 중포 기지 프로젝트의 일환으로 저장되고, 관계에서 어떻게 사용자 징후, 프로젝트의 모든 응용 프로그램에서 사용자를 식별 할 수 있습니다.

  • 당신의 애플 리케이션에서, 당신은에서 사용자의 기본 프로필 정보를 얻을 수 있습니다 FIRUser 개체를. 페이지는 사용자 관리 .

  • 당신의 중포 기지 실시간 데이터베이스 및 클라우드 스토리지에 보안 규칙 , 당신은 얻을 수로부터 사용자의 고유 한 사용자 ID에 서명 auth 변수와 어떤 데이터를 사용자가 액세스 할 수 제어하는 데 사용합니다.

당신은 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 할 수 있습니다 기존 사용자 계정에 인증 업체 자격 증명을 연결.

사용자를 로그 아웃하려면 전화 signOut: .

빠른

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

목표 - C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

또한 인증 오류의 전체 범위에 대한 오류 처리 코드를 추가 할 수 있습니다. 참조 핸들 오류 .