Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

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 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 người chơi 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, bạn có thể sử dụng thông tin này để 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. Sử dụng Firebase Android BoM , khai báo sự phụ thuộc cho thư viện Android Xác thực Firebase trong tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là app/build.gradle ).

    Ngoài ra, là một phần của việc 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.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.1.0')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.0.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 Firebase Android.

    (Thay thế) Khai báo các phụ thuộc thư viện Firebase mà không cần sử dụng BoM

    Nếu bạn 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 {
        // Declare 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:20.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.0.0'
    }

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.1.0')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.0.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 Firebase Android.

    (Thay thế) Khai báo các phụ thuộc thư viện Firebase mà không cần sử dụng BoM

    Nếu bạn 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 {
        // Declare 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:20.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.0.0'
    }

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

  1. Đặt tệp tham chiếu 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 băm SHA chứng chỉ ký của bạn với gradle signingReport lệnh:

    ./gradlew signingReport

  2. Bật Google Play Trò chơi với tư cách là nhà cung cấp dịch vụ đăng nhập:

    1. Tìm mã ứng dụng khách máy chủ web của dự án và bí mật máy khách. ID ứng dụng khách của máy chủ web xác định dự án Firebase của bạn với các máy chủ xác thực của 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 bảng điều khiển API của Google .
      2. Trong phần ID ứng dụng khách OAuth 2.0 , hãy mở trang chi tiết về ứng dụng khách Web (do Dịch vụ của Google tạo tự động) . Trang này liệt kê bí mật và ID ứng dụng 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 và bí mật ứng dụng khách của dự án mà bạn nhận được từ bảng điều khiển API.

  1. Mở bảng điều khiển Google Play và nhấp vào Dịch vụ trò chơi .
  2. Nhấp vào Thêm trò chơi mới . Trong hộp thoại trò chơi mới, nhấp vào Tôi đã sử dụng API Google trong trò chơi của mình và nhấp vào tên dự án Firebase của bạn trong danh sách. Chọn một danh mục trò chơi, sau đó nhấp vào Tiếp tục để chuyển đến trang Chi tiết trò chơi.
  3. Ở cuối trang Chi tiết trò chơi, hãy đảm bảo rằng tất cả các API bắt buộc đã được bật.
  4. Sau đó, mở trang Ứng dụng được liên kết và nhấp vào Android . Chỉ định tên gói trò chơi của bạn và nhấp vào Lưu và tiếp tục . Bảng điều khiển sẽ hiển thị ID ứng dụng khách Android của bạn. Bạn có thể bỏ qua giá trị này.
  5. Trên trang Thử nghiệm , hãy đưa vào danh sách trắng các đị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 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, tích hợp đă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 :

Java

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Kotlin + KTX

val gso = 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 bằng 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, hãy lấy bản sao được chia sẻ của đối tượng FirebaseAuth :

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Kotlin + KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. 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 chưa:

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);
}

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)
}
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 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 đăng nhập Firebase và xác thực với Firebase bằng thông tin đăng nhập Firebase:

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);
                    }

                    // ...
                }
            });
}

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)
                }

                // ...
            }
}

Nếu cuộc gọi đến signInWithCredential thành công bạn có thể sử dụng getCurrentUser phương pháp để có được 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 của bạn 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 :

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();

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
}

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 nào người dùng có thể truy cập.

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

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

Java

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()