ตรวจสอบสิทธิ์ด้วย Firebase แบบไม่ระบุตัวตนบนแพลตฟอร์ม Apple

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

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

  1. ใช้ Swift Package Manager เพื่อติดตั้งและจัดการทรัพยากร Dependency ของ Firebase

    1. เปิดโปรเจ็กต์แอปใน Xcode แล้วไปที่File > Add Packages
    2. เมื่อได้รับข้อความแจ้ง ให้เพิ่มที่เก็บ SDK ของแพลตฟอร์ม Apple ของ Firebase ดังนี้
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. เลือกFirebase Authentication คลัง
    5. เพิ่มแฟล็ก -ObjC ลงในส่วนแฟล็ก Linker อื่นๆ ของการตั้งค่าบิลด์ของเป้าหมาย
    6. เมื่อเสร็จแล้ว Xcode จะเริ่มจับคู่ข้อมูลและดาวน์โหลดทรัพยากร Dependency ในเบื้องหลังโดยอัตโนมัติ
  2. หากยังไม่ได้เชื่อมต่อแอปกับโปรเจ็กต์ Firebase ให้เชื่อมต่อจากFirebase Console
  3. เปิดใช้การตรวจสอบสิทธิ์แบบไม่ระบุชื่อ
    1. เปิดส่วนการตรวจสอบสิทธิ์ในคอนโซล Firebase
    2. ในหน้าวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ไม่ระบุชื่อ วิธีการลงชื่อเข้าใช้
    3. ไม่บังคับ: หากอัปเกรดโปรเจ็กต์เป็น Firebase Authentication with Identity Platform คุณจะเปิดใช้การล้างข้อมูลอัตโนมัติได้ เมื่อ คุณเปิดใช้การตั้งค่านี้ ระบบจะลบบัญชีที่ไม่ระบุตัวตนที่เก่ากว่า 30 วันโดยอัตโนมัติ ในโปรเจ็กต์ที่เปิดใช้การล้างข้อมูลอัตโนมัติ การตรวจสอบสิทธิ์แบบไม่ระบุตัวตนจะไม่นับรวมในขีดจำกัดการใช้งานหรือโควต้าการเรียกเก็บเงินอีกต่อไป ดูการล้างข้อมูลอัตโนมัติ

ตรวจสอบสิทธิ์ด้วย Firebase โดยไม่ระบุตัวตน

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

  1. นำเข้าโมดูล FirebaseCore ใน UIApplicationDelegate รวมถึงโมดูล Firebase อื่นๆ ที่ตัวแทนแอปของคุณใช้ เช่น หากต้องการใช้ Cloud Firestore และ Authentication ให้ทำดังนี้

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. กำหนดค่า FirebaseApp อินสแตนซ์ที่แชร์ใน application(_:didFinishLaunchingWithOptions:) ของตัวแทนแอป

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. หากใช้ SwiftUI คุณต้องสร้างตัวแทนแอปพลิเคชันและแนบไปกับโครงสร้าง App ผ่าน UIApplicationDelegateAdaptor หรือ NSApplicationDelegateAdaptor นอกจากนี้ คุณยังต้องปิดใช้การสลับแทนของตัวแทนแอปด้วย ดูข้อมูลเพิ่มเติมได้ที่วิธีการสำหรับ SwiftUI

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. เรียกใช้เมธอด signInAnonymouslyWithCompletion: ดังนี้

    Swift

    Auth.auth().signInAnonymously { authResult, error in
      // ...
    }

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
  5. หากเมธอด signInAnonymouslyWithCompletion: เสร็จสมบูรณ์ โดยไม่มีข้อผิดพลาด คุณจะรับข้อมูลบัญชีของผู้ใช้ที่ไม่ระบุตัวตนได้จากออบเจ็กต์ FIRAuthDataResult

    Swift

    guard let user = authResult?.user else { return }
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid

    Objective-C

    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;

