āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āϤāĻžāĻĻā§āϰ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Firebase āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰāϤ⧠āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ-āĻāĻŋāϤā§āϤāĻŋāĻ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻāĻā§āϞāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ⧠āĻāĻĒāύāĻŋ Firebase Authentication āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĒāύāĻŋ āĻļā§āϰ⧠āĻāϰāĻžāϰ āĻāĻā§
- āĻāĻĒāύāĻžāϰ C++ āĻĒā§āϰāĻāϞā§āĻĒā§ Firebase āϝā§āĻ āĻāϰā§āύ āĨ¤
- āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻāύāĻ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒāĻāĻŋāĻā§ āĻāĻĒāύāĻžāϰ Firebase āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤ āύāĻž āĻāϰ⧠āĻĨāĻžāĻā§āύ, āϤāĻžāĻšāϞ⧠Firebase āĻāύāϏā§āϞ āĻĨā§āĻā§ āϤāĻž āĻāϰā§āύ⧎
- āĻāĻŽā§āϞ/āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āϏāĻžāĻāύ-āĻāύ āϏāĻā§āώāĻŽ āĻāϰā§āύ:
- Firebase āĻāύāϏā§āϞ⧠, Auth āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻā§āϞā§āύāĨ¤
- āϏāĻžāĻāύ āĻāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻā§āϝāĻžāĻŦā§, āĻāĻŽā§āϞ/āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āϏāĻžāĻāύ-āĻāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻā§āώāĻŽ āĻāϰā§āύ āĻāĻŦāĻ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύ āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤
firebase::auth::Auth
āĻā§āϞāĻžāϏ āĻ
ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰā§āύ
Auth
āĻā§āϞāĻžāϏ āĻšāϞ āϏāĻŽāϏā§āϤ API āĻāϞā§āϰ āĻā§āĻāĻāϝāĻŧā§āĨ¤- Auth āĻāĻŦāĻ āĻ
ā§āϝāĻžāĻĒ āĻšā§āĻĄāĻžāϰ āĻĢāĻžāĻāϞ āϝā§āĻ āĻāϰā§āύ:
#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);
āĻāĻāĻāĻŋ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ-āĻāĻŋāϤā§āϤāĻŋāĻ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ
āĻāĻāĻāĻŋ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āϏāĻš āĻāĻāĻāĻŋ āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰāϤā§, āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āϏāĻžāĻāύ-āĻāύ āĻā§āĻĄā§ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāϰā§āύ:
- āϝāĻāύ āĻāĻāĻāύ āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āϏāĻžāĻāύ-āĻāĻĒ āĻĢāϰā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻžāĻāύ āĻāĻĒ āĻāϰā§āύ, āϤāĻāύ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϝā§āĻā§āύ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϝāĻžāĻāĻžāĻāĻāϰāĻŖā§āϰ āϧāĻžāĻĒāĻā§āϞāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāϰā§āύ, āϝā§āĻŽāύ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻā§āϰ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāĻāĻĒ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŋāύāĻž āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻāĻāĻŋāϞāϤāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž āĻĒā§āϰāĻŖ āĻāϰ⧠āϤāĻž āϝāĻžāĻāĻžāĻ āĻāϰāĻžāĨ¤
- āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ
Auth::CreateUserWithEmailAndPassword
āĻ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻāĻŋ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPassword(email, password);
- āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻāĻĒāĻĄā§āĻ āϞā§āĻĒ āĻĨāĻžāĻā§ āϝāĻž āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻāϞ⧠(āĻŦāϞā§āύ āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ 30 āĻŦāĻž 60 āĻŦāĻžāϰ), āĻāĻĒāύāĻŋ
Auth::CreateUserWithEmailAndPasswordLastResult
āϏāĻžāĻĨā§ āĻāĻĒāĻĄā§āĻ āĻĒā§āϰāϤāĻŋ āĻāĻāĻŦāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ: āĻ āĻĨāĻŦāĻž, āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻā§āύā§āĻ āĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ, āĻāĻĒāύāĻŋ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻāĻāĻāĻŋ āĻāϞāĻŦā§āϝāĻžāĻ āύāĻŋāĻŦāύā§āϧāύ āĻāϰāϤ⧠āĻĒāĻāύā§āĻĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPasswordLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { const firebase::auth::AuthResult auth_result = *result.result(); printf("Create user succeeded for email %s\n", auth_result.user.email().c_str()); } else { printf("Created user failed with error '%s'\n", result.error_message()); } }
āĻāĻāĻāĻŋ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ
āĻāĻāĻāĻŋ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āĻāĻāĻāĻŋ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋāϰ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋāϰ āĻ āύā§āϰā§āĻĒ⧎ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āϏāĻžāĻāύ-āĻāύ āĻĢāĻžāĻāĻļāύā§, āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤāĻā§āϞāĻŋ āĻāϰā§āύ:
- āϝāĻāύ āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§ āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ, āϤāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄāĻāĻŋ
firebase::auth::Auth::SignInWithEmailAndPassword
āĻ āĻĒāĻžāϏ āĻāϰā§āύāĨ¤firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithEmailAndPassword(email, password);
- āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻāĻĒāĻĄā§āĻ āϞā§āĻĒ āĻĨāĻžāĻā§ āϝāĻž āύāĻŋāϝāĻŧāĻŽāĻŋāϤāĻāĻžāĻŦā§ āĻāϞ⧠(āĻŦāϞā§āύ āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ 30 āĻŦāĻž 60 āĻŦāĻžāϰ), āĻāĻĒāύāĻŋ
Auth::SignInWithEmailAndPasswordLastResult
āϏāĻžāĻĨā§ āĻāĻĒāĻĄā§āĻ āĻĒā§āϰāϤāĻŋ āĻāĻāĻŦāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ : āĻ āĻĨāĻŦāĻž, āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻā§āύā§āĻ āĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ, āĻāĻĒāύāĻŋ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻāĻāĻāĻŋ āĻāϞāĻŦā§āϝāĻžāĻ āύāĻŋāĻŦāύā§āϧāύ āĻāϰāϤ⧠āĻĒāĻāύā§āĻĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithEmailAndPasswordLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { const firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for email %s\n", auth_result.user.email().c_str()); } else { printf("Sign in failed with error '%s'\n", result.error_message()); } }
āĻāĻāĻāĻŋ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻāĻāĻāĻŋ āĻāϞāĻŦā§āϝāĻžāĻ āύāĻŋāĻŦāύā§āϧāύ āĻāϰā§āύ
āĻāĻŋāĻā§ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§Update
āĻĢāĻžāĻāĻļāύ āĻĨāĻžāĻā§ āϝāĻž āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ 30 āĻŦāĻž 60 āĻŦāĻžāϰ āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻ
āύā§āĻ āĻā§āĻŽ āĻāĻ āĻŽāĻĄā§āϞ āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āĨ¤ āĻāĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§āϞāĻŋ āĻ
ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āĻāϞāĻā§āϞāĻŋ āĻĒā§āϞ āĻāϰāϤ⧠LastResult
āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋāĻā§ āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝāĻžāĻāĻšā§āĻ, āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻā§āύā§āĻ āĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ, āĻāĻĒāύāĻŋ āĻāϞāĻŦā§āϝāĻžāĻ āĻĢāĻžāĻāĻļāύ āύāĻŋāĻŦāύā§āϧāύ āĻāϰāϤ⧠āĻĒāĻāύā§āĻĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻāĻāĻŋ āĻāϞāĻŦā§āϝāĻžāĻ āĻĢāĻžāĻāĻļāύ āĻāĻŦāĻŋāώā§āϝāϤ āϏāĻŽāĻžāĻĒā§āϤāĻŋāϰ āĻāĻĒāϰ āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤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::AuthResult> 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::AuthResult> 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 Authentication āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āύā§āϤāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž āϏāĻŽāϰā§āĻĨāύ āĻāϰā§:
āĻā§āĻ āĻšāĻžāϤā§āϰ āĻ āĻā§āώāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ
āĻŦāĻĄāĻŧ āĻšāĻžāϤā§āϰ āĻ āĻā§āώāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ
āϏāĻāĻā§āϝāĻžāϏā§āĻāĻ āĻ āĻā§āώāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ
āύāύ-āĻāϞāĻĢāĻžāύāĻŋāĻāĻŽā§āϰāĻŋāĻ āĻ āĻā§āώāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ
āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻ āĻā§āώāϰāĻā§āϞāĻŋ āĻ -āĻāϞāĻĢāĻžāύāĻŋāĻāĻŽā§āϰāĻŋāĻ āĻ āĻā§āώāϰ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž āĻĒā§āϰāĻŖ āĻāϰā§:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
āύā§āϝā§āύāϤāĻŽ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĻā§āϰā§āĻā§āϝ (6 āĻĨā§āĻā§ 30 āĻ āĻā§āώāϰ āĻĒāϰā§āϝāύā§āϤ; āĻĄāĻŋāĻĢāϞā§āĻ 6 āĻĒāϰā§āϝāύā§āϤ)
āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄā§āϰ āϏāϰā§āĻŦā§āĻā§āĻ āĻĻā§āϰā§āĻā§āϝ (āϏāϰā§āĻŦāĻžāϧāĻŋāĻ āĻĻā§āϰā§āĻā§āϝ 4096 āĻ āĻā§āώāϰ)
āĻāĻĒāύāĻŋ āĻĻā§āĻāĻŋ āĻŽā§āĻĄā§ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āύā§āϤāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āϏāĻā§āώāĻŽ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
āĻĒā§āϰāϝāĻŧā§āĻāύ : āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻĒāύāĻžāϰ āύā§āϤāĻŋ āĻŽā§āύ⧠āĻāϞāĻž āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻāĻĒāĻĄā§āĻ āύāĻž āĻāϰāĻž āĻĒāϰā§āϝāύā§āϤ āϏāĻžāĻāύ āĻāĻĒ āĻāϰāĻžāϰ āĻĒā§āϰāĻā§āώā§āĻāĻž āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧāĨ¤
āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ : āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻāĻāĻāĻŋ āĻ -āϏāĻā§āĻāϤ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āϏāĻžāĻāύ āĻāĻĒ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻāĻ āĻŽā§āĻĄāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄāĻāĻŋ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻĒāĻā§āώā§āϰ āύā§āϤāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻā§āĻāϤāĻŋāĻĒā§āϰā§āĻŖ āĻāĻŋāύāĻž āϤāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻāĻāĻŋāϤ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϤāĻžāĻĻā§āϰ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻāĻĒāĻĄā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āύā§āϰā§āϧ āĻāϰāĻž āĻāĻāĻŋāϤ āϝāĻĻāĻŋ āĻāĻāĻŋ āĻŽā§āύ⧠āύāĻž āĻāϞā§āĨ¤
āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āϏāϰā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻāϝāĻŧāύ āĻāϰāϤ⧠āĻšāĻŦā§ āϝāĻž āĻāĻĒāύāĻžāϰ āύā§āϤāĻŋ āĻŽā§āύ⧠āĻāϞā§āĨ¤
āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĨāĻžāĻā§, āĻāĻŽāϰāĻž āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰāĻŋ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻā§āϰ āĻāϰ⧠āĻāĻĒāĻā§āϰā§āĻĄ āϏāĻā§āώāĻŽ āύāĻž āĻāϰāĻž āϝāϤāĻā§āώāĻŖ āύāĻž āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻŦā§āϞāĻ āĻāϰāϤ⧠āĻāĻžāύ āϝāĻžāĻĻā§āϰ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄāĻā§āϞāĻŋ āĻāĻĒāύāĻžāϰ āύā§āϤāĻŋ āĻŽā§āύ⧠āĻāϞ⧠āύāĻžā§ˇ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ āĻŽā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āϤāĻžāĻĻā§āϰ āĻŦāϰā§āϤāĻŽāĻžāύ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āϏāĻžāĻāύ āĻāύ āĻāϰāϤ⧠āĻĻā§āϝāĻŧ āĻāĻŦāĻ āϤāĻžāĻĻā§āϰ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄā§āϰ āĻ āĻāĻžāĻŦā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž āϏāĻŽā§āĻĒāϰā§āĻā§ āϤāĻžāĻĻā§āϰ āĻ āĻŦāĻšāĻŋāϤ āĻāϰā§āĨ¤
āĻĒā§āϰāϏā§āϤāĻžāĻŦāĻŋāϤ: āĻāĻŽā§āϞ āĻāĻŖāύāĻž āϏā§āϰāĻā§āώāĻž āϏāĻā§āώāĻŽ āĻāϰā§āύ
āĻāĻŋāĻā§ Firebase Authentication āĻĒāĻĻā§āϧāϤāĻŋ āϝāĻž āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻžāĻā§āϞāĻŋāĻā§ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻšāĻŋāϏāĻžāĻŦā§ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āϏā§āĻā§āϞāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϤā§āϰā§āĻāĻŋāĻā§āϞāĻŋ āĻĢā§āϞ⧠āϝāĻĻāĻŋ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻžāĻāĻŋ āύāĻŋāĻŦāύā§āϧāĻŋāϤ āύāĻž āĻĨāĻžāĻāĻž āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĨāĻžāĻā§ (āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻāĻāĻŋ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ), āĻŦāĻž āϝāĻāύ āĻāĻāĻŋ āĻ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ āϤāĻāύ āύāĻŋāĻŦāύā§āϧāĻŋāϤ āĻšāϝāĻŧ (āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ)āĨ¤ āϝāĻĻāĻŋāĻ āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒā§āϰāϤāĻŋāĻāĻžāϰā§āϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻā§āĻāϝāĻŧāĻžāϰ āĻāύā§āϝ āϏāĻšāĻžāϝāĻŧāĻ āĻšāϤ⧠āĻĒāĻžāϰā§, āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻŦāύā§āϧāĻŋāϤ āĻāĻŽā§āϞ āĻ āĻŋāĻāĻžāύāĻžāĻā§āϞāĻŋ āĻāĻŦāĻŋāώā§āĻāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĻā§āώāĻŋāϤ āĻ āĻāĻŋāύā§āϤāĻžāĻĻā§āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻ āĻĒāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻ āĻā§āĻāĻāĻŋ āĻāĻŽāĻžāϤā§, āĻāĻŽāϰāĻž āĻāĻĒāύāĻžāĻā§ Google Cloud gcloud
āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻāύā§āϝ āĻāĻŽā§āϞ āĻāĻŖāύāĻž āϏā§āϰāĻā§āώāĻž āϏāĻā§āώāĻŽ āĻāϰāĻžāϰ āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰāĻāĻŋāĨ¤ āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āĻāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ āϏāĻā§āώāĻŽ āĻāϰāϞ⧠Firebase Authentication āϤā§āϰā§āĻāĻŋ āϰāĻŋāĻĒā§āϰā§āĻāĻŋāĻ āĻāĻāϰāĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšāϝāĻŧ: āύāĻŋāĻļā§āĻāĻŋāϤ āĻšāύ āϝ⧠āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒāĻāĻŋ āĻāϰāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϤā§āϰā§āĻāĻŋāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āύāĻžāĨ¤
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒ
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āĻĒāϰā§, āĻāĻāĻāĻŋ āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϞāĻŋāĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧâāĻ āϰā§āĻĨāĻžā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ, āĻĢā§āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āϰ āϤāĻĨā§āϝ â āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻžāĻāύ āĻāύ āĻāϰā§āĻā§āύāĨ¤ āĻāĻ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āĻāĻžāĻŦā§ āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ āύāĻž āĻā§āύ, āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ ā§āϝāĻžāĻĒ āĻā§āĻĄāĻŧā§ āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻļāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§, āĻāĻĒāύāĻŋ
firebase::auth::User
āĻ āĻŦāĻā§āĻā§āĻ āĻĨā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻŽā§āϞāĻŋāĻ āĻĒā§āϰā§āĻĢāĻžāĻāϞ āϤāĻĨā§āϝ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ:firebase::auth::User user = auth->current_user(); if (user.is_valid()) { 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 Realtime Database āĻāĻŦāĻ Cloud Storage āϏā§āϰāĻā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§ , āĻāĻĒāύāĻŋ
auth
āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻĨā§āĻā§ āϏāĻžāĻāύ-āĻāύ āĻāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ āύāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āύ āĻĄā§āĻāĻž āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āϤāĻž āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāϤ⧠āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϏāĻžāĻāύ āĻāĻāĻ āĻāϰāϤā§, SignOut()
āĻāϞ āĻāϰā§āύ :
auth->SignOut();