اصالت‌سنجی ناشناس با Firebase در پلاتفرم‌های Apple

می‌توانید از Firebase Authentication برای ایجاد و استفاده از حساب‌های ناشناس موقت برای اصالت‌سنجی با Firebase استفاده کنید. از این حساب‌های ناشناس موقت می‌توان برای اجازه دادن به کاربرانی که هنوز در برنامه شما ثبت‌نام نکرده‌اند برای کار با داده‌های محافظت‌شده توسط قوانین امنیتی استفاده کرد. اگر کاربر ناشناسی تصمیم بگیرد در برنامه‌تان ثبت‌نام کند، می‌توانید اعتبارنامه ورود به سیستم او را به حساب ناشناس پیوند دهید تا بتواند در جلسه‌های آینده به کار با داده‌های محافظت‌شده‌اش ادامه دهد.

قبل از شروع

  1. از Swift Package Manager برای نصب و مدیریت وابستگی‌های Firebase استفاده کنید.

    1. در Xcode، درحالی‌که پروژه برنامه‌تان باز است، به File > Add Packages (فایل > افزودن بسته‌ها) بروید.
    2. وقتی خواسته شد، مخزن کیت توسعه نرم‌افزار Firebase برای پلاتفرم‌های Apple را اضافه کنید:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. کتابخانه Firebase Authentication را انتخاب کنید.
    5. پرچم -ObjC را به بخش Other Linker Flags (سایر پرچم‌های پیونددهنده) در تنظیمات ساخت هدف اضافه کنید.
    6. وقتی تمام شد، Xcode به‌طور خودکار شروع به حل و بارگیری وابستگی‌های شما در پس‌زمینه می‌کند.
  2. اگر هنوز برنامه‌تان را به پروژه Firebase متصل نکرده‌اید، این کار را از کنسول Firebase انجام دهید.
  3. فعال کردن اصالت‌سنجی ناشناس:
    1. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.
    2. در برگه روش ورود به سیستم، ارائه‌دهنده ورود به سیستم ناشناس را فعال کنید.
    3. اختیاری: اگر پروژه‌تان را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید پاک‌سازی خودکار را فعال کنید. وقتی این تنظیم را فعال کنید، حساب‌های ناشناس قدیمی‌تر از ۳۰ روز به‌طور خودکار حذف خواهند شد. در پروژه‌هایی که پاک‌سازی خودکار در آن‌ها فعال است، اصالت‌سنجی ناشناس دیگر در محدودیت‌های استفاده یا سهمیه‌های صورت‌حساب لحاظ نخواهد شد. پاک‌سازی خودکار را ببینید.

اصالت‌سنجی با 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 استفاده می‌کنید، باید یک نماینده برنامه ایجاد کنید و آن را ازطریق UIApplicationDelegateAdaptor یا NSApplicationDelegateAdaptor به ساختار App خود متصل کنید. همچنین باید swizzling نماینده برنامه را غیرفعال کنید. برای اطلاعات بیشتر، دستورالعمل‌های 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
    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 اجازه می‌دهید حساب‌های ناشناس قدیمی‌تر از ۳۰ روز را به‌طور خودکار حذف کند. در پروژه‌هایی که پاک‌سازی خودکار در آن‌ها فعال است، اصالت‌سنجی ناشناس در محدودیت‌های استفاده یا سهمیه‌های صورت‌حساب لحاظ نخواهد شد.

  • هر حساب ناشناسی که پس‌از فعال کردن پاک‌سازی خودکار ایجاد شود ممکن است در هر زمانی پس‌از گذشت ۳۰ روز از ایجاد آن به‌طور خودکار حذف شود.
  • حساب‌های ناشناس موجود ۳۰ روز پس‌از فعال کردن پاک‌سازی خودکار، واجدشرایط حذف خودکار خواهند بود.
  • اگر پاک‌سازی خودکار را خاموش کنید، هر حساب ناشناسی که برای حذف شدن زمان‌بندی شده باشد همچنان برای حذف شدن زمان‌بندی‌شده باقی خواهد ماند.
  • اگر حساب ناشناسی را با پیوند دادن آن به هر روش ورود به سیستمی «ارتقا» دهید، حساب به‌طور خودکار حذف نخواهد شد.

اگر می‌خواهید قبل‌از فعال کردن این ویژگی ببینید چند کاربر تحت‌تأثیر قرار خواهند گرفت و پروژه‌تان را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید براساس is_anon در Cloud Logging فیلتر کنید.

مراحل بعدی

اکنون که کاربران می‌توانند با Firebase اصالت‌سنجی کنند، می‌توانید دسترسی آن‌ها را به داده‌های پایگاه داده Firebase بااستفاده از قوانین Firebase کنترل کنید.