ตรวจสอบสิทธิ์โดยใช้บริการเกม Google Play บน Android

คุณใช้บริการ Google Play Games เพื่อลงชื่อเข้าใช้เกม Android ที่สร้างบน Firebase ให้กับผู้เล่นได้ ในการใช้บริการลงชื่อเข้าใช้ Google Play Games ด้วย Firebase ก่อนอื่นให้ลงชื่อเข้าใช้ผู้เล่นด้วย Google Play Games และขอรหัสตรวจสอบสิทธิ์ OAuth 2.0 เมื่อคุณดำเนินการดังกล่าว จากนั้นผ่านรหัสรับรองความถูกต้องในการ PlayGamesAuthProvider เพื่อสร้างการรับรอง Firebase ซึ่งคุณสามารถใช้เพื่อตรวจสอบกับ Firebase

ก่อนจะเริ่ม

ตั้งค่าโปรเจ็กต์ Android ของคุณ

  1. หากคุณยังไม่ได้ เพิ่ม Firebase กับโครงการ Android ของคุณ

  2. ใช้ Firebase Android BoM ประกาศพึ่งพาสำหรับห้องสมุด Firebase รับรองความถูกต้องของ Android ในโมดูลของคุณ (app ระดับ) ไฟล์ Gradle (ปกติ app/build.gradle )

    นอกจากนี้ ในการตั้งค่าการตรวจสอบสิทธิ์ Firebase คุณต้องเพิ่ม SDK บริการ Google Play ในแอปของคุณ

    Java

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

    โดยใช้ Firebase Android BoM แอปของคุณมักจะใช้รุ่นที่รองรับการห้องสมุด Firebase Android

    (ทางเลือก) ประกาศ Firebase อ้างอิงห้องสมุดโดยไม่ต้องใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการพึ่งพา

    โปรดทราบว่าถ้าคุณใช้ห้องสมุด Firebase หลายรายการในแอปของคุณเราขอแนะนำให้ใช้ BoM การจัดการเวอร์ชันห้องสมุดซึ่งทำให้มั่นใจได้ว่าทุกรุ่นที่เข้ากันได้

    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:21.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.0.1'
    }

    คอตลิน+KTX

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

    โดยใช้ Firebase Android BoM แอปของคุณมักจะใช้รุ่นที่รองรับการห้องสมุด Firebase Android

    (ทางเลือก) ประกาศ Firebase อ้างอิงห้องสมุดโดยไม่ต้องใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการพึ่งพา

    โปรดทราบว่าถ้าคุณใช้ห้องสมุด Firebase หลายรายการในแอปของคุณเราขอแนะนำให้ใช้ BoM การจัดการเวอร์ชันห้องสมุดซึ่งทำให้มั่นใจได้ว่าทุกรุ่นที่เข้ากันได้

    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:21.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.0.1'
    }

ตั้งค่าโปรเจ็กต์ Firebase

  1. ตั้งเกมของคุณ SHA-1 ลายนิ้วมือจาก การตั้งค่า หน้าของคอนโซล Firebase

    คุณจะได้รับกัญชา SHA ใบรับรองการลงนามของคุณด้วย gradle signingReport สั่ง:

    ./gradlew signingReport

  2. เปิดใช้งาน Google Play Games เป็นผู้ให้บริการลงชื่อเข้าใช้:

    1. ค้นหารหัสไคลเอ็นต์เว็บเซิร์ฟเวอร์ของโปรเจ็กต์และข้อมูลลับไคลเอ็นต์ รหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ระบุโปรเจ็กต์ Firebase ของคุณไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google Play

      หากต้องการค้นหาค่าเหล่านี้:

      1. เปิดโครงการ Firebase ของคุณใน Google APIs คอนโซล ข้อมูลประจำตัวหน้า
      2. ใน OAuth 2.0 รหัสลูกค้าส่วนเปิดเว็บไคลเอ็นต์ (รถยนต์ที่สร้างขึ้นโดยการให้บริการ Google) รายละเอียดหน้า หน้านี้แสดงรายการ ID และข้อมูลลับของไคลเอ็นต์เว็บเซิร์ฟเวอร์ของคุณ
    2. จากนั้นใน คอนโซล Firebase เปิดการตรวจสอบสิทธิ์

    3. ที่ลงในแท็บวิธีการเปิดใช้งานการเล่นเกมส์การลงชื่อเข้าใช้ผู้ให้บริการ คุณจะต้องระบุรหัสไคลเอ็นต์เว็บเซิร์ฟเวอร์ของโปรเจ็กต์และข้อมูลลับของไคลเอ็นต์ซึ่งได้รับจากคอนโซล API

  1. ใน คอนโซล Google Play เปิดแอปของคุณหรือสร้างหนึ่ง

  2. ในส่วนเติบโตคลิก Play บริการเกม> การตั้งค่าและการจัดการ> การกำหนดค่า

  3. คลิกใช่เกมของฉันแล้วใช้ Google APIs เลือกชื่อของโครงการ Firebase ของคุณจากรายการและคลิกใช้

  4. ในการเล่นเกมส์บริการหน้าการกำหนดค่าคลิกเพิ่มข้อมูลประจำตัว

    1. เลือกเกมชนิดของเซิร์ฟเวอร์
    2. ในด้านลูกค้า OAuth เลือกรหัสลูกค้าเว็บโครงการของคุณ ตรวจสอบว่ารหัสไคลเอ็นต์นี้เป็นรหัสเดียวกับที่คุณระบุเมื่อเปิดใช้การลงชื่อเข้าใช้ Play Games
    3. บันทึกการเปลี่ยนแปลงของคุณ
  5. ยังคงอยู่ในการเล่นเกมส์บริการหน้าการกำหนดค่าคลิกเพิ่มข้อมูลประจำตัวอีกครั้ง

    1. เลือกประเภทของ Android
    2. ในด้านลูกค้า OAuth เลือก Android รหัสลูกค้าของโครงการ (หากคุณไม่เห็น ID ไคลเอ็นต์ Android ของคุณ ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าลายนิ้วมือ SHA-1 ของเกมในคอนโซล Firebase)
    3. บันทึกการเปลี่ยนแปลงของคุณ
  6. ในหน้าทดสอบเพิ่มที่อยู่อีเมลของผู้ใช้ที่ต้องการเพื่อให้สามารถเข้าสู่ระบบในเกมของคุณก่อนที่คุณจะปล่อยมันบน Play สโตร์

