Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

ก่อนที่คุณจะเริ่ม

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

    ดูคำแนะนำโดยละเอียดสำหรับขั้นตอนการตั้งค่าเริ่มต้นเหล่านี้ใน เพิ่ม Firebase ในโครงการ Unity ของคุณ

  2. หากคุณยังไม่ได้เชื่อมต่อแอปกับโครงการ Firebase ให้ทำจาก คอนโซล Firebase

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

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

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

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

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

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

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

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

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

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

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

  1. ใน Xcode เปิดใช้งานการแจ้งเตือนแบบพุช สำหรับโครงการของคุณ
  2. อัปโหลดใบรับรอง APN ของคุณไปยัง Firebase หากคุณยังไม่มีใบรับรอง APN โปรดดูการ จัดเตรียมใบรับรอง SSL ของ APN

    1. ภายในโปรเจ็กต์ของคุณในคอนโซล Firebase เลือกไอคอนรูปเฟืองเลือก การตั้งค่าโปรเจ็ก ต์จากนั้นเลือกแท็บ Cloud Messaging

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

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

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

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

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

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

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

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

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

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

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

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

  1. รับรหัสยืนยันจากผู้ใช้
  2. สร้างวัตถุ Credential จากรหัสยืนยันและรหัสยืนยัน
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. ลงชื่อเข้าใช้ผู้ใช้ด้วยวัตถุ Credential :
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      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 และ กฎความปลอดภัยของ Cloud Storage คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้

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

ในการออกจากระบบผู้ใช้โทรเข้า SignOut() :

auth.SignOut();