احراز هویت با Firebase به صورت ناشناس در Android

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

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

  1. اگر هنوز Firebase را به پروژه اندروید خود اضافه نکرده‌اید، آن را اضافه کنید.
  2. در فایل Gradle ماژول (سطح برنامه) خود (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، وابستگی مربوط به کتابخانه Firebase Authentication برای اندروید را اضافه کنید. توصیه می‌کنیم برای کنترل نسخه‌بندی کتابخانه Firebase Android BoM استفاده کنید.
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.9.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 استفاده خواهد کرد.

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

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

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

  1. در متد onCreate مربوط به activity خود، نمونه‌ی مشترک شیء FirebaseAuth را دریافت کنید:

    Kotlin

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

    Java

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

    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 تکمیل کنید، اما این شامل آن نمی‌شود. برای مثال، توکن شناسه‌ی گوگل، توکن دسترسی فیس‌بوک یا آدرس ایمیل و رمز عبور کاربر را دریافت کنید.
  2. برای ارائه دهنده احراز هویت جدید، یک AuthCredential دریافت کنید:

    ورود به سیستم گوگل

    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 اجازه می‌دهید حساب‌های ناشناس قدیمی‌تر از 30 روز را به طور خودکار حذف کند. در پروژه‌هایی که پاکسازی خودکار فعال است، احراز هویت ناشناس در محدودیت‌های استفاده یا سهمیه‌های صورتحساب محاسبه نمی‌شود.

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

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

مراحل بعدی

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