คุณใช้ Firebase Authentication เพื่อลงชื่อเข้าใช้ให้ผู้ใช้ได้โดยการส่งข้อความ SMS ไปยังโทรศัพท์ของผู้ใช้ ผู้ใช้ลงชื่อเข้าใช้โดยใช้รหัสแบบใช้ครั้งเดียวที่อยู่ในข้อความ SMS
เอกสารนี้อธิบายวิธีใช้ขั้นตอนการลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์โดยใช้ Firebase SDK
ก่อนเริ่มต้น
-
ก่อนที่จะใช้ Firebase Authentication คุณต้องเพิ่ม Firebase Unity SDK (โดยเฉพาะ
FirebaseAuth.unitypackage) ลงในโปรเจ็กต์ Unityดูวิธีการโดยละเอียดสำหรับขั้นตอนการตั้งค่าเริ่มต้นเหล่านี้ได้ใน เพิ่ม Firebase ลงในโปรเจ็กต์ Unity
- หากยังไม่ได้เชื่อมต่อแอปกับโปรเจ็กต์ Firebase ให้เชื่อมต่อจากFirebase Console
- ทำความเข้าใจข้อกำหนดของแพลตฟอร์มสำหรับการลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์
- การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ใช้ได้กับแพลตฟอร์มอุปกรณ์เคลื่อนที่เท่านั้น
- ใน iOS การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ต้องใช้อุปกรณ์จริงและจะไม่ทำงานในโปรแกรมจำลอง
ข้อกังวลด้านความปลอดภัย
การตรวจสอบสิทธิ์โดยใช้หมายเลขโทรศัพท์เพียงอย่างเดียวอาจสะดวก แต่มีความปลอดภัยน้อยกว่าวิธีการอื่นๆ ที่มี เนื่องจากผู้ใช้สามารถโอนความเป็นเจ้าของหมายเลขโทรศัพท์ให้กันได้ง่าย นอกจากนี้ ในอุปกรณ์ที่มีโปรไฟล์ผู้ใช้หลายโปรไฟล์ ผู้ใช้ที่รับข้อความ SMS ได้จะลงชื่อเข้าใช้บัญชีโดยใช้หมายเลขโทรศัพท์ของอุปกรณ์ได้
หากใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ในแอป คุณควรเสนอการลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ควบคู่ไปกับวิธีการลงชื่อเข้าใช้ที่ปลอดภัยยิ่งขึ้น และแจ้งให้ผู้ใช้ทราบถึงข้อแลกเปลี่ยนด้านความปลอดภัยของการใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์
เปิดใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์สำหรับโปรเจ็กต์ Firebase
หากต้องการให้ผู้ใช้ลงชื่อเข้าใช้ด้วย SMS คุณต้องเปิดใช้เมธอดลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ สำหรับโปรเจ็กต์ Firebase ก่อน โดยทำดังนี้
- ในคอนโซล Firebase ให้เปิดส่วนการตรวจสอบสิทธิ์
- ในหน้าวิธีการลงชื่อเข้าใช้ ให้เปิดใช้หมายเลขโทรศัพท์ เป็นวิธีการลงชื่อเข้าใช้
- ในหน้าการตั้งค่า ให้ตั้งค่านโยบายในภูมิภาคที่ต้องการ อนุญาตหรือปฏิเสธการส่งข้อความ SMS สำหรับโปรเจ็กต์ใหม่ นโยบายเริ่มต้นจะไม่อนุญาตภูมิภาคใดเลย
เริ่มรับการแจ้งเตือน APNs (iOS เท่านั้น)
หากต้องการใช้การตรวจสอบสิทธิ์ด้วยหมายเลขโทรศัพท์ใน iOS แอปของคุณต้องรับการแจ้งเตือน APNs จาก Firebase ได้ เมื่อคุณให้ผู้ใช้ลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์เป็นครั้งแรกในอุปกรณ์ Firebase Authentication จะส่งการแจ้งเตือนแบบพุชเงียบ ไปยังอุปกรณ์เพื่อยืนยันว่าคำขอลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์มาจากแอปของคุณ (ด้วยเหตุนี้ จึงไม่สามารถใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ในโปรแกรมจำลองได้)
วิธีเปิดใช้การแจ้งเตือน APNs เพื่อใช้กับ Firebase Authentication
- ใน Xcode ให้ เปิดใช้ข้อความ Push สำหรับโปรเจ็กต์
อัปโหลดใบรับรอง APNs ไปยัง Firebase หากยังไม่มีใบรับรอง APNs โปรดสร้างใบรับรองใน Apple Developer Member Center
-
ภายในโปรเจ็กต์ในFirebaseคอนโซล ให้เลือกไอคอน รูปเฟือง เลือก การตั้งค่าโปรเจ็กต์ แล้วเลือกแท็บ Cloud Messaging
-
เลือกปุ่มอัปโหลดใบรับรอง สำหรับใบรับรองการพัฒนา ใบรับรอง การใช้งานจริง หรือทั้ง 2 อย่าง ต้องระบุอย่างน้อย 1 รายการ
-
เลือกไฟล์ .p12 สำหรับใบรับรองแต่ละรายการ แล้วระบุรหัสผ่าน (หากมี) ตรวจสอบว่า Bundle ID สำหรับใบรับรองนี้ ตรงกับ Bundle ID ของแอป แล้วเลือกบันทึก
-
ส่งรหัสยืนยันไปยังโทรศัพท์ของผู้ใช้
หากต้องการเริ่มการลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ ให้แสดงอินเทอร์เฟซที่แจ้งให้ผู้ใช้ระบุหมายเลขโทรศัพท์ แล้วเรียกใช้ PhoneAuthProvider.VerifyPhoneNumber เพื่อขอให้ Firebase ส่งรหัสการตรวจสอบสิทธิ์ไปยังโทรศัพท์ของผู้ใช้ทาง SMS
-
รับหมายเลขโทรศัพท์ของผู้ใช้
ข้อกำหนดทางกฎหมายแตกต่างกันไป แต่แนวทางปฏิบัติแนะนำ และเพื่อกำหนดความคาดหวังสำหรับผู้ใช้ คุณควรแจ้งให้ผู้ใช้ทราบว่าหากใช้ การลงชื่อเข้าใช้ด้วยโทรศัพท์ ผู้ใช้อาจได้รับข้อความ SMS สำหรับการยืนยันและอาจมีค่าบริการตามมาตรฐาน
- เรียกใช้
PhoneAuthProvider.VerifyPhoneNumberโดยส่ง PhoneAuthOptions ที่มีหมายเลขโทรศัพท์ของผู้ใช้ เมื่อคุณเรียกใช้PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth); provider.VerifyPhoneNumber( new Firebase.Auth.PhoneAuthOptions { PhoneNumber = phoneNumber, TimeoutInMilliseconds = phoneAuthTimeoutMs, ForceResendingToken = null }, verificationCompleted: (credential) => { // Auto-sms-retrieval or instant validation has succeeded (Android only). // There is no need to input the verification code. // `credential` can be used instead of calling GetCredential(). }, verificationFailed: (error) => { // The verification code was not sent. // `error` contains a human readable explanation of the problem. }, codeSent: (id, token) => { // Verification code was successfully sent via SMS. // `id` contains the verification id that will need to passed in with // the code from the user when calling GetCredential(). // `token` can be used if the user requests the code be sent again, to // tie the two requests together. }, codeAutoRetrievalTimeout: (id) => { // Called when the auto-sms-retrieval has timed out, based on the given // timeout parameter. // `id` contains the verification id of the request that timed out. });
PhoneAuthProvider.VerifyPhoneNumber, Firebase,- (ใน iOS) จะส่งข้อความ Push แบบเงียบไปยังแอปของคุณ
- Firebase จะส่งข้อความ SMS ที่มีรหัสการตรวจสอบสิทธิ์ไปยังหมายเลขโทรศัพท์ที่ระบุ และส่งรหัสยืนยันไปยังฟังก์ชันการดำเนินการให้เสร็จสมบูรณ์ คุณจะต้องใช้ทั้งรหัสยืนยัน และรหัสยืนยันเพื่อลงชื่อเข้าใช้ผู้ใช้
-
บันทึกรหัสการยืนยันและกู้คืนเมื่อแอปโหลด การดำเนินการนี้จะช่วยให้คุณมั่นใจได้ว่าคุณจะยังมีรหัสยืนยันที่ถูกต้องหากแอปถูกสิ้นสุดก่อนที่ผู้ใช้จะลงชื่อเข้าใช้จนเสร็จสมบูรณ์ (เช่น ขณะเปลี่ยนไปใช้แอป SMS)
คุณจะเก็บรหัสการยืนยันด้วยวิธีใดก็ได้ วิธีง่ายๆ คือ บันทึกรหัสยืนยันด้วย
UnityEngine.PlayerPrefs
หากมีการเรียกใช้แฮนเดิลการเรียกกลับที่ส่งไปยัง codeSent คุณจะ
แจ้งให้ผู้ใช้พิมพ์รหัสยืนยันเมื่อได้รับรหัสในข้อความ SMS
ได้
ในทางกลับกัน หากมีการเรียกใช้การเรียกกลับสำหรับ verificationCompleted แสดงว่าการยืนยันอัตโนมัติสำเร็จแล้ว และตอนนี้คุณจะมี PhoneAuthCredential ซึ่งคุณสามารถใช้ได้ตามที่อธิบายไว้ด้านล่าง
ลงชื่อเข้าใช้ผู้ใช้ด้วยรหัสยืนยัน
หลังจากที่ผู้ใช้ให้รหัสยืนยันจากข้อความ SMS แก่แอปของคุณแล้ว ให้ลงชื่อเข้าใช้ผู้ใช้โดยสร้างออบเจ็กต์ PhoneAuthCredential
จากรหัสยืนยันและรหัสยืนยัน แล้วส่งออบเจ็กต์นั้น
ไปยัง FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
- รับรหัสยืนยันจากผู้ใช้
- สร้างออบเจ็กต์
Credentialจากรหัสยืนยัน และรหัสยืนยันPhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
- ลงชื่อเข้าใช้ผู้ใช้ด้วยออบเจ็กต์
PhoneAuthCredentialดังนี้auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } FirebaseUser newUser = task.Result.User; Debug.Log("User signed in successfully"); // This should display the phone number. Debug.Log("Phone number: " + newUser.PhoneNumber); // The phone number providerID is 'phone'. Debug.Log("Phone provider ID: " + newUser.ProviderId); });
ขั้นตอนถัดไป
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และ ลิงก์กับข้อมูลเข้าสู่ระบบที่ผู้ใช้ลงชื่อเข้าใช้ ซึ่งได้แก่ ชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ ระบบจะจัดเก็บบัญชีใหม่นี้เป็นส่วนหนึ่งของโปรเจ็กต์ 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();