Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

قم بالمصادقة باستخدام Firebase على Android باستخدام رقم هاتف

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

أسهل طريقة لإضافة رقم هاتف تسجيل الدخول إلى التطبيق الخاص بك لاستخدام FirebaseUI ، والذي يتضمن انخفاض في تسجيل الدخول القطعة التي تنفذ توقع في تدفقات لرقم هاتف تسجيل الدخول، وكذلك القائم على كلمة وعلامة الاتحادية -في. يصف هذا المستند كيفية تنفيذ تدفق تسجيل الدخول إلى رقم الهاتف باستخدام Firebase SDK.

قبل ان تبدأ

  1. إذا كنت لم تقم بذلك بالفعل، إضافة Firebase إلى مشروع Android .
  2. باستخدام Firebase الروبوت بوم ، أن يعلن تبعية المكتبة Firebase مصادقة الروبوت في الوحدة النمطية الخاصة بك (على مستوى التطبيق) ملف Gradle (عادة app/build.gradle ).

    جافا

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // Declare 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 الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

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

    dependencies {
        // Declare 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:21.0.1'
    }
    

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // Declare 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-ktx'
    }
    

    باستخدام Firebase الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

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

    dependencies {
        // Declare 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-ktx:21.0.1'
    }
    
  3. إذا لم تكن متصلا بعد تطبيقك لمشروع Firebase قم بذلك من وحدة التحكم Firebase .
  4. إذا لم تكن قد وضعت بالفعل التجزئة SHA-1 التطبيق الخاص بك في وحدة التحكم Firebase ، أن تفعل ذلك. انظر تصديق عميلك للحصول على معلومات حول العثور على تجزئة SHA-1 التطبيق الخاص بك.

مخاوف أمنية

المصادقة باستخدام رقم هاتف فقط ، على الرغم من ملاءمتها ، إلا أنها أقل أمانًا من الطرق الأخرى المتاحة ، لأن حيازة رقم هاتف يمكن نقلها بسهولة بين المستخدمين. أيضًا ، على الأجهزة ذات ملفات تعريف المستخدمين المتعددة ، يمكن لأي مستخدم يمكنه تلقي رسائل SMS تسجيل الدخول إلى حساب باستخدام رقم هاتف الجهاز.

إذا كنت تستخدم تسجيل الدخول المستند إلى رقم الهاتف في تطبيقك ، فيجب أن تقدمه جنبًا إلى جنب مع طرق تسجيل دخول أكثر أمانًا ، وإبلاغ المستخدمين بالمقايضات الأمنية باستخدام تسجيل الدخول برقم الهاتف.

تفعيل تسجيل الدخول إلى رقم الهاتف لمشروع Firebase

لتسجيل دخول المستخدمين عن طريق الرسائل القصيرة SMS ، يجب أولاً تمكين طريقة تسجيل الدخول إلى رقم الهاتف لمشروع Firebase:

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

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

تفعيل التحقق من التطبيق

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

  • السلامة SafetyNet: إذا كان المستخدم لديه جهاز مع خدمات جوجل اللعب المثبتة، ومصادقة Firebase يمكن التحقق من جهاز شرعية مع الروبوت السلامة SafetyNet ، رقم هاتف تسجيل الدخول يمكن المضي قدما.
  • لتمكين SafetyNet للاستخدام مع مصادقة Firebase:

    1. في وحدة التحكم سحابة جوجل، وتمكين API الروبوت DeviceCheck للمشروع الخاص بك. سيتم استخدام مفتاح Firebase API الافتراضي ، ويلزم السماح له بالوصول إلى واجهة برمجة تطبيقات DeviceCheck.
    2. إذا كنت لم تحدد بعد التطبيق الخاص بك SHA-256 بصمة، أن تفعل ذلك من صفحة إعدادات وحدة التحكم Firebase. الرجوع إلى تصديق عميلك للحصول على تفاصيل حول كيفية الحصول على التطبيق الخاص بك SHA-256 بصمة.
  • التحقق اختبار reCAPTCHA: في حال السلامة SafetyNet لا يمكن استخدامها، مثل عندما يقوم المستخدم ليس لديه خدمات Google Play تدعم، أو عند اختبار التطبيق على المحاكي، تستخدم مصادقة Firebase التحقق اختبار reCAPTCHA لاستكمال الهاتف علامة في التدفق. غالبًا ما يمكن إكمال اختبار reCAPTCHA دون أن يضطر المستخدم إلى حل أي شيء. يرجى ملاحظة أن هذا التدفق يتطلب أن يكون SHA-1 مرتبطًا بتطبيقك.

