āĻā§āύ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻĢāϞāĻāĻžāĻŦā§ āϏāĻžāĻāύ āĻāύ āĻāϰāϞ⧠āĻāĻĒāύāĻŋ āĻāĻžāϏā§āĻāĻŽ āϏāĻžāĻāύāĻĄ āĻā§āĻā§āύ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϏāĻžāϰā§āĻāĻžāϰāĻā§ āϏāĻāĻļā§āϧāύ āĻāϰ⧠āĻāĻāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϏāĻžāĻĨā§ Firebase Authentication āĻāĻā§āĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ⧎ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒāĻāĻŋ āĻāĻ āĻā§āĻā§āύāĻāĻŋ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āĻāĻŦāĻ Firebase āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰāϤ⧠āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§ā§ˇ
āĻāĻĒāύāĻŋ āĻļā§āϰ⧠āĻāϰāĻžāϰ āĻāĻā§
- āĻāĻĒāύāĻžāϰ C++ āĻĒā§āϰāĻāϞā§āĻĒā§ Firebase āϝā§āĻ āĻāϰā§āύ āĨ¤
- āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āϏāĻžāϰā§āĻāĻžāϰ āĻā§ āĻĒāĻžāύ:
- āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āϏā§āĻāĻŋāĻāϏ⧠āĻĒāϰāĻŋāώā§āĻŦāĻž āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻĒā§āώā§āĻ āĻžāϤ⧠āϝāĻžāύāĨ¤
- āϏāĻžāϰā§āĻāĻŋāϏ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻĒā§āώā§āĻ āĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻ ā§āϝāĻžāĻĄāĻŽāĻŋāύ SDK āĻŦāĻŋāĻāĻžāĻā§āϰ āύā§āĻā§ āĻā§āύāĻžāϰā§āĻ āύāĻŋāĻ āĻĒā§āϰāĻžāĻāĻā§āĻ āĻā§ āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤
- āύāϤā§āύ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻā§āϰ āĻĒāĻžāĻŦāϞāĻŋāĻ/āĻĒā§āϰāĻžāĻāĻā§āĻ āĻā§ āĻā§āĻĄāĻŧāĻž āĻāĻĒāύāĻžāϰ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ⧠āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŋāϤ āĻšāϝāĻŧāĨ¤ āĻāĻ āĻĢāĻžāĻāϞāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻ āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§āύāĨ¤
Firebase āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻāϰā§āύ
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::SignInWithCustomToken
āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻā§āĻā§āύ āϏāĻšāĨ¤- āϝāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§ āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ, āϤāĻāύ āϤāĻžāĻĻā§āϰ āϏāĻžāĻāύ-āĻāύ āĻļāĻāϏāĻžāĻĒāϤā§āϰ (āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϤāĻžāĻĻā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ) āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĒāĻžāĻ āĻžāύāĨ¤ āĻāĻĒāύāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻļāĻāϏāĻžāĻĒāϤā§āϰāĻā§āϞāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻā§āĻā§āύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āϝāĻĻāĻŋ āϏā§āĻā§āϞāĻŋ āĻŦā§āϧ āĻšāϝāĻŧ⧎
- āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻāĻžāϏā§āĻāĻŽ āĻā§āĻā§āύ āĻĒāĻžāĻāϝāĻŧāĻžāϰ āĻĒāϰ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϏāĻžāĻāύ āĻāύ āĻāϰāϤā§
Auth::SignInWithCustomToken
āĻ āĻĒāĻžāϏ āĻāϰā§āύ:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token);
- āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻāĻĒāĻĄā§āĻ āϞā§āĻĒ āĻĨāĻžāĻā§ āϝāĻž āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻāϞ⧠(āĻŦāϞā§āύ āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ 30 āĻŦāĻž 60 āĻŦāĻžāϰ), āĻāĻĒāύāĻŋ
Auth::SignInWithCustomTokenLastResult
āĻāϰ āϏāĻžāĻĨā§ āĻāĻĒāĻĄā§āĻ āĻĒā§āϰāϤāĻŋ āĻāĻāĻŦāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ : āĻ āĻĨāĻŦāĻž, āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻā§āύā§āĻ āĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ, āĻāĻĒāύāĻŋ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻāĻāĻāĻŋ āĻāϞāĻŦā§āϝāĻžāĻ āύāĻŋāĻŦāύā§āϧāύ āĻāϰāϤ⧠āĻĒāĻāύā§āĻĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomTokenLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for `%s`\n", auth_result.user.display_name().c_str()); } else { printf("Sign in failed with error '%s'\n", result.error_message()); } }
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒ
āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāĻāύ āĻāύ āĻāϰāĻžāϰ āĻĒāϰā§, āĻāĻāĻāĻŋ āύāϤā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻļāĻāϏāĻžāĻĒāϤā§āϰāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϞāĻŋāĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧâāĻ āϰā§āĻĨāĻžā§, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ, āĻĢā§āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āϰ āϤāĻĨā§āϝ â āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϏāĻžāĻāύ āĻāύ āĻāϰā§āĻā§āύāĨ¤ āĻāĻ āύāϤā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āĻāĻžāĻŦā§ āϏāĻžāĻāύ āĻāύ āĻāϰā§āύ āύāĻž āĻā§āύ, āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ ā§āϝāĻžāĻĒ āĻā§āĻĄāĻŧā§ āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻļāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§, āĻāĻĒāύāĻŋ
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();