اصالت‌سنجی ناشناس با Firebase در Android

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

قبل از شروع

  1. اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه Android خود اضافه کنید.
  2. در فایل Gradle واحد (سطح برنامه) (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle)، وابستگی کتابخانه Firebase Authentication را برای Android اضافه کنید. توصیه می‌کنیم از Firebase Android BoM برای کنترل نسخه‌بندی کتابخانه استفاده کنید.
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:35.0.0"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }

    بااستفاده از Firebase Android BoM، برنامه شما همیشه از نسخه‌های سازگار کتابخانه‌های Firebase Android استفاده خواهد کرد.

    (جایگزین)  افزودن وابستگی‌های کتابخانه Firebase بدون استفاده از BoM

    اگر انتخاب کنید که از Firebase BoM استفاده نکنید، باید نسخه هر کتابخانه Firebase را در خط وابستگی آن مشخص کنید.

    توجه داشته باشید که اگر از چند کتابخانه Firebase در برنامه‌تان استفاده می‌کنید، قویاً توصیه می‌کنیم از BoM برای مدیریت نسخه‌های کتابخانه استفاده کنید، که تضمین می‌کند همه نسخه‌ها سازگار باشند.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:25.0.0")
    }
  3. اگر هنوز برنامه‌تان را به پروژه Firebase متصل نکرده‌اید، این کار را از کنسول Firebase انجام دهید.
  4. فعال کردن اصالت‌سنجی ناشناس:
    1. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.
    2. در زبانه روش ورود به سیستم، ارائه‌دهنده ورود به سیستم ناشناس را فعال کنید.
    3. اختیاری: اگر پروژه‌تان را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید پاک‌سازی خودکار را فعال کنید. وقتی این تنظیم را فعال می‌کنید، حساب‌های ناشناس قدیمی‌تر از ۳۰ روز به‌طور خودکار حذف خواهند شد. در پروژه‌هایی که پاک‌سازی خودکار در آن‌ها فعال است، اصالت‌سنجی ناشناس دیگر در محدودیت‌های استفاده یا سهمیه‌های صورت‌حساب محاسبه نخواهد شد. پاک‌سازی خودکار را ببینید.

اصالت‌سنجی ناشناس با Firebase

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

  1. در روش onCreate فعالیتتان، نمونه هم‌رسانی‌شده از شیء FirebaseAuth را دریافت کنید:

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. هنگام مقداردهی اولیه «فعالیت»، بررسی کنید که آیا کاربر درحال‌حاضر به سیستم وارد شده است یا نه:

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
  3. درنهایت، برای ورود به سیستم به‌عنوان کاربر ناشناس، با signInAnonymously تماس بگیرید:

    Kotlin

    auth.signInAnonymously()
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInAnonymously:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInAnonymously:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.signInAnonymously()
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    اگر ورود به سیستم موفقیت‌آمیز بود، می‌توانید از روش getCurrentUser برای دریافت داده‌های حساب کاربر استفاده کنید.

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

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

  1. وقتی کاربر ثبت‌نام می‌کند، جریان ورود به سیستم را برای ارائه‌دهنده اصالت‌سنجی کاربر تا قبل‌از فراخوانی یکی از روش‌های FirebaseAuth.signInWith تکمیل کنید. برای مثال، دریافت کردن نشانه شناسایی Google کاربر، نشانه دسترسی Facebook، یا نشانی ایمیل و گذرواژه.
  2. AuthCredential را برای ارائه‌دهنده اصالت‌سنجی جدید دریافت کنید:

    ‫ورود با Google

    Kotlin

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    ورود به سیستم فیس‌بوک

    Kotlin

    val credential = FacebookAuthProvider.getCredential(token.token)

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    ورود به سیستم با ایمیل و گذرواژه

    Kotlin

    val credential = EmailAuthProvider.getCredential(email, password)

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
  3. شیء AuthCredential را به روش linkWithCredential کاربر واردشده منتقل کنید:

    Kotlin

    auth.currentUser!!.linkWithCredential(credential)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "linkWithCredential:success")
                val user = task.result?.user
                updateUI(user)
            } else {
                Log.w(TAG, "linkWithCredential:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

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

پاک‌سازی خودکار

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

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

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

مراحل بعدی

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