Với SDK JS Firebase, 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ỳ nhà cung cấp OAuth được hỗ trợ nào 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 SDK Firebase để thực hiện luồng đăng nhập hoặc bằng cách thực hiện luồng OAuth theo cách thủ công và chuyển thông tin xác thực OAuth thu được cho Firebase.
Thiết lập xác thực Firebase cho Cordova
Thêm Firebase vào dự án JavaScript của bạn . Khi thêm đoạn mã Firebase, hãy lưu ý đến biến cấu hình
authDomain
, biến này sẽ trông giống nhưmy-app.firebaseapp.com
. Nếu miền tùy chỉnh được sử dụng thay vì miềnfirebaseapp.com
do Firebase cung cấp thì miền tùy chỉnh sẽ được sử dụng thay thế.Để thiết lập ứng dụng Android, hãy thêm ứng dụng Android của bạn vào bảng điều khiển Firebase và nhập chi tiết ứng dụng của bạn. Bạn không cần google-services.json được tạo.
Để thiết lập ứng dụng iOS, hãy tạo ứng dụng iOS và thêm ứng dụng đó vào bảng điều khiển Firebase . Bạn sẽ cần ID gói iOS để thêm sau khi cài đặt plugin lược đồ URL tùy chỉnh.
Kích hoạt Liên kết động Firebase:
- Trong bảng điều khiển Firebase , hãy mở phần Liên kết động .
Nếu bạn chưa chấp nhận các điều khoản của Liên kết động và đã tạo miền Liên kết động, hãy thực hiện ngay bây giờ.
Nếu bạn đã tạo miền Liên kết động, hãy lưu ý đến nó. Miền Liên kết động thường trông giố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 của mình để chặn liên kết đến.
Kích hoạt tính năng Đăng nhập bằng Google trong bảng điều khiển Firebase:
- Trong bảng điều khiển Firebase , hãy mở phần Xác thực .
- Trên tab Phương thức đăng nhập , bật phương thức đăng nhập Google và nhấp vào Lưu .
Cài đặt các plugin cần thiết 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
của bạn, trong đóAUTH_DOMAIN
là miền ở bước (1) vàDYNAMIC_LINK_DOMAIN
là miền ở 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>
Một cấu hình ví dụ có thể trông giống như:
<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 miền tùy chỉnh
auth.custom.domain.com
được sử dụng, hãy thay thếmy-app.firebaseapp.com
bằng miền đó.Đối với ứng dụng Android, nên sử dụng
singleTask
cholaunchMode
.<preference name="AndroidLaunchMode" value="singleTask" />
Xử lý luồng đăng nhập bằng SDK Firebase
Firebase Auth phụ thuộc vào sự kiện
deviceReady
để xác định chính xác môi trường Cordova hiện tại. Đảm bảo phiên bản Ứng dụng Firebase được khởi tạo sau khi sự kiện đó được kích hoạt.Tạo một phiên bản của đối tượng nhà cung cấp Google:
Web modular API
import { GoogleAuthProvider } from "firebase/auth/cordova"; const provider = new GoogleAuthProvider();
Web namespaced API
var provider = new firebase.auth.GoogleAuthProvider();
Xác thực với Firebase bằng đối tượng nhà cung cấp Google bằng
signInWithRedirect
. Lưu ý rằngsignInWithPopup
không được hỗ trợ ở 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; });
Để xử lý trường hợp hoạt động ứng dụng bị hủy trước khi thao tác đăng nhập hoàn tất, hãy gọi
getRedirectResult
khi ứng dụng của bạn tải.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; });
Cơ chế tương tự có thể được sử dụng để liên kết nhà cung cấp mới thông qua
linkWithRedirect
hoặc để xác thực lại với nhà cung cấp hiện tại bằng cách sử dụngreauthenticateWithRedirect
.