คุณใช้ Firebase Authentication เพื่ออนุญาตให้ผู้ใช้ลงชื่อเข้าใช้เกมโดยใช้วิธีการลงชื่อเข้าใช้หนึ่งวิธีขึ้นไปได้ ซึ่งรวมถึงการลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน และผู้ให้บริการข้อมูลประจำตัวแบบรวมศูนย์ เช่น Google Sign-In และ Facebook Login บทแนะนำนี้จะช่วยให้คุณเริ่มต้นใช้งาน Firebase Authentication โดยแสดงวิธีเพิ่มการลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่านในเกม
ก่อนเริ่มต้น
คุณต้องดำเนินการต่อไปนี้ก่อนจึงจะใช้ Firebase Authentication ได้
ลงทะเบียนโปรเจ็กต์ Unity และกําหนดค่าให้ใช้ Firebase
หากโปรเจ็กต์ Unity ใช้ Firebase อยู่แล้ว ก็แสดงว่าได้ ลงทะเบียนและกำหนดค่าสำหรับ Firebase แล้ว
หากไม่มีโปรเจ็กต์ Unity คุณสามารถดาวน์โหลดแอปตัวอย่างได้
เพิ่ม Firebase Unity SDK (โดยเฉพาะ
FirebaseAuth.unitypackage
) ลงใน โปรเจ็กต์ Unity
โปรดทราบว่าการเพิ่ม Firebase ลงในโปรเจ็กต์ Unity จะเกี่ยวข้องกับงานทั้งในFirebaseคอนโซลและในโปรเจ็กต์ Unity ที่เปิดอยู่ (เช่น คุณดาวน์โหลดไฟล์กำหนดค่า Firebase จากคอนโซล จากนั้นย้าย ไฟล์เหล่านั้นไปยังโปรเจ็กต์ Unity)
ลงชื่อสมัครใช้ผู้ใช้ใหม่
สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้ใหม่ลงทะเบียนกับเกมโดยใช้อีเมล
และรหัสผ่าน เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จแล้ว ให้ตรวจสอบอีเมล
และรหัสผ่านที่ผู้ใช้ระบุ จากนั้นส่งไปยังเมธอด CreateUserWithEmailAndPasswordAsync
auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
return;
}
// Firebase user has been created.
Firebase.Auth.AuthResult result = task.Result;
Debug.LogFormat("Firebase user created successfully: {0} ({1})",
result.User.DisplayName, result.User.UserId);
});
ลงชื่อเข้าใช้ผู้ใช้ที่มีอยู่
สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้เดิมลงชื่อเข้าใช้ด้วยอีเมล
และรหัสผ่านของตน เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จสมบูรณ์ ให้เรียกใช้เมธอด SignInWithEmailAndPasswordAsync
ดังนี้
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("SignInWithEmailAndPasswordAsync 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);
});
ตั้งค่าตัวแฮนเดิลเหตุการณ์การเปลี่ยนแปลงสถานะการตรวจสอบสิทธิ์และรับข้อมูลผู้ใช้
หากต้องการตอบสนองต่อเหตุการณ์การลงชื่อเข้าใช้และลงชื่อออก ให้แนบตัวแฮนเดิลเหตุการณ์กับออบเจ็กต์การตรวจสอบสิทธิ์ส่วนกลาง ระบบจะเรียกใช้แฮนเดิลนี้ทุกครั้งที่สถานะการลงชื่อเข้าใช้ของผู้ใช้เปลี่ยนแปลง เนื่องจากตัวแฮนเดิลจะทำงานหลังจากที่ออบเจ็กต์การตรวจสอบสิทธิ์ ได้รับการเริ่มต้นอย่างสมบูรณ์และหลังจากที่การเรียกเครือข่ายเสร็จสมบูรณ์แล้วเท่านั้น จึงเป็นตำแหน่งที่ดีที่สุด ในการรับข้อมูลเกี่ยวกับผู้ใช้ที่ลงชื่อเข้าใช้
ลงทะเบียนตัวแฮนเดิลเหตุการณ์โดยใช้ฟิลด์ StateChanged
ของออบเจ็กต์ FirebaseAuth
เมื่อผู้ใช้ลงชื่อเข้าใช้สำเร็จ คุณจะได้รับข้อมูลเกี่ยวกับผู้ใช้
ในตัวแฮนเดิลเหตุการณ์
สุดท้าย เมื่อมีการเรียกใช้ Destroy
ในออบเจ็กต์นี้ ระบบจะเรียกใช้
OnDestroy
โดยอัตโนมัติ ล้างข้อมูลอ้างอิงของออบเจ็กต์การตรวจสอบสิทธิ์ใน OnDestroy
void InitializeFirebase() {
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.StateChanged += AuthStateChanged;
AuthStateChanged(this, null);
}
void AuthStateChanged(object sender, System.EventArgs eventArgs) {
if (auth.CurrentUser != user) {
bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null
&& auth.CurrentUser.IsValid();
if (!signedIn && user != null) {
DebugLog("Signed out " + user.UserId);
}
user = auth.CurrentUser;
if (signedIn) {
DebugLog("Signed in " + user.UserId);
displayName = user.DisplayName ?? "";
emailAddress = user.Email ?? "";
photoUrl = user.PhotoUrl ?? "";
}
}
}
void OnDestroy() {
auth.StateChanged -= AuthStateChanged;
auth = null;
}
ขั้นตอนถัดไป
ดูวิธีเพิ่มการรองรับผู้ให้บริการข้อมูลประจำตัวอื่นๆ และบัญชีผู้ใช้ชั่วคราวที่ไม่ระบุชื่อ