Xác thực bằng tính năng Đăng nhập bằng Google và Unity

Bạn có thể cho phép người dùng xác thực bằng Firebase bằng Tài khoản Google của họ bằng cách tích hợp tính năng Đăng nhập bằng Google vào ứng dụng của bạn.

Trước khi bắt đầu

Thiết lập dự án Unity

Để có thể sử dụng Firebase Authentication, bạn cần:

  • Đăng ký dự án Unity của bạn và định cấu hình dự án đó để sử dụng Firebase.

    • Nếu dự án Unity của bạn đã sử dụng Firebase, thì tức là dự án đó đã được đăng ký và định cấu hình cho Firebase.

    • Nếu chưa có dự án Unity, bạn có thể tải ứng dụng mẫu xuống.

  • Thêm Firebase Unity SDK (cụ thể là FirebaseAuth.unitypackage) vào dự án Unity của bạn.

Xin lưu ý rằng việc thêm Firebase vào dự án Unity bao gồm các nhiệm vụ trong cả bảng điều khiển Firebase và trong dự án Unity đang mở (ví dụ: bạn tải tệp cấu hình Firebase xuống từ bảng điều khiển, sau đó di chuyển các tệp đó vào dự án Unity).

Thiết lập dự án và thông tin xác thực Firebase

  1. Android: Chỉ định vân tay số SHA-1 của ứng dụng trong bảng điều khiển Firebase:

    1. Trong bảng điều khiển Firebase, hãy chuyển đến Cài đặt > thẻ Chung.
    2. Chuyển đến thẻ Ứng dụng của bạn, chọn ứng dụng Android rồi thêm vân tay SHA-1 vào trường Dấu vân tay chứng chỉ SHA.

      Bạn có thể truy xuất vân tay số SHA-1 của kho khoá bằng keytool:

      keytool -keystore path-to-keystore.keystore -list -v
      

      Xem phần Xác thực ứng dụng để biết thêm thông tin chi tiết về cách lấy vân tay số SHA của ứng dụng.

  2. Bật tính năng Đăng nhập bằng Google và sao chép Mã ứng dụng khách web:

    1. Trong bảng điều khiển của Firebase, hãy chuyển đến phần Bảo mật > Xác thực.
    2. Trong thẻ Sign-in method (Phương thức đăng nhập), hãy bật nhà cung cấp dịch vụ đăng nhập Google.
    3. Mở rộng mục Cấu hình SDK web rồi sao chép Mã ứng dụng web (ví dụ: 123456-abc.apps.googleusercontent.com). Mã này đại diện cho thông báo xác nhận quyền sở hữu đối tượng (aud) của mã thông báo nhận dạng và là mã bắt buộc cho cả Android và iOS.
    4. Nhấp vào Lưu.
  3. Cập nhật tệp cấu hình Firebase và sao chép mã ứng dụng khách đảo ngược của iOS:

    1. Tải các tệp cấu hình Firebase mới nhất xuống từ bảng điều khiển Firebase (google-services.json cho Android và GoogleService-Info.plist cho iOS) rồi thay thế mọi bản sao cũ trong dự án Unity của bạn. (Xem phần Thêm Firebase vào dự án Unity.)
    2. iOS: Mở tệp GoogleService-Info.plist và sao chép giá trị của khoá REVERSED_CLIENT_ID (ví dụ: com.googleusercontent.apps.12345-abc). Bạn cần có giá trị này để định cấu hình lược đồ URL chuyển hướng iOS.

Tích hợp trình bổ trợ Đăng nhập bằng Google vào dự án Unity

  1. Nhập trình bổ trợ:

    1. Nếu bạn đang tích hợp vào một dự án hiện có, hãy sao lưu dự án của bạn và xoá mọi trình bổ trợ Đăng nhập bằng Google cũ hơn trước khi tiếp tục.
    2. Tải GoogleSignInNative.unitypackage xuống từ GitHub rồi nhập vào dự án Unity (Assets > Import Package > Custom Package (Tài sản > Nhập gói > Gói tuỳ chỉnh)). Đảm bảo rằng bạn đã chọn tất cả các tệp, rồi nhấp vào Import (Nhập).
  2. Định cấu hình chế độ cài đặt trình bổ trợ:

    1. Trong Trình chỉnh sửa Unity, hãy chuyển đến Window > Google Sign-In Native > Settings (Cửa sổ > Đăng nhập bằng Google gốc > Cài đặt).
    2. Dán Mã ứng dụng khách web vào trường đầu tiên.
    3. Dán Mã ứng dụng khách đảo ngược cho iOS vào trường thứ hai.
    4. Nhấp vào Lưu chế độ cài đặt.
  3. Giải quyết các phần phụ thuộc gốc:

    1. Chuyển đến Assets > External Dependency Manager > Android Resolver > Force Resolve (Tài sản > Trình quản lý phần phụ thuộc bên ngoài > Trình phân giải Android > Buộc phân giải).
    2. Chờ thông báo thành công. Thao tác này sẽ tải các thư viện Trình quản lý thông tin xác thực googleid và androidx gốc xuống.

