คุณใช้บริการเกมของ Google Play เพื่อลงชื่อเข้าใช้เกม Android ให้ผู้เล่นได้
ที่สร้างขึ้นจาก Firebase หากต้องการใช้บริการเกมของ Google Play ให้ลงชื่อเข้าใช้ด้วย Firebase
ก่อนอื่นให้ลงชื่อเข้าใช้โปรแกรมเล่นด้วย Google Play Games แล้วขอการตรวจสอบสิทธิ์ OAuth 2.0
เมื่อคุณทำเช่นนั้น จากนั้นส่งรหัสการตรวจสอบสิทธิ์ไปยัง PlayGamesAuthProvider
เพื่อ
สร้างข้อมูลเข้าสู่ระบบ Firebase ที่ใช้ตรวจสอบสิทธิ์กับ Firebase ได้
ก่อนเริ่มต้น
ตั้งค่าโปรเจ็กต์ Android
หากคุณยังไม่ได้ดำเนินการ เพิ่ม Firebase ลงในโปรเจ็กต์ Android
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (ปกติ
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
) เพิ่มทรัพยากร Dependency สำหรับไลบรารี Firebase Authentication สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการกำหนดเวอร์ชันไลบรารีนอกจากนี้ ในการตั้งค่า Firebase Authentication คุณจะต้องเพิ่ม SDK ของบริการ Google Play ลงในแอปของคุณ
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.5.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") }เมื่อใช้Firebase Android BoM แอปจะใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้เสมอ
(ทางเลือก) เพิ่มทรัพยากร Dependency ของไลบรารี Firebase โดยไม่ใช้ BoM
หากเลือกไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชัน ในบรรทัดทรัพยากร Dependency
โปรดทราบว่าหากคุณใช้ไลบรารี Firebase หลายรายการในแอป เราขอแนะนำอย่างยิ่ง แนะนำให้ใช้ BoM ในการจัดการเวอร์ชันไลบรารี เพื่อให้มั่นใจว่าทุกเวอร์ชัน ที่เข้ากันได้
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.1.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") }
สร้างโปรเจ็กต์ Firebase
ตั้งค่าลายนิ้วมือ SHA-1 ของเกมจาก หน้าการตั้งค่า ของคอนโซล Firebase
คุณจะรับแฮช SHA ของใบรับรองที่ลงนามได้ด้วย Gradle คำสั่ง
signingReport
:./gradlew signingReport
เปิดใช้ Google Play Games เป็นผู้ให้บริการการลงชื่อเข้าใช้
ค้นหารหัสไคลเอ็นต์สำหรับเว็บเซิร์ฟเวอร์และรหัสลับไคลเอ็นต์ของโปรเจ็กต์ เว็บ รหัสไคลเอ็นต์ของเซิร์ฟเวอร์จะระบุโปรเจ็กต์ Firebase ของคุณไปยัง Google Play เซิร์ฟเวอร์การตรวจสอบสิทธิ์
วิธีค้นหาค่าเหล่านี้
- เปิดโปรเจ็กต์ Firebase ในหน้าข้อมูลเข้าสู่ระบบของคอนโซล Google APIs
- ในส่วนรหัสไคลเอ็นต์ OAuth 2.0 ให้เปิดเว็บไคลเอ็นต์ (อัตโนมัติ) สร้างโดยบริการของ Google) หน้านี้จะแสดงรายการเว็บของคุณ รหัสไคลเอ็นต์และข้อมูลลับของเซิร์ฟเวอร์
จากนั้นเปิดส่วนการตรวจสอบสิทธิ์ในคอนโซล Firebase
ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้การลงชื่อเข้าใช้ Play Games คุณจะต้องระบุเว็บเซิร์ฟเวอร์ของโปรเจ็กต์ รหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ ซึ่งได้จากคอนโซล API
กำหนดค่า Play Games services ด้วยข้อมูลแอป Firebase ของคุณ
ใน คอนโซล Google Play, เปิดแอป Google Play หรือสร้างแอป
ในส่วนขยาย ให้คลิก Play Games services การตั้งค่าและ การจัดการ > การกำหนดค่า
คลิกใช่ เกมของฉันใช้ Google APIs อยู่แล้ว เลือก Firebase จากรายการ แล้วคลิกใช้
ในหน้าการกำหนดค่าของ Play Games services ให้คลิก เพิ่มข้อมูลเข้าสู่ระบบ
- เลือกประเภทเซิร์ฟเวอร์เกม
- เลือกรหัสไคลเอ็นต์ของเว็บของโปรเจ็กต์ในช่องไคลเอ็นต์ OAuth เป็น ตรวจสอบว่าเป็นรหัสไคลเอ็นต์ที่คุณระบุไว้เมื่อเปิดใช้ กำลังลงชื่อเข้าใช้ Play Games
- บันทึกการเปลี่ยนแปลง
ขณะยังอยู่ในหน้าการกำหนดค่า Play Games services ให้คลิก เพิ่มข้อมูลเข้าสู่ระบบอีกครั้ง
- เลือกประเภท Android
- ในช่องไคลเอ็นต์ OAuth ให้เลือกรหัสไคลเอ็นต์ Android ของโปรเจ็กต์ (ถ้าคุณไม่เห็นรหัสไคลเอ็นต์ของ Android ให้ตรวจสอบว่าได้ตั้งค่ารหัสของเกม ลายนิ้วมือ SHA-1 ในคอนโซล Firebase)
- บันทึกการเปลี่ยนแปลง
ในหน้าผู้ทดสอบ ให้เพิ่มอีเมลของผู้ใช้ที่ต้องการ สามารถลงชื่อเข้าใช้เกมของคุณได้ก่อนที่จะเผยแพร่ใน Play Store
ผสานรวมการลงชื่อเข้าใช้ Play Games เข้ากับเกมของคุณ
ขั้นแรก ให้รวมการลงชื่อเข้าใช้ Play Games เข้ากับแอปของคุณ โปรดดู ลงชื่อเข้าใช้ Android Games
ในการผสานรวม เมื่อสร้างออบเจ็กต์ GoogleSignInOptions
ให้ใช้
การกำหนดค่า DEFAULT_GAMES_SIGN_IN
และการเรียกใช้ 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();
คุณต้องส่งรหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ไปยังเมธอด requestServerAuthCode
นี่คือรหัสที่คุณให้ไว้เมื่อเปิดใช้การลงชื่อเข้าใช้ Play Games ใน
คอนโซล Firebase
ตรวจสอบสิทธิ์ด้วย Firebase
หลังจากที่คุณเพิ่มการลงชื่อเข้าใช้ Play Games ลงในแอป คุณจะต้องตั้งค่า Firebase เพื่อใช้ ข้อมูลรับรองบัญชี Google ที่คุณจะได้รับเมื่อผู้เล่นลงชื่อเข้าใช้สำเร็จ ด้วย Play Games
- ก่อนอื่น ในเมธอด
onCreate
ของกิจกรรมการลงชื่อเข้าใช้ ให้รับ อินสแตนซ์ที่แชร์ของออบเจ็กต์FirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- เมื่อเริ่มกิจกรรม ให้ตรวจสอบว่าผู้เล่นได้ลงชื่อไว้แล้วหรือไม่ ด้วย Firebase
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.
- หลังจากที่ผู้เล่นลงชื่อเข้าใช้ด้วย Play Games แบบเงียบหรือมีการโต้ตอบได้
รับรหัสการให้สิทธิ์จากออบเจ็กต์
GoogleSignInAccount
แล้วแลกเป็น ข้อมูลเข้าสู่ระบบ Firebase และตรวจสอบสิทธิ์กับ Firebase โดยใช้ 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); } // ... } }); }
หากโทรหา signInWithCredential
สำเร็จ คุณจะใช้เมธอด getCurrentUser
เพื่อรับข้อมูลบัญชีของผู้ใช้ได้
ขั้นตอนถัดไป
หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่ และ ลิงก์กับรหัส Play Games ของตน บัญชีใหม่นี้จัดเก็บไว้เป็นส่วนหนึ่งของ Firebase ซึ่งสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในบัญชีของคุณ
ในเกม คุณจะรับ Firebase UID ของผู้ใช้ได้จาก 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();
ในฐานข้อมูลเรียลไทม์ของ Firebase และกฎความปลอดภัยของ Cloud Storage คุณจะได้รับ
รหัสผู้ใช้ที่ไม่ซ้ำกันของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth
และใช้เพื่อ
ควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้
หากต้องการรับข้อมูลผู้เล่น Play Games ของผู้ใช้หรือการเข้าถึงบริการเกมของ Play ใช้ API จาก Google Play Games SDK
หากต้องการนำผู้ใช้ออกจากระบบ โปรดโทรหา FirebaseAuth.signOut()
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();