أرسل رمز التحقق إلى هاتف المستخدم

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

ثم، لتمرير رقم هاتفهم إلى PhoneAuthProvider.verifyPhoneNumber طريقة لطلب أن Firebase التحقق من رقم الهاتف الخاص بالمستخدم. على سبيل المثال:

جافا

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // Activity (for callback binding)
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

Kotlin + KTX

val options = PhoneAuthOptions.newBuilder(auth)
    .setPhoneNumber(phoneNumber)       // Phone number to verify
    .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
    .setActivity(this)                 // Activity (for callback binding)
    .setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

و verifyPhoneNumber الأسلوب هو عودة الدخول: إذا كنت اسميها عدة مرات، كما هو الحال في أي نشاط في onStart الأسلوب، verifyPhoneNumber سوف الطريقة لا يرسل SMS الثاني إلا إذا انتهت مهلة الطلب الأصلي من.

يمكنك استخدام هذا السلوك لاستئناف عملية تسجيل الدخول إلى رقم الهاتف إذا تم إغلاق تطبيقك قبل أن يتمكن المستخدم من تسجيل الدخول (على سبيل المثال ، أثناء استخدام المستخدم لتطبيق الرسائل القصيرة SMS). بعد استدعاء verifyPhoneNumber ، تعيين إشارة تشير إلى التحقق قيد التقدم. ثم، حفظ العلم في آخر لديك onSaveInstanceState طريقة واستعادة العلم في onRestoreInstanceState . وأخيرا، في آخر لديك onStart طريقة، معرفة ما اذا كان التحقق بالفعل في التقدم، وإذا كان الأمر كذلك، اتصل verifyPhoneNumber مرة أخرى. تأكد من مسح علامة عندما يفشل التحقق يكمل أو (انظر الاسترجاعات التأكيد ).

للتعامل مع بسهولة دوران الشاشة وحالات أخرى من إعادة تشغيل آخر، لتمرير آخر الخاص بك إلى verifyPhoneNumber الأسلوب. سيتم فصل عمليات الاسترجاعات تلقائيًا عند توقف النشاط ، بحيث يمكنك كتابة رمز انتقال واجهة المستخدم بحرية في طرق رد الاتصال.

رسالة SMS التي بعث بها Firebase يمكن أيضا أن تكون مترجمة لتحديد لغة المصادقة عبر setLanguageCode الطريقة على سبيل المثال مصادقة الخاص بك.

جافا

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin + KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

عند استدعاء PhoneAuthProvider.verifyPhoneNumber ، يجب أيضا توفير مثيل OnVerificationStateChangedCallbacks ، الذي يحتوي على تطبيقات وظائف الاستدعاء التي تتعامل مع نتائج الطلب. على سبيل المثال:

جافا

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(PhoneAuthCredential credential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:" + credential);

        signInWithPhoneAuthCredential(credential);
    }

    @Override
    public void onVerificationFailed(FirebaseException e) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e);

        if (e instanceof FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e instanceof FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        }

        // Show a message and update the UI
    }

    @Override
    public void onCodeSent(@NonNull String verificationId,
                           @NonNull PhoneAuthProvider.ForceResendingToken token) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:" + verificationId);

        // Save verification ID and resending token so we can use them later
        mVerificationId = verificationId;
        mResendToken = token;
    }
};

Kotlin + KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    override fun onVerificationCompleted(credential: PhoneAuthCredential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:$credential")
        signInWithPhoneAuthCredential(credential)
    }

    override fun onVerificationFailed(e: FirebaseException) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e)

        if (e is FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e is FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        }

        // Show a message and update the UI
    }

    override fun onCodeSent(
        verificationId: String,
        token: PhoneAuthProvider.ForceResendingToken
    ) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:$verificationId")

        // Save verification ID and resending token so we can use them later
        storedVerificationId = verificationId
        resendToken = token
    }
}

