Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Xác thực Sử dụng Dịch vụ Trò chơi của Google Play trên Android

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bạn có thể sử dụng các dịch vụ của Google Play Trò chơi để đăng nhập người chơi vào một trò chơi Android được xây dựng trên Firebase. Để sử dụng dịch vụ Google Play Trò chơi đăng nhập bằng Firebase, trước tiên hãy đăng nhập trình phát bằng Google Play Trò chơi và yêu cầu mã xác thực OAuth 2.0 khi bạn làm như vậy. Sau đó, chuyển mã xác thực cho 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 của bạn

  1. Nếu bạn chưa có, hãy thêm Firebase vào dự án Android của bạn .

  2. Trong tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là <project>/<app-module>/build.gradle ), hãy thêm phần phụ thuộc cho thư viện Android Xác thực Firebase. Chúng tôi khuyên bạn nên sử dụng Firebase Android BoM để kiểm soát việc lập phiên bản thư viện.

    Ngoài ra, trong quá trình thiết lập Xác thực Firebase, bạn cần thêm SDK dịch vụ của Google Play vào ứng dụng của mình.

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // 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-ktx'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

    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 phụ thuộc thư viện Firebase mà không cần sử dụng BoM

    Nếu chọn không sử dụng Firebase BoM, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phụ thuộc của nó.

    Lưu ý rằng nếu bạn sử dụng nhiều thư viện Firebase trong ứng dụng của mình, chúng tôi thực sự khuyên bạn nên sử dụng BoM để quản lý các phiên bản thư viện, điều này đảm bảo rằng tất cả các 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-ktx:21.1.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.2.0')
    
        // 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:20.4.1'
    }

    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 phụ thuộc thư viện Firebase mà không cần sử dụng BoM

    Nếu chọn không sử dụng Firebase BoM, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phụ thuộc của nó.

    Lưu ý rằng nếu bạn sử dụng nhiều thư viện Firebase trong ứng dụng của mình, chúng tôi thực sự khuyên bạn nên sử dụng BoM để quản lý các phiên bản thư viện, điều này đảm bảo rằng tất cả các 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:21.1.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1'
    }

Thiết lập dự án Firebase của bạn

  1. Đặt dấu vân tay SHA-1 cho trò chơi của bạn từ trang Cài đặt của bảng điều khiển Firebase.

    Bạn có thể lấy hàm băm SHA của chứng chỉ ký của mình bằng lệnh signingReport :

    ./gradlew signingReport

  2. Bật Google Play Games làm nhà cung cấp dịch vụ đăng nhập:

    1. Tìm ID ứng dụng khách của máy chủ web và bí mật ứng dụng khách của dự án. ID ứ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 Google Play.

      Để tìm các giá trị này:

      1. Mở dự án Firebase của bạn trong trang thông tin đăng nhập của bảng điều khiển Google API .
      2. Trong phần ID ứng dụng khách OAuth 2.0 , hãy mở trang chi tiết ứng dụng khách Web (do Google Service tạo tự động) . Trang này liệt kê bí mật và ID máy khách máy chủ web của bạn.
    2. Sau đó, trong bảng điều khiển Firebase , hãy mở phần Xác thực .

    3. Trên tab Phương thức đăng nhập, hãy bật nhà cung cấp dịch vụ đăng nhập Play Trò chơi . Bạn sẽ cần chỉ định ID ứng dụng khách máy chủ web của dự án và bí mật ứng dụng khách mà bạn nhận được từ bảng điều khiển API.

Định cấu hình dịch vụ Play Trò chơi bằng thông tin ứng dụng Firebase của bạn

  1. Trong Google Play Console , mở ứng dụng Google Play của bạn hoặc tạo một ứng dụng.

  2. 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 & quản lý > Cấu hình .

  3. Nhấp vào Có, trò chơi của tôi đã sử dụng API của Google , chọn dự án Firebase của bạn từ danh sách rồi nhấp vào Sử dụng .

  4. Trên trang cấu hình dịch vụ Play Trò chơi, nhấp vào Thêm thông tin xác thực .

    1. Chọn loại máy chủ Trò chơi .
    2. Trong trường máy khách OAuth , hãy chọn ID máy khách web của dự án. Hãy chắc chắn rằng đây là cùng một ID khách hàng mà bạn đã chỉ định khi bật đăng nhập Play Trò chơi.
    3. Lưu các thay đổi của bạn.
  5. Vẫn trên trang cấu hình dịch vụ Play Trò chơi, nhấp lại vào Thêm thông tin xác thực.

    1. Chọn loại Android .
    2. Trong trường ứng dụng khách OAuth , hãy chọn ID ứng dụng khách Android cho dự án của bạn. (Nếu bạn không thấy ID ứng dụng khách Android của mình, hãy đảm bảo rằng bạn đã đặt dấu vân tay SHA-1 của trò chơi trong bảng điều khiển Firebase.)
    3. Lưu các thay đổi của bạn.
  6. Trên trang Người kiểm tra , hãy thêm địa chỉ email của bất kỳ người dùng nào cần đăng nhập vào trò chơi của bạn trước khi bạn phát hành trò chơi trên Cửa hàng Play.

Tích hợp đăng nhập Play Trò chơi vào trò chơi của bạn

Trước tiên, hãy tích hợp tính năng đăng nhập Play Trò chơi vào ứng dụng của bạn. Xem Đăng nhập vào Trò chơi Android để biết hướng dẫn đầy đủ.

Trong tích hợp của bạn, 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 chuyển ID ứng dụng khách máy chủ web của mình cho phương thức requestServerAuthCode . Đây là ID mà bạn đã cung cấp khi bật đăng nhập Play Trò chơi trong bảng điều khiển Firebase.

Xác thực với Firebase

Sau khi thêm thông tin đăng nhập Play Trò chơi 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 Trò chơi.

  1. Đầu tiên, trong phương thức onCreate của hoạt động đăng nhập của bạn, lấy phiên bản được chia sẻ của đối tượng FirebaseAuth :

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
  1. Khi khởi tạo Hoạt động của bạn, hãy kiểm tra xem người chơi đã đăng nhập bằng Firebase 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.
  1. Sau khi người chơi đăng nhập bằng Play Trò chơi một cách âm thầ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 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.

Bước tiếp theo

Sau khi người dùng đăng nhập lần đầu tiên, một tài khoản người dùng mới sẽ được tạo và liên kết với ID Play Trò chơi 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 sử 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 của mình, 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 = user.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 = user.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 Cơ sở dữ liệu thời gian thực Firebase và Quy tắc bảo mật lưu trữ đám mây, bạn có thể lấy ID người dùng duy nhất của người dùng đã đăng nhập từ biến auth và sử dụng nó để kiểm soát dữ liệu mà người dùng có thể truy cập.

Để nhận thông tin trình phát Play Trò chơi của người dùng hoặc để truy cập các dịch vụ của Play Trò chơi, hãy sử dụng API do Google Play Games SDK cung cấp.

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();