คุณสามารถอนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้บัญชี Google ของตนเองได้ด้วยการผสานรวม Google Sign-In เข้ากับแอป
ก่อนเริ่มต้น
ตั้งค่าโปรเจ็กต์ Unity
คุณต้องทำสิ่งต่อไปนี้ก่อนจึงจะใช้ Firebase Authentication ได้
ลงทะเบียนโปรเจ็กต์ Unity และกำหนดค่าให้ใช้ Firebase
หากโปรเจ็กต์ Unity ใช้ Firebase อยู่แล้ว แสดงว่าโปรเจ็กต์ดังกล่าวลงทะเบียนและกำหนดค่าสำหรับ Firebase แล้ว
หากไม่มีโปรเจ็กต์ Unity คุณสามารถดาวน์โหลดแอปตัวอย่างได้
เพิ่ม Firebase Unity SDK (โดยเฉพาะ
FirebaseAuth.unitypackage) ลงในโปรเจ็กต์ Unity
โปรดทราบว่าการเพิ่ม Firebase ลงในโปรเจ็กต์ Unity เกี่ยวข้องกับงานทั้งในคอนโซล Firebase และในโปรเจ็กต์ Unity ที่เปิดอยู่ (เช่น คุณดาวน์โหลดไฟล์การกำหนดค่า Firebase จากคอนโซล แล้วย้ายไฟล์เหล่านั้นไปยังโปรเจ็กต์ Unity)
ตั้งค่าโปรเจ็กต์ Firebase และข้อมูลเข้าสู่ระบบ
Android: ระบุลายนิ้วมือ SHA-1 ของแอปในคอนโซล Firebase โดยทำดังนี้
- ในคอนโซล Firebase ให้ไปที่
การตั้งค่า > แท็บทั่วไป ไปที่การ์ดแอปของคุณ เลือกแอป Android แล้วเพิ่มลายนิ้วมือ SHA-1 ในช่องลายนิ้วมือของใบรับรอง SHA
คุณสามารถดึงข้อมูลลายนิ้วมือ SHA-1 ของ Keystore ได้โดยใช้
keytoolดังนี้keytool -keystore path-to-keystore.keystore -list -vดูรายละเอียดเพิ่มเติมเกี่ยวกับการรับลายนิ้วมือ SHA ของแอปได้ที่การตรวจสอบสิทธิ์ไคลเอ็นต์
- ในคอนโซล Firebase ให้ไปที่
เปิดใช้ Google Sign-In และคัดลอกรหัสไคลเอ็นต์เว็บ:
- ในคอนโซล Firebase ให้ไปที่ความปลอดภัย > การตรวจสอบสิทธิ์
- ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ผู้ให้บริการลงชื่อเข้าใช้ Google
- ขยายส่วนการกำหนดค่า Web SDK และคัดลอกรหัสไคลเอ็นต์เว็บ (เช่น
123456-abc.apps.googleusercontent.com) ซึ่งแสดงถึงการอ้างสิทธิ์กลุ่มเป้าหมาย (aud) ของโทเค็นระบุตัวตน และจำเป็นสำหรับทั้ง Android และ iOS - คลิกบันทึก
อัปเดตไฟล์การกำหนดค่า Firebase และคัดลอกรหัสไคลเอ็นต์ iOS แบบย้อนกลับ
- ดาวน์โหลดไฟล์การกำหนดค่า Firebase ล่าสุดจากคอนโซล Firebase (
สำหรับ Android และgoogle-services.json สำหรับ iOS) แล้วแทนที่สำเนาเก่าในโปรเจ็กต์ Unity (ดูหัวข้อเพิ่ม Firebase ลงในโปรเจ็กต์ Unity)GoogleService-Info.plist - iOS: เปิดไฟล์
และคัดลอกค่าของคีย์GoogleService-Info.plist REVERSED_CLIENT_ID(เช่นcom.googleusercontent.apps.12345-abc) คุณต้องใช้ค่านี้เพื่อกำหนดค่า URL Scheme สำหรับการเปลี่ยนเส้นทางของ iOS
- ดาวน์โหลดไฟล์การกำหนดค่า Firebase ล่าสุดจากคอนโซล Firebase (
ผสานรวมปลั๊กอิน Google Sign-In เข้ากับโปรเจ็กต์ Unity
นำเข้าปลั๊กอิน:
- หากคุณกำลังผสานรวมเข้ากับโปรเจ็กต์ที่มีอยู่ ให้สำรองข้อมูลโปรเจ็กต์และนำปลั๊กอิน Google Sign-In เวอร์ชันเก่าออกก่อนดำเนินการต่อ
- ดาวน์โหลด
GoogleSignInNative.unitypackageจาก GitHub และนำเข้าสู่โปรเจ็กต์ Unity (Assets > Import Package > Custom Package) ตรวจสอบว่าได้เลือกไฟล์ทั้งหมดแล้ว แล้วคลิกนำเข้า
กำหนดการตั้งค่าปลั๊กอิน:
- ใน Unity Editor ให้ไปที่ Window > Google Sign-In Native > Settings
- วางรหัสไคลเอ็นต์เว็บลงในช่องแรก
- วางรหัสไคลเอ็นต์ iOS แบบย้อนกลับลงในช่องที่ 2
- คลิก Save Settings
แก้ไขทรัพยากร Dependency แบบเนทีฟ
- ไปที่ Assets > External Dependency Manager > Android Resolver > Force Resolve
- รอข้อความแจ้งว่าดำเนินการสำเร็จ ซึ่งจะดาวน์โหลดไลบรารี Credential Manager ของ
googleidและandroidxแบบเนทีฟ
เข้าถึงชั้นเรียน Firebase.Auth.FirebaseAuth
คลาส FirebaseAuth เป็นเกตเวย์สำหรับการเรียก API ทั้งหมด
ซึ่งเข้าถึงได้ผ่าน FirebaseAuth.DefaultInstance
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
ตรวจสอบสิทธิ์ด้วย Firebase
ตั้งค่า
GoogleSignInManagerในฉาก:- สร้าง
GameObjectเปล่าในฉากเริ่มต้นชื่อGoogleSignInManager - แนบสคริปต์
GoogleSignInManager.csเข้ากับเหตุการณ์ - ลากชิ้นงาน
GoogleSignInNativeSettings(อยู่ในAssets/GoogleSignInNative/Resources) ไปยังช่องการตั้งค่าการลงชื่อเข้าใช้ในสคริปต์
- สร้าง
เรียกใช้ Google Sign-In และแลกเปลี่ยนโทเค็นระบุตัวตนเป็นข้อมูลเข้าสู่ระบบ Firebase
สร้างสคริปต์ตัวควบคุมที่สมัครรับข้อมูล
GoogleSignInManager.OnSignInCompletedและGoogleSignInManager.OnSignInFailed, ทริกเกอร์การลงชื่อเข้าใช้ด้วยGoogleSignInManager.Instance.StartSignIn()และแลกเปลี่ยนโทเค็นรหัส Google ที่ได้เป็นข้อมูลเข้าสู่ระบบ Firebase โดยใช้GoogleAuthProvider.GetCredential:using Firebase.Auth; using Firebase.Extensions; using UnityEngine; public class MyAuthController : MonoBehaviour { private FirebaseAuth auth; private void Awake() { auth = FirebaseAuth.DefaultInstance; } private void OnEnable() { GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess; GoogleSignInManager.OnSignInFailed += HandleSignInFailure; } private void OnDisable() { GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess; GoogleSignInManager.OnSignInFailed -= HandleSignInFailure; } public void OnSignInButtonClick() { GoogleSignInManager.Instance.StartSignIn(); } private void HandleSignInSuccess(string idToken) { Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase..."); Credential credential = GoogleAuthProvider.GetCredential(idToken, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); }); } private void HandleSignInFailure(string error) { Debug.LogError($"[Auth] Google Sign-In failed: {error}"); } }
สร้างแอป
Android
- ตรวจสอบว่าชื่อแพ็กเกจในการตั้งค่าโปรแกรมเล่นตรงกับข้อมูลเข้าสู่ระบบ Firebase และ Google Cloud OAuth ทุกประการ
- ตรวจสอบว่าได้ตั้งค่าระดับ API ขั้นต่ำเป็น 34 ขึ้นไป
- คลิก Build and Run
iOS
- สร้างโปรเจ็กต์ใน Unity เพื่อสร้างโปรเจ็กต์ Xcode แล้วเปิดไฟล์
.xcworkspaceที่สร้างขึ้น - ใน Xcode ให้ไปที่แท็บ Signing & Capabilities แล้วเลือกทีมพัฒนา
- ปลั๊กอินจะเพิ่ม URL Scheme ที่กำหนดเอง (
REVERSED_CLIENT_ID) ลงในโปรเจ็กต์ Xcode โดยอัตโนมัติ สร้างและเรียกใช้ในอุปกรณ์จริง
ขั้นตอนถัดไป
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และลิงก์กับข้อมูลเข้าสู่ระบบ ซึ่งได้แก่ ชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ที่ผู้ใช้ใช้ลงชื่อเข้าใช้ ระบบจะจัดเก็บบัญชีใหม่นี้เป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม
-
ในแอป คุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ได้จากออบเจ็กต์
Firebase.Auth.FirebaseUserดังนี้Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // 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 Realtime DatabaseและCloud Storage กฎความปลอดภัย คุณสามารถรับรหัสผู้ใช้ที่ไม่ซ้ำกันของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร
authและใช้เพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้
คุณสามารถอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการตรวจสอบสิทธิ์หลายรายได้ด้วยการลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่
หากต้องการนำผู้ใช้ออกจากระบบ ให้เรียกใช้
SignOut():
auth.SignOut();