ตรวจสอบสิทธิ์ด้วย Firebase โดยใช้หมายเลขโทรศัพท์ด้วย Unity

คุณสามารถใช้ Firebase Authentication เพื่อลงชื่อเข้าใช้ให้ผู้ใช้ได้โดยส่งข้อความ SMS ลงในโทรศัพท์ของผู้ใช้ ผู้ใช้ลงชื่อเข้าใช้ด้วยรหัสแบบใช้ครั้งเดียวที่มีอยู่ใน ข้อความ SMS

เอกสารนี้อธิบายวิธีใช้ขั้นตอนการลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์โดยใช้ Firebase SDK

ก่อนเริ่มต้น

  1. ก่อนที่จะใช้งานได้ Firebase Authentication คุณต้องเพิ่ม Firebase Unity SDK (กล่าวอย่างเจาะจงคือ FirebaseAuth.unitypackage) ไปยังโปรเจ็กต์ Unity

    ดูวิธีการโดยละเอียดสำหรับขั้นตอนการตั้งค่าเริ่มต้นเหล่านี้ได้ใน เพิ่ม Firebase ไปยัง Unity โปรเจ็กต์

  2. หากยังไม่ได้เชื่อมต่อแอปกับโปรเจ็กต์ Firebase ให้ดำเนินการจาก คอนโซล Firebase
  3. ทำความเข้าใจข้อกำหนดของแพลตฟอร์มสำหรับการลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์
    • การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์มีไว้สำหรับแพลตฟอร์มอุปกรณ์เคลื่อนที่เท่านั้น
    • ใน iOS การลงชื่อเข้าใช้หมายเลขโทรศัพท์ต้องใช้อุปกรณ์จริงและไม่สามารถใช้กับเครื่องจำลองได้

ข้อกังวลด้านความปลอดภัย

การตรวจสอบสิทธิ์โดยใช้เพียงหมายเลขโทรศัพท์มีความปลอดภัยน้อยกว่า วิธีการอื่นๆ ที่มีอยู่ เพราะการมีหมายเลขโทรศัพท์ สามารถถ่ายโอนระหว่างผู้ใช้ได้อย่างง่ายดาย นอกจากนี้ ในอุปกรณ์ที่มีผู้ใช้หลายคน ผู้ใช้ที่สามารถรับข้อความ SMS จะสามารถลงชื่อเข้าใช้บัญชีโดยใช้ หมายเลขโทรศัพท์ของอุปกรณ์

หากใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ในแอป คุณควรเสนอ ควบคู่กับวิธีการลงชื่อเข้าใช้ที่ปลอดภัยยิ่งขึ้น และแจ้งให้ผู้ใช้ทราบเกี่ยวกับความปลอดภัย ข้อดีข้อเสียของการใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์

เปิดใช้การลงชื่อเข้าใช้หมายเลขโทรศัพท์สำหรับโปรเจ็กต์ Firebase

หากต้องการลงชื่อเข้าใช้ให้ผู้ใช้ทาง SMS คุณต้องเปิดใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ก่อน สำหรับโปรเจ็กต์ Firebase ของคุณ

  1. เปิดส่วนการตรวจสอบสิทธิ์ในคอนโซล Firebase
  2. ในหน้าวิธีการลงชื่อเข้าใช้ ให้เปิดใช้หมายเลขโทรศัพท์ วิธีลงชื่อเข้าใช้

เริ่มรับการแจ้งเตือน APN (iOS เท่านั้น)

หากต้องการใช้การตรวจสอบสิทธิ์หมายเลขโทรศัพท์ใน iOS แอปของคุณจะต้องรับ การแจ้งเตือน APN จาก Firebase เมื่อคุณลงชื่อเข้าใช้ให้ผู้ใช้ด้วยโทรศัพท์ หมายเลขเป็นครั้งแรกในอุปกรณ์ Firebase Authentication จะส่งพุชแบบปิดเสียง การแจ้งเตือนไปยังอุปกรณ์เพื่อยืนยันว่าคำขอลงชื่อเข้าใช้หมายเลขโทรศัพท์มา จากแอปของคุณ (ด้วยเหตุนี้ จึงไม่สามารถใช้การลงชื่อเข้าใช้ด้วยหมายเลขโทรศัพท์ใน เครื่องมือจำลอง)

