Dzięki pakietowi Firebase JS SDK możesz zezwolić użytkownikom Firebase na uwierzytelnianie przy użyciu obsługiwanego dostawcy OAuth w środowisku Cordova. Możesz zintegrować dowolnego obsługiwanego dostawcy OAuth. Możesz to zrobić za pomocą pakietu SDK Firebase. lub przez ręczne przeprowadzenie procesu OAuth i przekazanie danych logowania OAuth do Firebase.
Konfigurowanie uwierzytelniania Firebase na potrzeby Cordova
Dodaj Firebase do projektu JavaScript. Podczas dodawania Fragment kodu Firebase. Zwróć uwagę na zmienną konfiguracji
authDomain
, który powinien wyglądać tak:my-app.firebaseapp.com
. Jeśli używana jest domena niestandardowa zamiast domenyfirebaseapp.com
udostępnionej przez Firebase, niestandardowe zamiast domeny.Aby skonfigurować aplikację na Androida, dodaj ją do konsoli Firebase i wpisać informacje o aplikacji. Nie potrzebujesz wygenerowanego google-services.json.
Aby skonfigurować aplikację na iOS, utwórz aplikację na iOS i dodaj ją do Firebase. Będziesz potrzebować identyfikatora pakietu na iOS, aby dodać go później instalując wtyczkę schematu niestandardowego schematu URL.
Włącz Linki dynamiczne Firebase:
- W konsoli Firebase otwórz sekcję Dynamic Links.
-
Jeśli warunki usługi Dynamic Links nie zostały jeszcze przez Ciebie zaakceptowane, a Dynamic Links nie zostało utworzone domeny, zrób to teraz.
Jeśli masz już utworzoną domenę Dynamic Links, zanotuj ją. Dynamic Links domena zwykle wygląda tak:
example.page.link
Ta wartość będzie potrzebna podczas konfigurowania aplikacji na Apple lub Androida przechwytywać link przychodzący.
Włącz Logowanie przez Google w konsoli Firebase:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na karcie Metoda logowania włącz metodę Logowanie przez Google. kliknij Zapisz.
Zainstaluj wymagane wtyczki w projekcie Cordova.
# Plugin to pass application build info (app name, ID, etc) to the OAuth widget. cordova plugin add cordova-plugin-buildinfo --save # Plugin to handle Universal Links (Android app link redirects) cordova plugin add cordova-universal-links-plugin-fix --save # Plugin to handle opening secure browser views on iOS/Android mobile devices cordova plugin add cordova-plugin-browsertab --save # Plugin to handle opening a browser view in older versions of iOS and Android cordova plugin add cordova-plugin-inappbrowser --save # Plugin to handle deep linking through Custom Scheme for iOS # Substitute *com.firebase.cordova* with the iOS bundle ID of your app. cordova plugin add cordova-plugin-customurlscheme --variable \ URL_SCHEME=com.firebase.cordova --save
Dodaj poniższą konfigurację do pliku Cordova
config.xml
, gdzieAUTH_DOMAIN
to domena z kroku 1, aDYNAMIC_LINK_DOMAIN
to domena domeny z kroku (3c).<universal-links> <host name="DYNAMIC_LINK_DOMAIN" scheme="https" /> <host name="AUTH_DOMAIN" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Przykładowa konfiguracja może wyglądać tak:
<universal-links> <host name="example.page.link" scheme="https" /> <host name="example-app.firebaseapp.com" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Jeśli używana jest domena niestandardowa
auth.custom.domain.com
, zastąp jąmy-app.firebaseapp.com
.W przypadku aplikacji na Androida dla
launchMode
należy używać aplikacjisingleTask
.<preference name="AndroidLaunchMode" value="singleTask" />
Zarejestruj się za pomocą pakietu SDK Firebase
Uwierzytelnianie Firebase wymaga zdarzenia
deviceReady
, aby określić obecne środowisko Cordova. Sprawdź, czy instancja aplikacji Firebase jest zainicjowany po wywołaniu tego zdarzenia.Utwórz instancję obiektu dostawcy Google:
Web
import { GoogleAuthProvider } from "firebase/auth/cordova"; const provider = new GoogleAuthProvider();
Web
var provider = new firebase.auth.GoogleAuthProvider();
Uwierzytelnij za pomocą Firebase za pomocą obiektu dostawcy Google za pomocą:
signInWithRedirect
Zwróć uwagę, żesignInWithPopup
to nie jest obsługiwana w systemie Cordova.Web
import { getAuth, signInWithRedirect, getRedirectResult, GoogleAuthProvider } from "firebase/auth/cordova"; const auth = getAuth(); signInWithRedirect(auth, new GoogleAuthProvider()) .then(() => { return getRedirectResult(auth); }) .then((result) => { const credential = GoogleAuthProvider.credentialFromResult(result); // This gives you a Google Access Token. // You can use it to access the Google API. const token = credential.accessToken; // The signed-in user info. const user = result.user; // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; });
Web
firebase.auth().signInWithRedirect(provider).then(() => { return firebase.auth().getRedirectResult(); }).then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a Google Access Token. // You can use it to access the Google API. var token = credential.accessToken; // The signed-in user info. var user = result.user; // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; });
Obsługa przypadku, w którym aktywność w aplikacji zostaje zniszczona przed zalogowaniem się operacja zostanie zakończona, wywołaj
getRedirectResult
po zakończeniu aplikacji .Web
import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth/cordova"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { const credential = GoogleAuthProvider.credentialFromResult(result); if (credential) { // This gives you a Google Access Token. // You can use it to access the Google API. const token = credential.accessToken; // The signed-in user info. const user = result.user; // ... } }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; });
Web
firebase.auth().getRedirectResult().then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a Google Access Token. // You can use it to access the Google API. var token = credential.accessToken; // The signed-in user info. var user = result.user; // ... } }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; });
Tego samego mechanizmu można użyć do połączenia nowego dostawcy za pomocą
linkWithRedirect
lub ponowne uwierzytelnienie u obecnego dostawcy za pomocą:reauthenticateWithRedirect
.