المصادقة باستخدام 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.12.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:24.0.1")
    }
  3. إذا لم يسبق لك ربط تطبيقك بمشروعك على Firebase، يمكنك إجراء ذلك من خلال وحدة تحكّم Firebase Firebase.
  4. فعِّل ميزة المصادقة مجهولة الهوية:
    1. في وحدة تحكّم FirebaseFirebase، افتح قسم المصادقة.
    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 في Cloud Logging.

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

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