หากต้องการเปิดใช้การแจ้งเตือน APN เพื่อใช้กับ Firebase Authentication ให้ทำดังนี้

  1. ใน Xcode เปิดใช้ข้อความ Push สําหรับโปรเจ็กต์
  2. อัปโหลดใบรับรอง APNs ไปยัง Firebase หากคุณยังไม่มีใบรับรอง APNs โปรดสร้างขึ้นใน Apple Developer Member Center

    1. ภายในโปรเจ็กต์ในคอนโซล Firebase ให้เลือก ไอคอนรูปเฟือง, เลือก การตั้งค่าโปรเจ็กต์ แล้วเลือก แท็บการรับส่งข้อความในระบบคลาวด์

    2. เลือกอัปโหลดใบรับรอง สำหรับใบรับรองการพัฒนา ใบรับรองการผลิต หรือทั้งสองอย่าง อย่างน้อย 1 รายการคือ ต้องระบุ

    3. สำหรับใบรับรองแต่ละรายการ ให้เลือกไฟล์ .p12 แล้วใส่ รหัสผ่าน (หากมี) ตรวจสอบว่ารหัสชุดสำหรับใบรับรองนี้ ตรงกับรหัสชุดของแอป เลือก บันทึก

ส่งรหัสยืนยันไปยังโทรศัพท์ของผู้ใช้

หากต้องการเริ่มลงชื่อเข้าใช้หมายเลขโทรศัพท์ ให้แสดงอินเทอร์เฟซที่แจ้งแก่ผู้ใช้ ให้พวกเขาระบุหมายเลขโทรศัพท์ แล้วโทร PhoneAuthProvider.VerifyPhoneNumber เพื่อขอให้ Firebase ส่งรหัสการตรวจสอบสิทธิ์ไปยังโทรศัพท์ของผู้ใช้ทาง SMS

  1. ดูหมายเลขโทรศัพท์ของผู้ใช้

    ข้อกำหนดทางกฎหมายอาจแตกต่างกันไป แต่แนวทางปฏิบัติแนะนำคือ และเพื่อกำหนดความคาดหวังให้กับผู้ใช้ คุณควรแจ้งให้ผู้ใช้ทราบว่าถ้าพวกเขาใช้ ลงชื่อเข้าใช้ทางโทรศัพท์ ผู้ใช้อาจได้รับข้อความ SMS สำหรับการยืนยันและ มีค่าบริการ

  2. โทรหา 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 ที่มีการตรวจสอบสิทธิ์ ไปยังหมายเลขโทรศัพท์ที่ระบุ และส่งรหัสการยืนยันไปยัง ฟังก์ชันการเสร็จสมบูรณ์ คุณจะต้องใช้ทั้งรหัสยืนยัน และรหัสยืนยัน เพื่อลงชื่อเข้าใช้ให้ผู้ใช้
  3. บันทึกรหัสการยืนยันและคืนค่ารหัสเมื่อแอปของคุณโหลด เมื่อทำเช่นนั้น คุณจึงมั่นใจได้ว่ายังมีรหัสยืนยันที่ถูกต้องอยู่หากแอป ถูกสิ้นสุดการใช้งานก่อนที่ผู้ใช้จะดำเนินการตามขั้นตอนการลงชื่อเข้าใช้จนเสร็จสมบูรณ์ (เช่น เปลี่ยนไปใช้แอป SMS)

    คุณจะยืนยันรหัสการยืนยันได้ตามต้องการ วิธีง่ายๆ คือ บันทึกรหัสยืนยันด้วยหมายเลข UnityEngine.PlayerPrefs

หากมีการเรียกใช้ Callback ที่ส่งผ่านไปยัง codeSent คุณสามารถ แจ้งให้ผู้ใช้พิมพ์รหัสยืนยันเมื่อได้รับใน SMS

ในทางกลับกัน ถ้าการติดต่อกลับสำหรับ verificationCompleted คือ การยืนยันอัตโนมัติ ได้สำเร็จแล้วและตอนนี้คุณจะมี PhoneAuthCredential ที่คุณสามารถใช้ได้ตามที่อธิบายไว้ด้านล่าง

ลงชื่อเข้าใช้ผู้ใช้ด้วยรหัสยืนยัน

หลังจากที่ผู้ใช้ให้รหัสยืนยันจาก SMS แก่แอปของคุณ ข้อความ โปรดลงชื่อเข้าใช้ให้ผู้ใช้ด้วยการสร้าง PhoneAuthCredential จากรหัสยืนยันและรหัสการยืนยัน และส่งผ่านออบเจ็กต์นั้น ไปยัง FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync

  1. รับรหัสยืนยันจากผู้ใช้
  2. สร้างออบเจ็กต์ Credential จากการยืนยัน รหัสและรหัสยืนยัน
    PhoneAuthCredential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. ลงชื่อเข้าใช้ผู้ใช้ด้วยออบเจ็กต์ PhoneAuthCredential:
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task =&gt {
      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();