Com o SDK JS do Firebase, você pode permitir que os usuários do Firebase se autentiquem usando qualquer provedor OAuth compatível em um ambiente Cordova. Você pode integrar qualquer provedor OAuth compatível usando o SDK do Firebase para executar o fluxo de login ou executando o fluxo OAuth manualmente e passando a credencial OAuth resultante para o Firebase.
Configurar o Firebase Authentication para Cordova
Adicione o Firebase ao seu projeto JavaScript . Ao adicionar o snippet do Firebase, observe a variável de configuração
authDomain
, que deve ser semelhante amy-app.firebaseapp.com
. Se um domínio personalizado for usado em vez do domíniofirebaseapp.com
provisionado pelo Firebase, o domínio personalizado deverá ser usado.Para configurar um aplicativo Android, adicione-o ao console do Firebase e insira os detalhes do aplicativo. Você não precisa do google-services.json gerado.
Para configurar um aplicativo iOS, crie um aplicativo iOS e adicione-o ao console do Firebase . Você precisará do ID do pacote iOS para adicionar posteriormente ao instalar o plug-in de esquema de URL personalizado.
Ative links dinâmicos do Firebase:
- No console do Firebase , abra a seção Dynamic Links .
Se você ainda não aceitou os termos do Dynamic Links e criou um domínio do Dynamic Links, faça-o agora.
Se você já criou um domínio Dynamic Links, anote-o. Um domínio Dynamic Links normalmente se parece com o exemplo a seguir:
example.page.link
Você precisará desse valor ao configurar seu aplicativo Apple ou Android para interceptar o link de entrada.
Ative o login do Google no console do Firebase:
- No console do Firebase , abra a seção Auth .
- Na guia Método de login , ative o método de login do Google e clique em Salvar .
Instale os plugins necessários em seu projeto 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
Adicione a seguinte configuração ao arquivo
config.xml
do Cordova, ondeAUTH_DOMAIN
é o domínio da etapa (1) eDYNAMIC_LINK_DOMAIN
é o domínio da etapa (3c).<universal-links> <host name="DYNAMIC_LINK_DOMAIN" scheme="https" /> <host name="AUTH_DOMAIN" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Um exemplo de configuração pode ser semelhante a:
<universal-links> <host name="example.page.link" scheme="https" /> <host name="example-app.firebaseapp.com" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Se um domínio personalizado
auth.custom.domain.com
for usado, substituamy-app.firebaseapp.com
por ele.Para aplicativos Android,
singleTask
deve ser usado paralaunchMode
.<preference name="AndroidLaunchMode" value="singleTask" />
Lidar com o fluxo de login com o SDK do Firebase
O Firebase Auth depende do evento
deviceReady
para determinar corretamente o ambiente Cordova atual. Certifique-se de que a instância do aplicativo Firebase seja inicializada após o evento ser acionado.Crie uma instância do objeto provedor do Google:
Web modular API
import { GoogleAuthProvider } from "firebase/auth/cordova"; const provider = new GoogleAuthProvider();
Web namespaced API
var provider = new firebase.auth.GoogleAuthProvider();
Autentique-se com o Firebase usando o objeto de provedor do Google usando
signInWithRedirect
. Observe quesignInWithPopup
não é compatível com 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 lidar com o caso em que a atividade do aplicativo é destruída antes da conclusão da operação de login, chame
getRedirectResult
quando o aplicativo for carregado.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; });
O mesmo mecanismo pode ser usado para vincular um novo provedor via
linkWithRedirect
ou para reautenticar com um provedor existente usandoreauthenticateWithRedirect
.