المصادقة باستخدام 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:34.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متعدّدة في تطبيقك، ننصحك بشدة باستخدام 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.0")
    }
  3. إذا لم يسبق لك ربط تطبيقك بمشروعك على Firebase، يمكنك إجراء ذلك من Firebase وحدة التحكّم.
  4. تفعيل المصادقة بدون تحديد الهوية:
    1. في وحدة تحكّم Firebase، افتح قسم المصادقة.
    2. في صفحة طُرق تسجيل الدخول، فعِّل طريقة تسجيل الدخول بدون اسم.
    3. اختياري: إذا كنت قد رقّيت مشروعك إلى Firebase Authentication with Identity Platform، يمكنك تفعيل ميزة التنظيف التلقائي. عند تفعيل هذا الإعداد، سيتم تلقائيًا حذف الحسابات المجهولة التي مرّ عليها أكثر من 30 يومًا. في المشاريع التي تم تفعيل ميزة التنظيف التلقائي فيها، لن يتم احتساب المصادقة المجهولة الهوية ضمن حدود الاستخدام أو حصص الفوترة. اطّلِع على التنظيف التلقائي.

المصادقة باستخدام 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);
    تسجيل الدخول عبر Facebook

    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 يومًا على إنشائها.
  • ستكون الحسابات المجهولة الحالية مؤهَّلة للحذف التلقائي بعد 30 يومًا من تفعيل ميزة التنظيف التلقائي.
  • في حال إيقاف ميزة "التنظيف التلقائي"، ستبقى أي حسابات مجهولة الهوية مجدولة للحذف.
  • إذا "رقّيت" حسابًا مجهول الهوية من خلال ربطه بأي طريقة لتسجيل الدخول، لن يتم حذف الحساب تلقائيًا.

إذا أردت معرفة عدد المستخدمين المتأثرين قبل تفعيل هذه الميزة، وكنت قد رقّيت مشروعك إلى Firebase Authentication with Identity Platform، يمكنك الفلترة حسب is_anon في تسجيل الدخول إلى السحابة الإلكترونية.

الخطوات التالية

بعد أن أصبح بإمكان المستخدمين إثبات ملكية حساباتهم باستخدام Firebase، يمكنك التحكّم في إمكانية وصولهم إلى البيانات في قاعدة بيانات Firebase باستخدام قواعد Firebase.