ตรวจสอบสิทธิ์กับ Firebase โดยไม่เปิดเผยตัวตนบนแพลตฟอร์ม Apple

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

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

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

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

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

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

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

    SwiftUI

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

    สวิฟท์

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    วัตถุประสงค์-C

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

    SwiftUI

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

    สวิฟท์

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

    วัตถุประสงค์-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: วิธีการ:

    สวิฟท์

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

    วัตถุประสงค์-C

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

    สวิฟท์

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

    วัตถุประสงค์-C

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

แปลงบัญชีที่ไม่ระบุชื่อเป็นบัญชีถาวร

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

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

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

    สวิฟท์
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    
    วัตถุประสงค์-C
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];
    

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

ทำความสะอาดอัตโนมัติ

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

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

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

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

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