Dengan Firebase JS SDK, pengguna Firebase Anda bisa melakukan autentikasi menggunakan penyedia OAuth yang didukung di lingkungan Cordova. Anda dapat mengintegrasikan penyedia OAuth yang didukung dengan menggunakan Firebase SDK untuk menjalankan alur login, atau dengan menerapkan alur OAuth secara manual dan meneruskan kredensial OAuth yang dihasilkan ke Firebase.
Menyiapkan Firebase Authentication untuk Cordova
Tambahkan Firebase ke project JavaScript Anda. Saat menambahkan cuplikan Firebase, catat variabel konfigurasi
authDomain
, yang akan terlihat sepertimy-app.firebaseapp.com
. Jika yang digunakan adalah domain kustom, bukan domainfirebaseapp.com
yang disediakan Firebase, domain kustom itulah yang harus digunakan.Untuk menyiapkan aplikasi Android, tambahkan aplikasi Android ke Firebase console dan masukkan detail aplikasi Anda. Anda tidak memerlukan google-services.json yang dihasilkan.
Untuk menyiapkan aplikasi iOS, buatlah aplikasi iOS dan tambahkan ke Firebase console. Anda akan memerlukan ID paket iOS untuk ditambahkan nanti saat menginstal plugin skema URL kustom.
Aktifkan Firebase Dynamic Links:
- Di Firebase console, buka bagian Dynamic Links.
-
Jika Anda belum menyetujui persyaratan Dynamic Links dan membuat domain Dynamic Links, lakukan sekarang.
Jika Anda telah membuat domain Dynamic Links, catat domain tersebut. Domain Dynamic Links biasanya terlihat seperti contoh berikut:
example.page.link
Anda akan memerlukan nilai ini saat mengonfigurasi aplikasi Apple atau Android untuk menangkap link yang masuk.
Aktifkan Login dengan Google di Firebase console:
- Di Firebase console, buka bagian Auth.
- Di tab Metode login, aktifkan metode Login dengan Google, lalu klik Save.
Instal plugin yang dibutuhkan di project Cordova Anda.
# 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
Tambahkan konfigurasi berikut ke file
config.xml
Cordova Anda, denganAUTH_DOMAIN
adalah domain dari langkah (1), danDYNAMIC_LINK_DOMAIN
adalah domain dari langkah (3c).<universal-links> <host name="DYNAMIC_LINK_DOMAIN" scheme="https" /> <host name="AUTH_DOMAIN" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Contoh konfigurasi mungkin terlihat seperti ini:
<universal-links> <host name="example.page.link" scheme="https" /> <host name="example-app.firebaseapp.com" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Jika domain kustom
auth.custom.domain.com
digunakan, gantilahmy-app.firebaseapp.com
dengan domain tersebut.Untuk aplikasi Android,
singleTask
harus digunakan untuklaunchMode
.<preference name="AndroidLaunchMode" value="singleTask" />
Menangani alur login dengan Firebase SDK
Firebase Auth bergantung pada peristiwa
deviceReady
untuk menentukan dengan benar lingkungan Cordova saat ini. Pastikan instance Firebase App diinisialisasi setelah peristiwa tersebut dipicu.Buat instance objek penyedia Google:
API modular web
import { GoogleAuthProvider } from "firebase/auth/cordova"; const provider = new GoogleAuthProvider();
API dengan namespace web
var provider = new firebase.auth.GoogleAuthProvider();
Lakukan autentikasi dengan Firebase melalui objek penyedia Google menggunakan
signInWithRedirect
. Perlu diperhatikan bahwasignInWithPopup
tidak didukung di Cordova.API modular 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; });
API dengan namespace 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; });
Untuk menangani kasus saat aktivitas aplikasi dihancurkan sebelum operasi login selesai, panggil
getRedirectResult
saat aplikasi Anda dimuat.API modular 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; });
API dengan namespace 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; });
Mekanisme yang sama dapat digunakan untuk menautkan penyedia baru melalui
linkWithRedirect
atau untuk melakukan autentikasi ulang dengan penyedia yang ada menggunakanreauthenticateWithRedirect
.