Twitter 인증을 앱에 통합하여 사용자가 Twitter 계정을 사용하여 Firebase에 인증하도록 할 수 있습니다.
시작하기 전에
- C++ 프로젝트에 Firebase를 추가합니다 .
- Firebase 콘솔 에서 인증 섹션을 엽니다.
- 로그인 방법 탭에서 Twitter 공급자를 활성화합니다.
- 해당 제공자의 개발자 콘솔에서 제공자 구성에 API 키 및 API 시크릿 을 추가하십시오.
- Twitter에서 앱을 개발자 애플리케이션으로 등록 하고 앱의 OAuth API 키 와 API 비밀 을 가져옵니다.
- Firebase OAuth 리디렉션 URI (예:
my-app-12345.firebaseapp.com/__/auth/handler
)가 Twitter 앱 구성의 앱 설정 페이지에서 승인 콜백 URL 로 설정되어 있는지 확인합니다.
- 저장 을 클릭합니다.
firebase::auth::Auth
클래스에 액세스
Auth
클래스는 모든 API 호출의 게이트웨이입니다.- 인증 및 앱 헤더 파일 추가:
#include "firebase/app.h" #include "firebase/auth.h"
- 초기화 코드에서
firebase::App
클래스를 만듭니다.#if defined(__ANDROID__) firebase::App* app = firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity); #else firebase::App* app = firebase::App::Create(firebase::AppOptions()); #endif // defined(__ANDROID__)
-
firebase::App
에 대한firebase::auth::Auth
클래스를 가져옵니다.App
과Auth
간에 일대일 매핑이 있습니다.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Firebase로 인증
- Twitter로 로그인 문서를 따라 OAuth 액세스 토큰과 OAuth 비밀을 받으세요.
- 사용자가 성공적으로 로그인한 후 토큰과 비밀을 Firebase 자격 증명으로 교환하고 Firebase 자격 증명을 사용하여 Firebase에 인증합니다.
firebase::auth::Credential credential = firebase::auth::TwitterAuthProvider::GetCredential(token, secret); firebase::Future<firebase::auth::User*> result = auth->SignInWithCredential(credential);
- 프로그램에 정기적으로 실행되는 업데이트 루프가 있는 경우(예: 초당 30회 또는 60회)
Auth::SignInWithCredentialLastResult
:firebase::Future<firebase::auth::User*> result = auth->SignInWithCredentialLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::User* user = *result.result(); printf("Sign in succeeded for `%s`\n", user->display_name().c_str()); } else { printf("Sign in failed with error '%s'\n", result.error_message()); } }
를 사용하여 업데이트당 한 번 결과를 확인할 수 있습니다. 또는 프로그램이 이벤트 기반인 경우 선호할 수 있습니다. Future 에 콜백을 등록합니다 .
Future에 콜백 등록
일부 프로그램에는 초당 30번 또는 60번 호출되는Update
기능이 있습니다. 예를 들어 많은 게임이 이 모델을 따릅니다. 이러한 프로그램은 LastResult
함수를 호출하여 비동기 호출을 폴링할 수 있습니다. 그러나 프로그램이 이벤트 기반인 경우 콜백 함수를 등록하는 것을 선호할 수 있습니다. Future가 완료되면 콜백 함수가 호출됩니다.void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result, void* user_data) { // The callback is called when the Future enters the `complete` state. assert(result.status() == firebase::kFutureStatusComplete); // Use `user_data` to pass-in program context, if you like. MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data); // Important to handle both success and failure situations. if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::User* user = *result.result(); printf("Create user succeeded for email %s\n", user->email().c_str()); // Perform other actions on User, if you like. firebase::auth::User::UserProfile profile; profile.display_name = program_context->display_name; user->UpdateUserProfile(profile); } else { printf("Created user failed with error '%s'\n", result.error_message()); } } void CreateUser(firebase::auth::Auth* auth) { // Callbacks work the same for any firebase::Future. firebase::Future<firebase::auth::User*> result = auth->CreateUserWithEmailAndPasswordLastResult(); // `&my_program_context` is passed verbatim to OnCreateCallback(). result.OnCompletion(OnCreateCallback, &my_program_context); }원하는 경우 콜백 함수를 람다가 사용할 수도 있습니다.
void CreateUserUsingLambda(firebase::auth::Auth* auth) { // Callbacks work the same for any firebase::Future. firebase::Future<firebase::auth::User*> result = auth->CreateUserWithEmailAndPasswordLastResult(); // The lambda has the same signature as the callback function. result.OnCompletion( [](const firebase::Future<firebase::auth::User*>& result, void* user_data) { // `user_data` is the same as &my_program_context, below. // Note that we can't capture this value in the [] because std::function // is not supported by our minimum compiler spec (which is pre C++11). MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data); // Process create user result... (void)program_context; }, &my_program_context); }
다음 단계
사용자가 처음으로 로그인하면 새 사용자 계정이 생성되어 사용자가 로그인한 자격 증명(즉, 사용자 이름 및 암호, 전화 번호 또는 인증 공급자 정보)에 연결됩니다. 이 새 계정은 Firebase 프로젝트의 일부로 저장되며 사용자 로그인 방식에 관계없이 프로젝트의 모든 앱에서 사용자를 식별하는 데 사용할 수 있습니다.
앱에서
firebase::auth::User
객체에서 사용자의 기본 프로필 정보를 가져올 수 있습니다.firebase::auth::User* user = auth->current_user(); if (user != nullptr) { std::string name = user->display_name(); std::string email = user->email(); std::string photo_url = user->photo_url(); // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use firebase::auth::User::Token() instead. std::string uid = user->uid(); }
Firebase 실시간 데이터베이스 및 Cloud Storage 보안 규칙 에서
auth
변수에서 로그인한 사용자의 고유 사용자 ID를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 데 사용할 수 있습니다.
인증 공급자 자격 증명을 기존 사용자 계정에 연결하여 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 허용할 수 있습니다.
사용자를 로그아웃하려면 SignOut()
을 호출합니다.
auth->SignOut();