عمليات رد الاتصال التحقق

في معظم التطبيقات، يمكنك تنفيذ onVerificationCompleted ، onVerificationFailed ، و onCodeSent رد. هل يمكن أيضا تنفيذ onCodeAutoRetrievalTimeOut ، اعتمادا على متطلبات التطبيق الخاص بك.

onVerificationCompleted (PhoneAuthCredential)

تسمى هذه الطريقة في حالتين:

  • التحقق الفوري: في بعض الحالات يمكن التحقق من رقم الهاتف على الفور دون الحاجة إلى إرسال رمز التحقق أو إدخاله.
  • الاسترداد التلقائي: في بعض الأجهزة ، يمكن لخدمات Google Play اكتشاف رسائل التحقق الواردة تلقائيًا وإجراء التحقق دون إجراء من المستخدم. (هذه القدرة قد تكون غير متوفرة مع بعض شركات النقل.) وهذا يستخدم API SMS المسترد ، والذي يتضمن تجزئة 11 شخصية في نهاية الرسالة SMS.
في كلتا الحالتين، تم التحقق من رقم الهاتف المستخدم بنجاح، ويمكنك استخدام PhoneAuthCredential الكائن الذي هو تمريرها إلى الاستدعاء ل تسجيل الدخول للمستخدم .

onVerificationFailed (FirebaseException)

يتم استدعاء هذه الطريقة استجابةً لطلب تحقق غير صالح ، مثل طلب يحدد رقم هاتف أو رمز تحقق غير صالح.

onCodeSent (String verificationId، PhoneAuthProvider.ForceResendingToken)

اختياري. يتم استدعاء هذه الطريقة بعد إرسال رمز التحقق عبر رسالة نصية قصيرة إلى رقم الهاتف المقدم.

عند استدعاء هذه الطريقة ، تعرض معظم التطبيقات واجهة مستخدم تطالب المستخدم بكتابة رمز التحقق من رسالة SMS. (وفي الوقت نفسه، لصناعة السيارات في التحقق يمكن أن يسير في الخلفية.) ثم بعد المستخدم بكتابة رمز التحقق، يمكنك استخدام رمز التحقق وID التحقق التي تم تمريرها إلى الأسلوب لإنشاء PhoneAuthCredential الكائن، الذي يمكنك بدورها استخدامها لتسجيل دخول المستخدم. ومع ذلك، فإن بعض التطبيقات قد تنتظر حتى onCodeAutoRetrievalTimeOut يسمى قبل عرض UI رمز التحقق (غير مستحسن).

onCodeAutoRetrievalTimeOut (معرف التحقق من السلسلة)

اختياري. وتسمى هذه الطريقة بعد فترة المهلة المحددة ل verifyPhoneNumber قد مرت دون onVerificationCompleted اثار أولا. على الأجهزة التي لا تحتوي على بطاقات SIM ، يتم استدعاء هذه الطريقة على الفور لأن الاسترداد التلقائي للرسائل القصيرة غير ممكن.

تحظر بعض التطبيقات إدخال المستخدم حتى تنتهي مهلة التحقق التلقائي ، وعندها فقط تعرض واجهة مستخدم تطالب المستخدم بكتابة رمز التحقق من رسالة SMS (غير مستحسن).

قم بإنشاء كائن PhoneAuthCredential

بعد المستخدم بإدخال رمز التحقق الذي Firebase إرسالها إلى هاتف المستخدم، إنشاء PhoneAuthCredential الكائن، وذلك باستخدام رمز التحقق وID التحقق التي تم تمريرها إلى onCodeSent أو onCodeAutoRetrievalTimeOut رد. (عندما onVerificationCompleted يسمى، وتحصل على PhoneAuthCredential الكائن مباشرة، لذلك يمكنك تخطي هذه الخطوة.)

لإنشاء PhoneAuthCredential الكائن، والدعوة PhoneAuthProvider.getCredential :

جافا

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

Kotlin + KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

تسجيل دخول المستخدم

