Bạn có thể sử dụng Dịch vụ trò chơi của Google Play để đăng nhập người chơi vào trò chơi Android được tạo trên Firebase. Để sử dụng dịch vụ Google Play Games đăng nhập bằng Firebase, trước tiên, hãy đăng nhập người chơi bằng Google Play Games và yêu cầu mã xác thực OAuth 2.0 khi bạn đăng nhập. Sau đó, chuyển mã xác thực đến PlayGamesAuthProvider
để tạo thông tin xác thực Firebase mà bạn có thể sử dụng để xác thực với Firebase.
Trước khi bắt đầu
Thiết lập dự án Android
Thêm Firebase vào dự án Android của bạn nếu bạn chưa thực hiện.
Trong tệp Gradle mô-đun (cấp ứng dụng) (thường là
<project>/<app-module>/build.gradle.kts
hoặc<project>/<app-module>/build.gradle
), hãy thêm phần phụ thuộc cho thư viện Xác thực Firebase dành cho Android. Bạn nên sử dụng Firebase Android BoM để kiểm soát việc tạo phiên bản thư viện.Ngoài ra, trong quá trình thiết lập tính năng Xác thực Firebase, bạn cần thêm SDK Dịch vụ Google Play vào ứng dụng của mình.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.1")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }Bằng cách sử dụng Firebase Android BoM, ứng dụng của bạn sẽ luôn sử dụng các phiên bản tương thích của thư viện Android Firebase.
(Thay thế) Thêm các phần phụ thuộc thư viện Firebase mà không sử dụng BoM
Nếu chọn không sử dụng BoM của Firebase, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phần phụ thuộc tương ứng.
Xin lưu ý rằng nếu sử dụng nhiều thư viện Firebase trong ứng dụng của mình, bạn nên sử dụng BoM để quản lý các phiên bản thư viện nhằm đảm bảo rằng mọi phiên bản đều tương thích.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.0.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }
Thiết lập dự án Firebase
Đặt vân tay số SHA-1 của trò chơi trên trang Cài đặt của bảng điều khiển của Firebase.
Bạn có thể lấy hàm băm SHA của chứng chỉ ký bằng lệnh
signingReport
của Gradle:./gradlew signingReport
Cho phép Google Play Games làm nhà cung cấp dịch vụ đăng nhập:
Tìm mã ứng dụng khách của máy chủ web và mật khẩu ứng dụng khách của dự án. Mã ứng dụng khách của máy chủ web xác định dự án Firebase của bạn với máy chủ xác thực của Google Play.
Cách tìm các giá trị này:
- Mở dự án Firebase của bạn trên trang thông tin đăng nhập Bảng điều khiển API của Google.
- Trong phần Mã ứng dụng khách OAuth 2.0, hãy mở trang chi tiết về Ứng dụng web (do Dịch vụ Google tạo tự động). Trang này liệt kê mã ứng dụng khách và khoá bí mật của máy chủ web của bạn.
Sau đó, trong bảng điều khiển của Firebase, hãy mở mục Xác thực.
Trên thẻ Phương thức đăng nhập, hãy bật trình cung cấp dịch vụ đăng nhập Play Games. Bạn sẽ cần chỉ định ID ứng dụng khách máy chủ web và mật khẩu ứng dụng khách của dự án mà bạn nhận được từ bảng điều khiển API.
Định cấu hình Dịch vụ trò chơi của Play bằng thông tin về ứng dụng Firebase
Trong Google Play Console, hãy mở ứng dụng Google Play hoặc tạo một ứng dụng.
Trong phần Phát triển, hãy nhấp vào Dịch vụ trò chơi của Play > Thiết lập và quản lý > Cấu hình.
Nhấp vào Yes, my game already used Google APIs (Có, trò chơi của tôi đã sử dụng API của Google), chọn dự án Firebase của bạn trong danh sách rồi nhấp vào Use (Sử dụng).
Trên trang cấu hình Dịch vụ trò chơi của Play, hãy nhấp vào Thêm thông tin xác thực.
- Chọn loại Máy chủ trò chơi.
- Trong trường ứng dụng OAuth, hãy chọn mã ứng dụng khách trên web của dự án. Hãy đảm bảo rằng đây chính là mã ứng dụng khách mà bạn đã chỉ định khi bật tính năng đăng nhập vào Play Games.
- Lưu thay đổi.
Vẫn trên trang cấu hình Dịch vụ trò chơi của Play, hãy nhấp lại vào Thêm thông tin xác thực.
- Chọn loại Android.
- Trong trường ứng dụng OAuth, hãy chọn mã ứng dụng khách Android của dự án. (Nếu bạn không thấy ID ứng dụng khách Android, hãy nhớ đặt vân tay số SHA-1 của trò chơi trong bảng điều khiển của Firebase.)
- Lưu thay đổi.
Trên trang Nhân viên kiểm thử, hãy thêm địa chỉ email của bất kỳ người dùng nào cần để có thể đăng nhập vào trò chơi của bạn trước khi phát hành trò chơi trên Cửa hàng Play.
Tích hợp tính năng đăng nhập vào Play Games vào trò chơi
Trước tiên, hãy tích hợp tính năng đăng nhập vào Play Games vào ứng dụng của bạn. Hãy xem phần Đăng nhập vào các Trò chơi trên Android để biết hướng dẫn đầy đủ.
Trong quá trình tích hợp, khi bạn tạo đối tượng GoogleSignInOptions
, hãy sử dụng cấu hình DEFAULT_GAMES_SIGN_IN
và gọi requestServerAuthCode
:
Kotlin+KTX
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build()
Java
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build();
Bạn phải truyền mã ứng dụng khách máy chủ web vào phương thức requestServerAuthCode
.
Đây là mã nhận dạng mà bạn đã cung cấp khi bật tính năng đăng nhập vào Play Games trong bảng điều khiển của Firebase.
Xác thực bằng Firebase
Sau khi thêm tính năng đăng nhập vào Play Games vào ứng dụng của mình, bạn cần thiết lập Firebase để sử dụng thông tin đăng nhập Tài khoản Google mà bạn nhận được khi người chơi đăng nhập thành công bằng Play Games.
- Trước tiên, trong phương thức
onCreate
của hoạt động đăng nhập, hãy lấy thực thể dùng chung của đối tượngFirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Khi khởi chạy Hoạt động của bạn, hãy kiểm tra xem người chơi đã đăng nhập bằng Firebase hay chưa:
Kotlin+KTX
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
- Sau khi người chơi đăng nhập bằng Play Games một cách ngầm hoặc tương tác, hãy lấy mã xác thực từ đối tượng
GoogleSignInAccount
, đổi mã đó để lấy thông tin xác thực Firebase và xác thực với Firebase bằng thông tin xác thực Firebase:
Kotlin+KTX
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!) val auth = Firebase.auth val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } // ... } }
Java
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId()); final FirebaseAuth auth = FirebaseAuth.getInstance(); AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode()); auth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = auth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } // ... } }); }
Nếu lệnh gọi đến signInWithCredential
thành công, bạn có thể sử dụng phương thức getCurrentUser
để lấy dữ liệu tài khoản của người dùng.
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 mã nhận dạng Play Games của họ. Tài khoản mới này được lưu trữ như một phần của dự án Firebase và có thể được dùng để xác định người dùng trên mọi ứng dụng trong dự án của bạn.
Trong trò chơi, bạn có thể lấy UID Firebase của người dùng từ đối tượng FirebaseUser
:
Kotlin+KTX
val user = auth.currentUser user?.let { val playerName = it.displayName // 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 FirebaseUser.getIdToken() instead. val uid = it.uid }
Java
FirebaseUser user = mAuth.getCurrentUser(); String playerName = user.getDisplayName(); // 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 FirebaseUser.getIdToken() instead. String uid = user.getUid();
Trong Quy tắc bảo mật của Cloud Storage và Cơ sở dữ liệu theo thời gian thực của Firebase, bạn có thể lấy mã nhận dạng người dùng duy nhất của người dùng đã đăng nhập từ biến auth
và sử dụng biến đó để kiểm soát dữ liệu mà một người dùng có thể truy cập.
Để lấy thông tin về người chơi trên Play Games của người dùng hoặc để truy cập vào Dịch vụ trò chơi của Play, hãy sử dụng các API do Google Play Games SDK cung cấp.
Để đăng xuất cho một người dùng, hãy gọi FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();