Con Firebase JS SDK, puede permitir que sus usuarios de Firebase se autentiquen utilizando cualquier proveedor de OAuth compatible en un entorno Cordova. Puede integrar cualquier proveedor de OAuth compatible utilizando el SDK de Firebase para realizar el flujo de inicio de sesión o realizando el flujo de OAuth manualmente y pasando la credencial de OAuth resultante a Firebase.
Configurar la autenticación de Firebase para Cordova
Agrega Firebase a tu proyecto de JavaScript . Al agregar el fragmento de Firebase, tome nota de la variable de configuración
authDomain
, que debería verse asímy-app.firebaseapp.com
. Si se usa un dominio personalizado en lugar del dominiofirebaseapp.com
aprovisionado por Firebase, se debe usar el dominio personalizado en su lugar.Para configurar una aplicación de Android, agregue su aplicación de Android a Firebase console e ingrese los detalles de su aplicación. No necesita el google-services.json generado.
Para configurar una aplicación de iOS, cree una aplicación de iOS y agréguela a Firebase console . Necesitará el ID del paquete de iOS para agregarlo más adelante al instalar el complemento del esquema de URL personalizado.
Habilite los enlaces dinámicos de Firebase:
- En Firebase console , abre la sección Enlaces dinámicos .
Si aún no ha aceptado los términos de Dynamic Links y no ha creado un dominio de Dynamic Links, hágalo ahora.
Si ya creaste un dominio de Dynamic Links, toma nota. Un dominio de Dynamic Links normalmente se parece al siguiente ejemplo:
example.page.link
Necesitará este valor cuando configure su aplicación Apple o Android para interceptar el enlace entrante.
Habilite el inicio de sesión de Google en Firebase console:
- En Firebase console , abre la sección Auth .
- En la pestaña Método de inicio de sesión , habilite el método de inicio de sesión de Google y haga clic en Guardar .
Instale los complementos necesarios en su proyecto 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
Agregue la siguiente configuración a su archivo Cordova
config.xml
, dondeAUTH_DOMAIN
es el dominio del paso (1) yDYNAMIC_LINK_DOMAIN
es el dominio del paso (3c).<universal-links> <host name="DYNAMIC_LINK_DOMAIN" scheme="https" /> <host name="AUTH_DOMAIN" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Una configuración de ejemplo podría verse así:
<universal-links> <host name="example.page.link" scheme="https" /> <host name="example-app.firebaseapp.com" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Si se utiliza un dominio personalizado
auth.custom.domain.com
, sustitúyalomy-app.firebaseapp.com
por ese.Para la aplicación de Android,
singleTask
debe usarse paralaunchMode
.<preference name="AndroidLaunchMode" value="singleTask" />
Maneja el flujo de inicio de sesión con el SDK de Firebase
Firebase Auth depende del evento
deviceReady
para determinar correctamente el entorno actual de Cordova. Asegúrese de que la instancia de la aplicación Firebase se inicialice después de que se active ese evento.Cree una instancia del objeto proveedor de Google:
Web modular API
import { GoogleAuthProvider } from "firebase/auth/cordova"; const provider = new GoogleAuthProvider();
Web namespaced API
var provider = new firebase.auth.GoogleAuthProvider();
Autentíquese con Firebase utilizando el objeto de proveedor de Google mediante
signInWithRedirect
. Tenga en cuenta quesignInWithPopup
no se admite en Cordova.Web modular API
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 namespaced API
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; });
Para manejar el caso en el que la actividad de la aplicación se destruye antes de que se complete la operación de inicio de sesión, llame a
getRedirectResult
cuando se cargue la aplicación.Web modular API
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 namespaced API
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; });
Se puede utilizar el mismo mecanismo para vincular un nuevo proveedor mediante
linkWithRedirect
o para volver a autenticar con un proveedor existente mediantereauthenticateWithRedirect
.