รวมการลงชื่อเข้าใช้ Play Games เข้ากับเกมของคุณ

ขั้นแรก รวมการลงชื่อเข้าใช้ Play Games เข้ากับแอปของคุณ ดู เข้าสู่ระบบ Android เกม สำหรับคำแนะนำที่สมบูรณ์

ในการบูรณาการของคุณเมื่อคุณสร้าง GoogleSignInOptions วัตถุใช้ DEFAULT_GAMES_SIGN_IN การตั้งค่าและการโทร requestServerAuthCode :

Java

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

คอตลิน+KTX

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

คุณต้องผ่านเว็บรหัสลูกค้าเซิร์ฟเวอร์ของคุณไปยัง requestServerAuthCode วิธี นี่คือรหัสที่คุณระบุเมื่อเปิดใช้การลงชื่อเข้าใช้ Play Games ในคอนโซล Firebase

ตรวจสอบสิทธิ์ด้วย Firebase

หลังจากที่คุณเพิ่มการลงชื่อเข้าใช้ Play Games ในแอปของคุณ คุณจะต้องตั้งค่า Firebase เพื่อใช้ข้อมูลรับรองบัญชี Google ที่คุณได้รับเมื่อผู้เล่นลงชื่อเข้าใช้ Play Games ได้สำเร็จ

  1. ครั้งแรกในการลงชื่อเข้าใช้ในกิจกรรมของ onCreate วิธีการรับอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseAuth วัตถุ:

Java

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

คอตลิน+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. เมื่อเริ่มต้นกิจกรรมของคุณ ให้ตรวจสอบว่าผู้เล่นลงชื่อเข้าใช้ Firebase แล้วหรือไม่:

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

คอตลิน+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. หลังจากที่มีสัญญาณเล่นด้วยเล่นเกมส์ทั้งเงียบหรือโต้ตอบได้รับรหัสการรับรองความถูกต้องจาก GoogleSignInAccount วัตถุแลกเปลี่ยนเป็นข้อมูลประจำตัว Firebase และตรวจสอบกับ Firebase ใช้ข้อมูลประจำตัว 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);
                    }

                    // ...
                }
            });
}

คอตลิน+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)
                }

                // ...
            }
}

หากการเรียกร้องให้ signInWithCredential ประสบความสำเร็จคุณสามารถใช้ getCurrentUser วิธีการเพื่อให้ได้ข้อมูลบัญชีของผู้ใช้

ขั้นตอนถัดไป

หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก บัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับรหัส Play Games ของพวกเขา บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ของคุณ

ในเกมของคุณคุณจะได้รับของผู้ใช้ Firebase UID จาก 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();

คอตลิน+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
}

ในฐานข้อมูล Firebase เรียลไทม์และการจัดเก็บเมฆกฎความปลอดภัย, คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

เพื่อให้ได้ข้อมูลเล่นเกมส์เล่นของผู้ใช้หรือการบริการที่เข้าถึงเกมเล่นใช้ API ที่มีให้โดย Google Play เกม SDK

ออกจากระบบผู้ใช้โทร FirebaseAuth.signOut() :

Java

FirebaseAuth.getInstance().signOut();

คอตลิน+KTX

Firebase.auth.signOut()