Với Firebase JS SDK, bạn có thể cho phép người dùng Firebase xác thực bằng cách sử dụng bất kỳ hỗ trợ nhà cung cấp OAuth trong môi trường Cordova. Bạn có thể tích hợp bất kỳ nhà cung cấp OAuth được hỗ trợ nào bằng cách sử dụng Firebase SDK để thực hiện hoặc thực hiện quy trình OAuth theo cách thủ công và chuyển dẫn đến thông tin đăng nhập OAuth cho Firebase.
Thiết lập tính năng xác thực Firebase cho Cordova
Thêm Firebase vào dự án JavaScript của bạn. Khi thêm thuộc tính Đoạn mã Firebase, hãy lưu ý đến biến cấu hình
authDomain
, Mã này sẽ có dạngmy-app.firebaseapp.com
. Nếu miền tuỳ chỉnh được sử dụng thay vì miềnfirebaseapp.com
được Firebase cấp phép, miền sẽ được sử dụng thay thế.Để thiết lập một ứng dụng Android, hãy thêm ứng dụng Android đó vào bảng điều khiển của Firebase rồi nhập thông tin chi tiết về ứng dụng. Bạn không cần google-services.json.
Để thiết lập một ứng dụng iOS, hãy tạo một ứng dụng iOS và thêm ứng dụng đó vào Bảng điều khiển Firebase. Bạn sẽ cần mã nhận dạng gói iOS để thêm vào sau này khi cài đặt trình bổ trợ lược đồ URL tuỳ chỉnh.
Bật liên kết động của Firebase:
- Trong bảng điều khiển của Firebase, hãy mở phần Dynamic Links.
-
Trường hợp bạn chưa chấp nhận các điều khoản của Dynamic Links và tạo một Dynamic Links , hãy thực hiện ngay bây giờ.
Nếu bạn đã tạo một miền Dynamic Links, hãy ghi lại miền đó. Một Dynamic Links thường có dạng như ví dụ sau:
example.page.link
Bạn sẽ cần giá trị này khi định cấu hình ứng dụng Apple hoặc Android để chặn đường liên kết đến.
Bật tính năng Đăng nhập bằng Google trong bảng điều khiển của Firebase:
- Trong bảng điều khiển Firebase, hãy mở phần Xác thực.
- Trên thẻ Phương thức đăng nhập, hãy bật phương thức Đăng nhập bằng Google và hãy nhấp vào Lưu.
Cài đặt trình bổ trợ bắt buộc trong dự án Cordova của bạn.
# 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
Thêm cấu hình sau vào tệp Cordova
config.xml
, trong đóAUTH_DOMAIN
là miền ở bước (1) vàDYNAMIC_LINK_DOMAIN
là miền miền khỏi bước (3c).<universal-links> <host name="DYNAMIC_LINK_DOMAIN" scheme="https" /> <host name="AUTH_DOMAIN" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Cấu hình mẫu có thể có dạng như sau:
<universal-links> <host name="example.page.link" scheme="https" /> <host name="example-app.firebaseapp.com" scheme="https"> <path url="/__/auth/callback"/> </host> </universal-links>
Nếu đang sử dụng miền tuỳ chỉnh
auth.custom.domain.com
, hãy thay thếmy-app.firebaseapp.com
bằng chế độ đó.Đối với ứng dụng Android,
singleTask
nên được sử dụng cholaunchMode
.<preference name="AndroidLaunchMode" value="singleTask" />
Xử lý quy trình đăng nhập bằng Firebase SDK
Tính năng Xác thực Firebase phụ thuộc vào
deviceReady
sự kiện để xác định đúng với môi trường Cordova hiện tại. Đảm bảo thực thể của ứng dụng Firebase sẽ được khởi chạy sau khi sự kiện đó được kích hoạt.Tạo một thực thể của đối tượng nhà cung cấp của Google:
Web
import { GoogleAuthProvider } from "firebase/auth/cordova"; const provider = new GoogleAuthProvider();
Web
var provider = new firebase.auth.GoogleAuthProvider();
Xác thực bằng Firebase bằng đối tượng nhà cung cấp của Google bằng cách sử dụng
signInWithRedirect
. Lưu ý rằngsignInWithPopup
là không được hỗ trợ trong 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; });
Để xử lý trường hợp hoạt động ứng dụng bị huỷ trước khi đăng nhập hoàn tất thao tác, hãy gọi
getRedirectResult
khi ứng dụng của bạn tải.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; });
Bạn cũng có thể sử dụng chính cơ chế đó để liên kết một nhà cung cấp mới thông qua
linkWithRedirect
hoặc xác thực lại với một nhà cung cấp hiện có đang sử dụngreauthenticateWithRedirect
.