คุณใช้บริการเกมของ Google Play เพื่อให้ผู้เล่นลงชื่อเข้าใช้เกม Android ที่สร้างขึ้นใน Firebase และ Unity ได้ หากต้องการใช้การลงชื่อเข้าใช้บริการเกมของ Google Play ด้วย Firebase ให้ลงชื่อเข้าใช้ผู้เล่นด้วย Google Play Games ก่อน แล้วขอรหัสการให้สิทธิ์ OAuth 2.0 เมื่อดำเนินการดังกล่าว จากนั้นส่งรหัสการให้สิทธิ์ไปยัง PlayGamesAuthProvider เพื่อสร้างข้อมูลเข้าสู่ระบบ Firebase ซึ่งคุณใช้เพื่อตรวจสอบสิทธิ์กับ Firebase ได้
ก่อนเริ่มต้น
ตั้งค่าโปรเจ็กต์ Unity
เพิ่มไฟล์กำหนดค่า Firebase และ Firebase Unity SDK ลงในโปรเจ็กต์ Unity ตามที่อธิบายไว้ใน เพิ่ม Firebase ลงในโปรเจ็กต์ Unity ทำตามวิธีการสำหรับ Android
อย่าลืมนำเข้า
FirebaseAuth.unitypackageใน Unity Editor ให้ตั้งชื่อแพ็กเกจ Android ของเกมในส่วนการตั้งค่าบิลด์ > การตั้งค่าเพลเยอร์ > การตั้งค่าอื่นๆ
จากนั้นในส่วนBuild Settings > Player Settings > Publishing Settings ให้เลือกหรือสร้าง Keystore และคีย์ที่จะใช้เพื่อลงนามในแพ็กเกจ Android คุณต้องลงชื่อ APK เพื่อให้การลงชื่อเข้าใช้ Play Games ทำงานได้ ข้อกำหนดนี้ไม่ได้มีไว้สำหรับการเผยแพร่เท่านั้น แต่ยังใช้ในระหว่างการพัฒนาเกมด้วย
ตั้งค่าโปรเจ็กต์ Firebase
ในคอนโซล Firebase ให้ไปที่โปรเจ็กต์ Firebase ที่คุณลงทะเบียนโปรเจ็กต์ Unity
ระบุลายนิ้วมือ SHA-1 ของเกม
ในFirebase คอนโซล ให้ไปที่
การตั้งค่า > แท็บทั่วไปเลื่อนลงไปที่การ์ดแอปของคุณ เลือกแอป Android แล้ว เพิ่มลายนิ้วมือ SHA-1 ในช่องลายนิ้วมือของใบรับรอง SHA
คุณรับลายนิ้วมือ SHA-1 ของคีย์ได้ด้วยคำสั่ง
keytoolkeytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTOREหรือคุณจะรับแฮช SHA ของใบรับรองการลงนามด้วยคำสั่ง gradle
signingReportก็ได้gradlew signingReport
ดูรายละเอียดเกี่ยวกับวิธีรับลายนิ้วมือ SHA ของแอปได้ที่การตรวจสอบสิทธิ์ไคลเอ็นต์
คุณต้องลงนาม APK ด้วยคีย์นี้ รวมถึงในระหว่างการพัฒนา
เปิดใช้ Google Play Games เป็นผู้ให้บริการลงชื่อเข้าใช้โดยทำดังนี้
ในFirebaseคอนโซล ให้ไปที่ความปลอดภัย > การตรวจสอบสิทธิ์
สร้างและรับรหัสไคลเอ็นต์และข้อมูลลับไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ของโปรเจ็กต์โดยทำดังนี้
ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ผู้ให้บริการลงชื่อเข้าใช้ Google
คัดลอกรหัสไคลเอ็นต์และรหัสลับของเว็บเซิร์ฟเวอร์จากผู้ให้บริการลงชื่อเข้าใช้ Google
ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ผู้ให้บริการลงชื่อเข้าใช้ Play Games และระบุรหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์และ รหัสลับไคลเอ็นต์ของโปรเจ็กต์ที่คุณได้รับในขั้นตอนสุดท้าย
กำหนดค่า 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 Gamesทรัพยากรที่คุณต้องการใช้กับเกม (หากไม่ต้องการใช้ทรัพยากรใดๆ ในทันที คุณสามารถสร้างรายการตัวยึดตำแหน่งได้) จากนั้นในหน้ากิจกรรม รางวัลพิเศษ หรือลีดเดอร์บอร์ด ให้คลิกรับทรัพยากร แล้วคัดลอกข้อมูลโค้ดทรัพยากร Android ไว้ในที่ที่สะดวก คุณจะต้องใช้ข้อมูลโค้ดเพื่อตั้งค่าปลั๊กอิน Google Play Games services
ข้อมูลโค้ดทรัพยากรจะมีลักษณะดังตัวอย่างต่อไปนี้
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>ในหน้าผู้ทดสอบ ให้เพิ่มอีเมลของผู้ใช้ที่ต้อง ลงชื่อเข้าใช้เกมได้ก่อนที่คุณจะเผยแพร่เกมใน Play Store
ผสานรวมการลงชื่อเข้าใช้ Play Games เข้ากับเกม
ดาวน์โหลดรุ่นล่าสุดของปลั๊กอิน Play Games สำหรับ Unity แล้วแตกไฟล์
นำเข้าแพ็กเกจ Unity ของปลั๊กอินไปยังโปรเจ็กต์ Unity คุณจะพบแพ็กเกจ Unity ได้ในไดเรกทอรี
current-buildของที่เก็บถาวรของรุ่นตั้งค่าปลั๊กอิน Play Games โดยทำดังนี้
- คลิกหน้าต่าง > Google Play Games > การตั้งค่า > การตั้งค่า Android เพื่อเปิดหน้าจอการกำหนดค่า Android
- วางข้อมูลโค้ดทรัพยากร Android ที่คุณได้รับจาก Play Console ลงในช่องคำจำกัดความของทรัพยากร
- วางรหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ที่คุณระบุเมื่อเปิดใช้การลงชื่อเข้าใช้ Play Games ในFirebaseคอนโซลลงในช่องรหัสไคลเอ็นต์
- คลิกตั้งค่า
ในเกม ให้กำหนดค่าไคลเอ็นต์ Play Games โดย
RequestServerAuthCodeเปิดใช้การตั้งค่าusing GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();จากนั้นเมื่อผู้เล่นเลือกที่จะลงชื่อเข้าใช้ด้วย Play Games ให้เรียกใช้
Social.localUser.Authenticate():Social.localUser.Authenticate((bool success) => { // handle success or failure });
ตรวจสอบสิทธิ์ด้วย Firebase
หลังจากเพิ่มการลงชื่อเข้าใช้ Play Games ในเกมแล้ว คุณจะใช้รหัสการให้สิทธิ์จากบริการเกมของ Play เพื่อตรวจสอบสิทธิ์กับ Firebase ได้
หลังจากผู้เล่นลงชื่อเข้าใช้โดยใช้ Play Games สำเร็จแล้ว ให้รับรหัสการให้สิทธิ์สำหรับบัญชีของผู้เล่นในตัวแฮนเดิลการดำเนินการต่อของการลงชื่อเข้าใช้ ดังนี้
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });จากนั้นแลกรหัสการให้สิทธิ์จากบริการเกมของ Play เป็นข้อมูลเข้าสู่ระบบ Firebase แล้วใช้ข้อมูลเข้าสู่ระบบ Firebase เพื่อตรวจสอบสิทธิ์ผู้เล่น
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
ขั้นตอนถัดไป
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และ ลิงก์กับรหัส Play Games ของผู้ใช้ ระบบจะจัดเก็บบัญชีใหม่นี้เป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ได้
ในเกม คุณสามารถรับ UID ของ Firebase ของผู้ใช้จากออบเจ็กต์ Firebase.Auth.FirebaseUser ได้โดยทำดังนี้
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string 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 User.TokenAsync() instead.
string uid = user.UserId;
}
ในกฎความปลอดภัยของฐานข้อมูลเรียลไทม์ของ Firebase และ Cloud Storage คุณสามารถรับรหัสผู้ใช้ที่ไม่ซ้ำกันของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้รหัสดังกล่าวเพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้
หากต้องการรับข้อมูลผู้เล่น Play Games ของผู้ใช้หรือเข้าถึงบริการเกมของ Play ให้ใช้ API ที่ปลั๊กอิน Play Games มีให้
หากต้องการให้ออกจากระบบ ให้เรียกใช้ SignOut()
auth.SignOut();