Truy cập vào lớp Firebase.Auth.FirebaseAuth

Lớp FirebaseAuth là cổng vào cho tất cả lệnh gọi API. Bạn có thể truy cập vào đối tượng này thông qua FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Xác thực bằng Firebase

  1. Thiết lập GoogleSignInManager trong cảnh:

    1. Tạo một GameObject trống trong cảnh ban đầu có tên là GoogleSignInManager.
    2. Đính kèm tập lệnh GoogleSignInManager.cs vào tập lệnh đó.
    3. Kéo thành phần GoogleSignInNativeSettings (nằm trong Assets/GoogleSignInNative/Resources) vào ô Sign In Settings (Cài đặt đăng nhập) trên tập lệnh.
  2. Kích hoạt tính năng Đăng nhập bằng Google và đổi mã thông báo giá trị nhận dạng lấy thông tin xác thực Firebase:

    Tạo một tập lệnh điều khiển đăng ký GoogleSignInManager.OnSignInCompleted và GoogleSignInManager.OnSignInFailed, kích hoạt tính năng đăng nhập bằng GoogleSignInManager.Instance.StartSignIn() và đổi mã thông báo nhận dạng của Google thu được lấy thông tin xác thực Firebase bằng GoogleAuthProvider.GetCredential:

    using Firebase.Auth;
    using Firebase.Extensions;
    using UnityEngine;
    
    public class MyAuthController : MonoBehaviour
    {
        private FirebaseAuth auth;
    
        private void Awake()
        {
            auth = FirebaseAuth.DefaultInstance;
        }
    
        private void OnEnable()
        {
            GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed += HandleSignInFailure;
        }
    
        private void OnDisable()
        {
            GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed -= HandleSignInFailure;
        }
    
        public void OnSignInButtonClick()
        {
            GoogleSignInManager.Instance.StartSignIn();
        }
    
        private void HandleSignInSuccess(string idToken)
        {
            Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase...");
    
            Credential credential = GoogleAuthProvider.GetCredential(idToken, null);
            auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => {
                if (task.IsCanceled)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
                    return;
                }
                if (task.IsFaulted)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
                    return;
                }
    
                AuthResult result = task.Result;
                Debug.LogFormat("User signed in successfully: {0} ({1})",
                    result.User.DisplayName, result.User.UserId);
            });
        }
    
        private void HandleSignInFailure(string error)
        {
            Debug.LogError($"[Auth] Google Sign-In failed: {error}");
        }
    }
    

Tạo ứng dụng

Android

  • Đảm bảo Tên gói trong Cài đặt trình phát khớp chính xác với thông tin xác thực Firebase và Google Cloud OAuth của bạn.
  • Đảm bảo bạn đặt Cấp độ API tối thiểu thành 34 trở lên.
  • Nhấp vào Build and Run (Tạo bản dựng và chạy).

iOS

  • Tạo dự án trong Unity để tạo dự án Xcode, sau đó mở tệp .xcworkspace đã tạo.
  • Trong Xcode, hãy chuyển đến thẻ Signing & Capabilities (Ký và các chức năng) rồi chọn Development Team (Nhóm phát triển).
  • Trình bổ trợ này tự động thêm lược đồ URL tuỳ chỉnh (REVERSED_CLIENT_ID) vào dự án Xcode của bạn. Tạo bản dựng và chạy trên thiết bị thực.

Các bước tiếp theo

Sau khi người dùng đăng nhập lần đầu, một tài khoản người dùng mới sẽ được tạo và liên kết với thông tin đăng nhập (tức là tên người dùng và mật khẩu, số điện thoại hoặc thông tin của nhà cung cấp dịch vụ xác thực) mà người dùng đã dùng để đăng nhập. Tài khoản mới này được lưu trữ trong dự án Firebase của bạn và có thể được dùng để xác định người dùng trên mọi ứng dụng trong dự án, bất kể cách người dùng đăng nhập.

  • Trong ứng dụng, bạn có thể lấy thông tin hồ sơ cơ bản của người dùng từ đối tượng Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • Trong Quy tắc bảo mật của Firebase Realtime Database và Cloud Storage, bạn có thể lấy mã nhận dạng người dùng riêng biệt của người dùng đã đăng nhập từ biến auth và sử dụng mã nhận dạng đó để kiểm soát dữ liệu mà người dùng có thể truy cập.

Bạn có thể cho phép người dùng đăng nhập vào ứng dụng của mình bằng nhiều nhà cung cấp dịch vụ xác thực bằng cách liên kết thông tin xác thực của nhà cung cấp dịch vụ xác thực với tài khoản người dùng hiện có.

Để đăng xuất người dùng, hãy gọi SignOut():

auth.SignOut();