احراز هویت با Firebase به صورت ناشناس در پلتفرم های اپل

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

قبل از اینکه شروع کنی

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

    1. در Xcode، با باز کردن پروژه برنامه خود، به File > Add Packages بروید.
    2. وقتی از شما خواسته شد، مخزن SDK پلتفرم‌های اپل فایربیس را اضافه کنید:
    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 ، بخش Auth را باز کنید.
    2. در صفحه روش‌های ورود ، روش ورود ناشناس را فعال کنید.
    3. اختیاری : اگر پروژه خود را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید پاکسازی خودکار را فعال کنید. وقتی این تنظیم را فعال می‌کنید، حساب‌های ناشناس قدیمی‌تر از 30 روز به طور خودکار حذف می‌شوند. در پروژه‌هایی که پاکسازی خودکار فعال است، احراز هویت ناشناس دیگر در محدودیت‌های استفاده یا سهمیه‌های صورتحساب محاسبه نمی‌شود. به پاکسازی خودکار مراجعه کنید.

احراز هویت با فایربیس به صورت ناشناس

وقتی کاربری که از سیستم خارج شده و از آن خارج شده است از یک ویژگی برنامه که نیاز به احراز هویت با Firebase دارد استفاده می‌کند، با انجام مراحل زیر، کاربر را به صورت ناشناس وارد سیستم کنید:

  1. ماژول FirebaseCore را در UIApplicationDelegate خود وارد کنید، و همچنین هر ماژول Firebase دیگری که app delegate شما از آن استفاده می‌کند. به عنوان مثال، برای استفاده از Cloud Firestore و Authentication :

    سویفت‌یو‌آی

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

    سویفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    هدف-سی

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. یک نمونه اشتراکی FirebaseApp در application(_:didFinishLaunchingWithOptions:) از نماینده برنامه خود پیکربندی کنید:

    سویفت‌یو‌آی

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

    سویفت

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

    هدف-سی

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. اگر از SwiftUI استفاده می‌کنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق UIApplicationDelegateAdaptor یا NSApplicationDelegateAdaptor به ساختار App خود پیوست کنید. همچنین باید swizzling نماینده برنامه را غیرفعال کنید. برای اطلاعات بیشتر، به دستورالعمل‌های 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
      // ...
    }

    هدف-سی

    [[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

    هدف-سی

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

تبدیل حساب کاربری ناشناس به حساب کاربری دائمی

وقتی یک کاربر ناشناس در برنامه شما ثبت نام می‌کند، ممکن است بخواهید به او اجازه دهید تا با حساب جدیدش به کار خود ادامه دهد - برای مثال، ممکن است بخواهید مواردی را که کاربر قبل از ثبت نام به سبد خرید خود اضافه کرده است، در سبد خرید حساب جدیدش نیز موجود کنید. برای انجام این کار، مراحل زیر را انجام دهید:

  1. وقتی کاربر ثبت‌نام می‌کند، جریان ورود به سیستم را برای ارائه‌دهنده‌ی احراز هویت کاربر تا فراخوانی یکی از متدهای FIRAuth.signInWith تکمیل کنید، اما این شامل آن نمی‌شود. برای مثال، توکن شناسه‌ی گوگل، توکن دسترسی فیس‌بوک یا آدرس ایمیل و رمز عبور کاربر را دریافت کنید.
  2. یک FIRAuthCredential برای ارائه‌دهنده‌ی احراز هویت جدید دریافت کنید:

    ورود به سیستم گوگل
    سویفت
    guard
      let authentication = user?.authentication,
      let idToken = authentication.idToken
    else {
      return
    }
    
    let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                   accessToken: authentication.accessToken)
    هدف-سی
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                     accessToken:result.user.accessToken.tokenString];
    ورود به فیسبوک
    سویفت
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    هدف-سی
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    ورود با ایمیل و رمز عبور
    سویفت
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    هدف-سی
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. شیء FIRAuthCredential را به متد linkWithCredential:completion: کاربر در حال ورود به سیستم ارسال کنید:

    سویفت
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    هدف-سی
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];

اگر فراخوانی linkWithCredential:completion: با موفقیت انجام شود، حساب کاربری جدید کاربر می‌تواند به داده‌های Firebase حساب کاربری ناشناس دسترسی پیدا کند.

تمیز کردن خودکار

اگر پروژه خود را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید پاکسازی خودکار را در کنسول Firebase فعال کنید. وقتی این ویژگی را فعال می‌کنید، به Firebase اجازه می‌دهید حساب‌های ناشناس قدیمی‌تر از 30 روز را به طور خودکار حذف کند. در پروژه‌هایی که پاکسازی خودکار فعال است، احراز هویت ناشناس در محدودیت‌های استفاده یا سهمیه‌های صورتحساب محاسبه نمی‌شود.

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

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

مراحل بعدی

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