เปลี่ยนบัญชีที่ไม่ระบุตัวตนเป็นบัญชีถาวร

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

  1. เมื่อผู้ใช้ลงชื่อสมัครใช้ ให้ทำขั้นตอนการลงชื่อเข้าใช้สำหรับผู้ให้บริการตรวจสอบสิทธิ์ของ ผู้ใช้ให้เสร็จสมบูรณ์ โดยไม่ต้องเรียกใช้เมธอด FIRAuth.signInWith ใดเมธอดหนึ่ง เช่น รับโทเค็นรหัส Google ของผู้ใช้ โทเค็นการเข้าถึง Facebook หรืออีเมลและรหัสผ่าน
  2. รับ FIRAuthCredential สำหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่

    Google Sign-In
    Swift
    guard
      let authentication = user?.authentication,
      let idToken = authentication.idToken
    else {
      return
    }
    
    let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                   accessToken: authentication.accessToken)
    Objective-C
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                     accessToken:result.user.accessToken.tokenString];
    การเข้าสู่ระบบ Facebook
    Swift
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    การลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. ส่งออบเจ็กต์ FIRAuthCredential ไปยังเมธอด linkWithCredential:completion: ของผู้ใช้ที่ลงชื่อเข้าใช้

    Swift
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    Objective-C
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];

หากการเรียกใช้ linkWithCredential:completion: สำเร็จ บัญชีใหม่ของผู้ใช้จะเข้าถึงข้อมูล Firebase ของบัญชีที่ไม่ระบุตัวตนได้

การล้างข้อมูลอัตโนมัติ

หากอัปเกรดโปรเจ็กต์เป็น Firebase Authentication with Identity Platform แล้ว คุณจะ เปิดใช้การล้างข้อมูลอัตโนมัติในคอนโซล Firebase ได้ เมื่อเปิดใช้ฟีเจอร์นี้ คุณจะอนุญาตให้ Firebase ลบบัญชีที่ไม่ระบุตัวตนที่มีอายุนานกว่า 30 วันโดยอัตโนมัติ ในโปรเจ็กต์ที่เปิดใช้การล้างข้อมูลอัตโนมัติ การตรวจสอบสิทธิ์แบบไม่ระบุตัวตนจะไม่นับรวมในโควต้าการใช้งานหรือโควต้าการเรียกเก็บเงิน

  • บัญชีที่ไม่ระบุชื่อที่สร้างขึ้นหลังจากเปิดใช้การล้างข้อมูลอัตโนมัติอาจถูกลบโดยอัตโนมัติเมื่อใดก็ได้หลังจาก 30 วันนับจากวันที่สร้าง
  • บัญชีที่ไม่ระบุตัวตนที่มีอยู่จะมีสิทธิ์ถูกลบโดยอัตโนมัติ 30 วันหลังจาก เปิดใช้การล้างข้อมูลอัตโนมัติ
  • หากปิดการล้างข้อมูลอัตโนมัติ บัญชีที่ไม่ระบุตัวตนที่กำหนดเวลาให้ลบจะยังคง กำหนดเวลาให้ลบต่อไป
  • หากคุณ "อัปเกรด" บัญชีที่ไม่ระบุตัวตนโดยลิงก์กับวิธีการลงชื่อเข้าใช้ใดๆ ระบบจะไม่ลบบัญชีนั้นโดยอัตโนมัติ

หากต้องการดูจำนวนผู้ใช้ที่จะได้รับผลกระทบก่อนเปิดใช้ฟีเจอร์นี้ และคุณได้อัปเกรดโปรเจ็กต์เป็น Firebase Authentication with Identity Platform แล้ว คุณสามารถกรองตามis_anonใน Cloud Logging ได้

ขั้นตอนถัดไป

เมื่อผู้ใช้สามารถตรวจสอบสิทธิ์ด้วย Firebase ได้แล้ว คุณจะควบคุมสิทธิ์เข้าถึงข้อมูลในฐานข้อมูล Firebase ได้โดยใช้ กฎ Firebase