بعد الحصول على PhoneAuthCredential الكائن، سواء في onVerificationCompleted رد أو عن طريق الاتصال PhoneAuthProvider.getCredential ، واستكمال تسجيل الدخول التدفق عن طريق تمرير PhoneAuthCredential الكائن إلى FirebaseAuth.signInWithCredential :

جافا

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .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, "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();
                        // Update UI
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });
}

Kotlin + KTX

private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")

                    val user = task.result?.user
                } else {
                    // Sign in failed, display a message and update the UI
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    if (task.exception is FirebaseAuthInvalidCredentialsException) {
                        // The verification code entered was invalid
                    }
                    // Update UI
                }
            }
}

اختبر باستخدام أرقام هواتف خيالية

يمكنك إعداد أرقام هواتف خيالية للتطوير عبر وحدة تحكم Firebase. يوفر الاختبار باستخدام أرقام الهواتف الخيالية المزايا التالية:

  • اختبر مصادقة رقم الهاتف دون استهلاك حصة الاستخدام الخاصة بك.
  • اختبر مصادقة رقم الهاتف دون إرسال رسالة SMS فعلية.
  • قم بإجراء اختبارات متتالية باستخدام نفس رقم الهاتف دون التعرض للاختناق. هذا يقلل من مخاطر الرفض أثناء عملية مراجعة متجر التطبيقات إذا كان المراجع يستخدم نفس رقم الهاتف للاختبار.
  • اختبر بسهولة في بيئات التطوير دون أي جهد إضافي ، مثل القدرة على التطوير في محاكي iOS أو محاكي Android بدون خدمات Google Play.
  • اكتب اختبارات التكامل دون أن تمنعك فحوصات الأمان التي تُطبق عادةً على أرقام الهواتف الحقيقية في بيئة الإنتاج.

يجب أن تستوفي أرقام الهواتف الخيالية المتطلبات التالية:

  1. تأكد من استخدام أرقام هواتف خيالية بالفعل وغير موجودة بالفعل. لا تسمح لك مصادقة Firebase بتعيين أرقام الهواتف الحالية التي يستخدمها المستخدمون الحقيقيون كأرقام اختبار. خيار واحد هو استخدام 555 أرقام مسبوقة كأرقام الهاتف اختبار الولايات المتحدة، على سبيل المثال: +1 650-555-3434
  2. يجب تنسيق أرقام الهواتف بشكل صحيح وفقًا للطول والقيود الأخرى. سيستمرون في إجراء نفس التحقق من صحة رقم هاتف المستخدم الحقيقي.
  3. يمكنك إضافة ما يصل إلى 10 أرقام هواتف للتطوير.
  4. استخدم أرقام هواتف / أكواد اختبارية يصعب تخمينها وقم بتغييرها بشكل متكرر.

قم بإنشاء أرقام هواتف ورموز تحقق خيالية

  1. في وحدة التحكم Firebase ، فتح الباب المصادقة.
  2. في تسجيل الدخول التبويب الأسلوب، تمكين مزود الهاتف إذا كنت لم تقم بذلك بالفعل.
  3. فتح أرقام الهاتف لاختبار القائمة الأكورديون.
  4. توفير رقم الهاتف الذي تريد اختباره، على سبيل المثال: +1 650-555-3434.
  5. تقديم رمز التحقق من 6 أرقام لهذا العدد تحديدا، على سبيل المثال: 654321.
  6. إضافة الرقم. إذا كانت هناك حاجة ، يمكنك حذف رقم الهاتف ورمزه بالمرور فوق الصف المقابل والنقر فوق أيقونة سلة المهملات.

الاختبار اليدوي

يمكنك البدء مباشرة في استخدام رقم هاتف وهمي في تطبيقك. يتيح لك ذلك إجراء اختبار يدوي أثناء مراحل التطوير دون التعرض لمشكلات في الحصة النسبية أو تقييدها. يمكنك أيضًا الاختبار مباشرة من محاكي iOS أو محاكي Android بدون تثبيت خدمات Google Play.

عند تقديم رقم الهاتف الوهمي وإرسال رمز التحقق ، لا يتم إرسال رسالة SMS فعلية. بدلاً من ذلك ، تحتاج إلى تقديم رمز التحقق الذي تم تكوينه مسبقًا لإكمال تسجيل الدخول.

