المصادقة باستخدام Firebase بشكل مجهول على Android

يمكنك استخدام مصادقة Firebase لإنشاء حسابات مجهولة مؤقتة واستخدامها للمصادقة مع Firebase. يمكن استخدام هذه الحسابات المجهولة المؤقتة للسماح للمستخدمين الذين لم يسجلوا بعد في تطبيقك بالعمل مع البيانات المحمية بقواعد الأمان. إذا قرر مستخدم مجهول الاشتراك في تطبيقك، فيمكنك ربط بيانات اعتماد تسجيل الدخول الخاصة به بالحساب المجهول حتى يتمكن من مواصلة العمل مع بياناته المحمية في الجلسات المستقبلية.

قبل ان تبدأ

  1. إذا لم تكن قد قمت بذلك بالفعل، فأضف Firebase إلى مشروع Android الخاص بك .
  2. في ملف Gradle الخاص بالوحدة النمطية (على مستوى التطبيق) (عادةً <project>/<app-module>/build.gradle.kts أو <project>/<app-module>/build.gradle )، أضف التبعية لمصادقة Firebase مكتبة لالروبوت. نوصي باستخدام Firebase Android BoM للتحكم في إصدار المكتبة.
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.8.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:22.3.1")
    }
    
    هل تبحث عن وحدة مكتبة خاصة بـ Kotlin؟ بدءًا من أكتوبر 2023 (Firebase BoM 32.5.0) ، يمكن لمطوري Kotlin وJava الاعتماد على وحدة المكتبة الرئيسية (لمزيد من التفاصيل، راجع الأسئلة الشائعة حول هذه المبادرة ).
  3. إذا لم تكن قد قمت بعد بربط تطبيقك بمشروع Firebase الخاص بك، فقم بذلك من وحدة تحكم Firebase .
  4. تمكين المصادقة المجهولة:
    1. في وحدة تحكم Firebase ، افتح قسم المصادقة .
    2. في صفحة أساليب تسجيل الدخول ، قم بتمكين طريقة تسجيل الدخول المجهولة .
    3. اختياري : إذا قمت بترقية مشروعك إلى مصادقة Firebase باستخدام Identity Platform ، فيمكنك تمكين التنظيف التلقائي. عند تمكين هذا الإعداد، سيتم حذف الحسابات المجهولة الأقدم من 30 يومًا تلقائيًا. في المشاريع التي تم تمكين التنظيف التلقائي فيها، لن يتم احتساب المصادقة المجهولة ضمن حدود الاستخدام أو حصص الفواتير. راجع التنظيف التلقائي .

المصادقة مع Firebase بشكل مجهول

عندما يستخدم مستخدم قام بتسجيل الخروج إحدى ميزات التطبيق التي تتطلب المصادقة مع Firebase، قم بتسجيل دخول المستخدم بشكل مجهول عن طريق إكمال الخطوات التالية:

  1. في طريقة onCreate الخاصة بنشاطك، احصل على المثيل المشترك لكائن FirebaseAuth :

    Kotlin+KTX

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

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. عند تهيئة نشاطك، تحقق لمعرفة ما إذا كان المستخدم قد قام بتسجيل الدخول حاليًا:

    Kotlin+KTX

    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+KTX

    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 لموفر المصادقة الجديد:

    تسجيل الدخول إلى جوجل

    Kotlin+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    تسجيل الدخول الى الفيسبوك

    Kotlin+KTX

    val credential = FacebookAuthProvider.getCredential(token.token)

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    تسجيل الدخول بكلمة المرور - البريد الإلكتروني

    Kotlin+KTX

    val credential = EmailAuthProvider.getCredential(email, password)

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
  3. قم بتمرير كائن AuthCredential إلى الأسلوب linkWithCredential الخاص بمستخدم تسجيل الدخول:

    Kotlin+KTX

    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 باستخدام Identity Platform ، فيمكنك تمكين التنظيف التلقائي في وحدة تحكم Firebase. عند تمكين هذه الميزة، فإنك تسمح لـ Firebase بحذف الحسابات المجهولة التي مر عليها أكثر من 30 يومًا تلقائيًا. في المشاريع التي تم تمكين التنظيف التلقائي فيها، لن يتم احتساب المصادقة المجهولة ضمن حدود الاستخدام أو حصص الفواتير.

  • قد يتم حذف أي حسابات مجهولة تم إنشاؤها بعد تمكين التنظيف التلقائي تلقائيًا في أي وقت بعد 30 يومًا من الإنشاء.
  • ستكون الحسابات المجهولة الحالية مؤهلة للحذف التلقائي بعد 30 يومًا من تمكين التنظيف التلقائي.
  • إذا قمت بإيقاف تشغيل التنظيف التلقائي، فستظل أي حسابات مجهولة مجدولة للحذف مجدولة للحذف.
  • إذا قمت "بترقية" حساب مجهول عن طريق ربطه بأي طريقة تسجيل دخول، فلن يتم حذف الحساب تلقائيًا.

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

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

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