คุณสามารถใช้บริการเกมของ 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 เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารีนอกจากนี้ คุณต้องเพิ่ม SDK ของบริการ Google Play ลงในแอปด้วย ซึ่งเป็นส่วนหนึ่งของการตั้งค่า Firebase Authentication
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.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:22.0.0") }การใช้ Firebase Android BoM จะทำให้แอปใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้อยู่เสมอ
(ทางเลือก) เพิ่มการอ้างอิงไลบรารี 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:25.0.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:22.0.0") }
ตั้งค่าโปรเจ็กต์ Firebase
ในคอนโซล Firebase ให้ไปที่ความปลอดภัย > การตรวจสอบสิทธิ์
ในแท็บการตั้งค่า ให้ตั้งค่าลายนิ้วมือ SHA-1 ของเกม
คุณรับแฮช 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 Console ให้เปิด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
ในการผสานรวม เมื่อสร้างออบเจ็กต์ GoogleSignInOptions ให้ใช้การกำหนดค่า DEFAULT_GAMES_SIGN_IN และเรียกใช้ requestServerAuthCode
Kotlin
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ของกิจกรรมการลงชื่อเข้าใช้ ให้รับ อินสแตนซ์ที่แชร์ของออบเจ็กต์FirebaseAuthKotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
เมื่อเริ่มต้นกิจกรรม ให้ตรวจสอบว่าผู้เล่นลงชื่อเข้าใช้ Firebase แล้วหรือไม่
Kotlin
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); }
หากผู้เล่นไม่ได้ลงชื่อเข้าใช้ ให้แสดงประสบการณ์การใช้งานเมื่อไม่ได้ลงชื่อเข้าใช้ของเกม รวมถึงตัวเลือกในการลงชื่อเข้าใช้
หลังจากผู้เล่นลงชื่อเข้าใช้ด้วย Play Games ไม่ว่าจะโดยอัตโนมัติหรือแบบโต้ตอบ ให้ รับรหัสการให้สิทธิ์จากออบเจ็กต์
GoogleSignInAccountแลกเป็น ข้อมูลเข้าสู่ระบบ Firebase แล้วตรวจสอบสิทธิ์กับ Firebase โดยใช้ข้อมูลเข้าสู่ระบบ FirebaseKotlin
// 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 และสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ได้
ในเกม คุณสามารถรับ UID ของ Firebase ของผู้ใช้จากFirebaseUser
ออบเจ็กต์ได้โดยทำดังนี้
Kotlin
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 Games ให้ใช้ API ที่ Google Play Games SDK มีให้
หากต้องการออกจากระบบของผู้ใช้ ให้โทรหา FirebaseAuth.signOut() โดยทำดังนี้
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();