عند اكتمال تسجيل الدخول ، يتم إنشاء مستخدم Firebase برقم الهاتف هذا. يمتلك المستخدم نفس السلوك والخصائص مثل مستخدم رقم هاتف حقيقي ، ويمكنه الوصول إلى Realtime Database / Cloud Firestore والخدمات الأخرى بنفس الطريقة. الرمز المميز للمعرف الذي تم سكه أثناء هذه العملية له نفس توقيع مستخدم رقم هاتف حقيقي.

وثمة خيار آخر هو تحديد دور الاختبار عبر المطالبات العرف على هؤلاء المستخدمين في التفريق لهم كمستخدمين وهمية إذا كنت ترغب في مزيد من تقييد الوصول.

لتحريك يدويا reCAPTCHA من تدفق لاختبار، استخدم forceRecaptchaFlowForTesting() الأسلوب.

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

اختبار التكامل

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

على الروبوت، والدعوة setAppVerificationDisabledForTesting() قبل signInWithPhoneNumber المكالمة. يؤدي هذا إلى تعطيل التحقق من التطبيق تلقائيًا ، مما يسمح لك بتمرير رقم الهاتف دون حله يدويًا. لاحظ أنه على الرغم من تعطيل reCAPTCHA و / أو SafetyNet ، فإن استخدام رقم هاتف حقيقي سيظل يفشل في إكمال تسجيل الدخول. لا يمكن استخدام سوى أرقام الهواتف الوهمية مع واجهة برمجة التطبيقات هذه.

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

داعيا verifyPhoneNumber مع عدد خيالية بتشغيل onCodeSent الاستدعاء، التي ستحتاج إلى توفير رمز التحقق المقابلة. يسمح هذا بإجراء الاختبار في محاكيات Android.

جافا

String phoneNum = "+16505554567";
String testVerificationCode = "123456";

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
FirebaseAuth auth = FirebaseAuth.getInstance();
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onCodeSent(String verificationId,
                                   PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                MainActivity.this.enableUserManuallyInputCode();
            }

            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                // ...
            }
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin + KTX

val phoneNum = "+16505554567"
val testVerificationCode = "123456"

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
val options = PhoneAuthOptions.newBuilder(Firebase.auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(30L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

            override fun onCodeSent(
                    verificationId: String,
                    forceResendingToken: PhoneAuthProvider.ForceResendingToken
            ) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                this@MainActivity.enableUserManuallyInputCode()
            }

            override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            override fun onVerificationFailed(e: FirebaseException) {
                // ...
            }
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

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

عندما verifyPhoneNumber يسمى، ومشغلات onVerificationCompleted مع PhoneAuthCredential مباشرة. هذا يعمل فقط مع أرقام الهواتف الخيالية.

تأكد من تعطيل هذا الخيار ومن عدم وجود أرقام هواتف خيالية مشفرة بشكل ثابت في تطبيقك عند نشر تطبيقك على متجر Google Play.

جافا

// The test phone number and code should be whitelisted in the console.
String phoneNumber = "+16505554567";
String smsCode = "123456";

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings();

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode);

PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin + KTX

// The test phone number and code should be whitelisted in the console.
val phoneNumber = "+16505554567"
val smsCode = "123456"

val firebaseAuth = Firebase.auth
val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode)

val options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            override fun onVerificationCompleted(credential: PhoneAuthCredential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

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

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

  • في التطبيقات الخاصة بك، يمكنك الحصول على المعلومات الشخصية الأساسية للمستخدم من FirebaseUser الكائن. انظر إدارة المستخدمين .

  • في قاعدة البيانات الخاصة بك Firebase الحقيقي وسحابة التخزين قواعد الأمن ، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

يمكنك السماح للمستخدمين تسجيل الدخول إلى التطبيق الخاص بك باستخدام موفري المصادقة متعددة عن طريق ربط المصادقة أوراق اعتماد مقدم إلى حساب مستخدم موجود.

تسجيل الخروج مستخدم، استدعاء signOut :

جافا

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()