Twitter kimlik doğrulamasını uygulamanıza entegre ederek, kullanıcılarınızın Firebase ile Twitter hesaplarını kullanarak kimlik doğrulamasına izin verebilirsiniz.
Sen başlamadan önce
- Firebase'i C ++ projenize ekleyin .
- In Firebase konsoluna , Auth bölümünü açın.
- Oturum açma yöntemi sekmesinde, Twitter sağlayıcısını etkinleştirin.
- Sağlayıcının geliştirici konsolundan API anahtarını ve API sırrını sağlayıcı yapılandırmasına ekleyin:
- Uygulamanızı Twitter'da bir geliştirici uygulaması olarak kaydedin ve uygulamanızın OAuth API anahtarını ve API sırrını alın .
-
my-app-12345.firebaseapp.com/__/auth/handler
OAuth yönlendirme URI'nizin (ör.my-app-12345.firebaseapp.com/__/auth/handler
), Twitter uygulamanızın yapılandırmasında uygulamanızın ayarlar sayfasında Yetkilendirme geri arama URL'niz olarak ayarlandığından emin olun.
- Kaydet'i tıklayın .
firebase::auth::Auth
sınıfına erişin
Auth
sınıfı, tüm API çağrıları için ağ geçididir.- Auth ve App başlık dosyalarını ekleyin:
#include "firebase/app.h" #include "firebase/auth.h"
- Başlatma kodunuzda bir
firebase::App
sınıfı oluşturun.#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__)
- Edinme
firebase::auth::Auth
sizin için sınıffirebase::App
.App
veAuth
arasında bire bir eşleme vardır.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Firebase ile kimlik doğrulama
- Bir OAuth erişim jetonu ve OAuth sırrı almak için Twitter ile Oturum Açma belgelerini takip edin.
- Bir kullanıcı başarıyla oturum açtıktan sonra, jeton ve sırrı bir Firebase kimlik bilgisiyle değiştirin ve Firebase kimlik bilgilerini kullanarak Firebase ile kimlik doğrulayın:
firebase::auth::Credential credential = firebase::auth::TwitterAuthProvider::GetCredential(token, secret); firebase::Future<firebase::auth::User*> result = auth->SignInWithCredential(credential);
- Programınızda düzenli olarak çalışan bir güncelleme döngüsü varsa (örneğin saniyede 30 veya 60 kez), sonuçları her güncellemede bir kez
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()); } }
ile kontrol edebilirsiniz Veya programınız olay odaklıysa, kaydolmayı tercih edebilirsiniz. Gelecek için bir geri arama .
Bir Gelecek için geri arama kaydedin
Bazı programların saniyede 30 veya 60 kez çağrılanUpdate
işlevleri vardır. Örneğin, birçok oyun bu modeli takip eder. Bu programlar, zaman uyumsuz çağrıları yoklamak için LastResult
işlevlerini çağırabilir. Bununla birlikte, programınız olay odaklıysa, geri arama işlevlerini kaydetmeyi tercih edebilirsiniz. Geleceğin tamamlanması üzerine bir geri arama işlevi çağrılır. 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); }Geri arama işlevi, isterseniz bir lambda da olabilir.
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); }
Sonraki adımlar
Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve oturum açan kullanıcı kimlik bilgilerine (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.
Uygulamalarınızda, kullanıcının temel profil bilgilerini
firebase::auth::User
nesnesinden alabilirsiniz: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 Realtime Database ve Cloud Storage Güvenlik Kurallarınızda , oturum
auth
kullanıcının benzersiz kullanıcı kimliğiniauth
değişkeninden alabilir ve bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak , kullanıcıların birden çok kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz .
Bir kullanıcının oturumunu kapatmak için SignOut()
arayın:
auth->SignOut();