คุณใช้บริการ Google Play Games เพื่อลงชื่อเข้าใช้ให้ผู้เล่นในเกม Android ที่สร้างบน Firebase ได้ หากต้องการใช้บริการ Google Play Games ลงชื่อเข้าใช้ด้วย 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
) ให้เพิ่มการพึ่งพาสำหรับ Firebase Authentication ไลบรารี่สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมเวอร์ชันไลบรารีนอกจากนี้ ในการตั้งค่าการตรวจสอบสิทธิ์ Firebase คุณจะต้องเพิ่ม SDK บริการ Google Play ลงในแอปของคุณ
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.6.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.7.0") }เมื่อใช้ Firebase Android BoM แอปของคุณจะใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้เสมอ
กำลังมองหาโมดูลไลบรารีเฉพาะของ Kotlin อยู่ใช่ไหม? เริ่มตั้งแต่ เดือนตุลาคม 2023 (Firebase BoM 32.5.0) ทั้งนักพัฒนา Kotlin และ Java สามารถพึ่งพาโมดูลไลบรารีหลักได้ (สำหรับรายละเอียด โปรดดู คำถามที่พบบ่อยเกี่ยวกับโครงการริเริ่มนี้ )(ทางเลือก) เพิ่มการพึ่งพาไลบรารี Firebase โดยไม่ ใช้ BoM
หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการขึ้นต่อกัน
โปรดทราบว่าหากคุณใช้ไลบรารี 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:22.3.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:20.7.0") }
ตั้งค่าโปรเจ็กต์ Firebase ของคุณ
ตั้งค่าลายนิ้วมือ SHA-1 ของเกมจากหน้า การตั้งค่า ของคอนโซล Firebase
คุณสามารถรับแฮช SHA ของใบรับรองการลงนามของคุณด้วยคำสั่ง gradle
signingReport
:./gradlew signingReport
เปิดใช้งาน Google Play Games เป็นผู้ให้บริการลงชื่อเข้าใช้:
ค้นหารหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ของโปรเจ็กต์และรหัสลับไคลเอ็นต์ รหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์จะระบุโปรเจ็กต์ Firebase ของคุณไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google Play
หากต้องการค้นหาค่าเหล่านี้:
- เปิดโครงการ Firebase ของคุณในหน้าข้อมูลรับรอง คอนโซล Google APIs
- ในส่วน รหัสไคลเอ็นต์ OAuth 2.0 ให้เปิดหน้ารายละเอียด เว็บไคลเอ็นต์ (สร้างอัตโนมัติโดยบริการ Google) หน้านี้แสดงรายการ ID ไคลเอ็นต์ของเว็บเซิร์ฟเวอร์และความลับของคุณ
จากนั้นใน คอนโซล Firebase ให้เปิดส่วน การรับรองความถูกต้อง
บนแท็บ วิธีการลงชื่อเข้า ใช้ ให้เปิดใช้งานผู้ให้บริการลงชื่อเข้าใช้ Play Games คุณจะต้องระบุ ID ไคลเอ็นต์เว็บเซิร์ฟเวอร์ของโปรเจ็กต์และรหัสลับไคลเอ็นต์ ซึ่งคุณได้รับจากคอนโซล API
กำหนดค่าบริการ Play Games ด้วยข้อมูลแอป Firebase ของคุณ
ใน Google Play Console ให้เปิดแอป Google Play ของคุณหรือสร้างขึ้นใหม่
ในส่วน ขยาย คลิก บริการเกมของ Play > การตั้งค่าและการจัดการ > การกำหนดค่า
คลิก ใช่ เกมของฉันใช้ Google API แล้ว เลือกโปรเจ็กต์ Firebase ของคุณจากรายการ จากนั้นคลิก ใช้
ในหน้าการกำหนดค่าบริการ Play Games ให้คลิก เพิ่มข้อมูลรับรอง
- เลือกประเภท เซิร์ฟเวอร์เกม
- ในช่อง ไคลเอ็นต์ OAuth ให้เลือกรหัสไคลเอ็นต์ของเว็บของโปรเจ็กต์ ตรวจสอบให้แน่ใจว่านี่เป็นรหัสไคลเอ็นต์เดียวกับที่คุณระบุเมื่อเปิดใช้งานการลงชื่อเข้าใช้ Play Games
- บันทึกการเปลี่ยนแปลงของคุณ
ยังอยู่ในหน้าการกำหนดค่าบริการ Play Games ให้คลิก เพิ่มข้อมูลรับรอง อีกครั้ง
- เลือกประเภท Android
- ในช่อง ไคลเอ็นต์ OAuth ให้เลือกรหัสไคลเอ็นต์ Android ของโปรเจ็กต์ (หากคุณไม่เห็นรหัสไคลเอ็นต์ Android ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าลายนิ้วมือ SHA-1 ของเกมในคอนโซล Firebase)
- บันทึกการเปลี่ยนแปลงของคุณ
ในหน้า ผู้ทดสอบ ให้เพิ่มที่อยู่อีเมลของผู้ใช้ที่ต้องการลงชื่อเข้าใช้เกมของคุณก่อนที่จะเผยแพร่บน Play Store
รวมการลงชื่อเข้าใช้ Play Games เข้ากับเกมของคุณ
ขั้นแรก ผสานรวมการลงชื่อเข้าใช้ Play Games เข้ากับแอปของคุณ ดู ลงชื่อเข้าใช้เกม Android สำหรับคำแนะนำทั้งหมด
ในการบูรณาการของคุณ เมื่อคุณสร้างออบเจ็กต์ 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 Realtime และกฎความปลอดภัยของ Cloud Storage คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้ได้จากตัวแปร auth
และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้
หากต้องการรับข้อมูลผู้เล่น Play Games ของผู้ใช้หรือเข้าถึงบริการ Play Games ให้ใช้ API ที่ได้รับจาก Google Play Games SDK
หากต้องการออกจากระบบผู้ใช้ ให้โทร FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();