يمكنك استخدام Firebase Authentication لتسجيل دخول أحد المستخدمين عن طريق إرسال رسالة SMS. إلى هاتف المستخدم. يسجّل المستخدم الدخول باستخدام رمز يُستخدم لمرة واحدة ومضمّن في رسالة SMS
إنّ أسهل طريقة لإضافة رقم الهاتف المستخدَم لتسجيل الدخول إلى تطبيقك هي استخدام FirebaseUI، والذي يتضمّن أداة لتسجيل الدخول تعمل على تنفيذ مسارات تسجيل الدخول على الهاتف تسجيل الدخول باستخدام الأرقام، بالإضافة إلى تسجيل الدخول المستند إلى كلمة المرور والدخول الموحّد. هذا المستند كيفية تنفيذ عملية تسجيل الدخول إلى رقم هاتف باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase
قبل البدء
- إذا لم تكن قد فعلت ذلك بالفعل، إضافة Firebase إلى مشروع Android
-
في ملف 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:33.2.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، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Android في 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:23.0.0") }
- إذا لم تكن قد ربطت تطبيقك بمشروعك على Firebase، يمكنك إجراء ذلك من وحدة تحكّم Firebase.
- إذا لم يسبق لك ضبط تجزئة SHA-1 لتطبيقك في وحدة تحكّم Firebase، القيام بذلك. عرض مصادقة العميل للحصول على معلومات حول العثور على خوارزمية SHA-1 لتطبيقك تجزئة.
المخاوف المرتبطة بالأمان
تتم المصادقة باستخدام رقم الهاتف فقط مع الحفاظ على سهولة عملية المصادقة، ولكنّها أقل أمانًا. من الطرق الأخرى المتاحة، لأن امتلاك رقم هاتف يمكن نقلها بسهولة بين المستخدمين. أيضًا على الأجهزة التي تتضمن عدة مستخدمين فإن أي مستخدم يمكنه تلقي الرسائل القصيرة SMS يمكنه تسجيل الدخول إلى حساب باستخدام رقم هاتف الجهاز.
إذا كنت تستخدم تسجيل الدخول المستنِد إلى رقم الهاتف في تطبيقك، عليك توفيره إلى جانب طرق أكثر أمانًا لتسجيل الدخول، وإعلام المستخدمين بمعلومات الأمان المفاضلات الناتجة عن استخدام تسجيل الدخول باستخدام رقم الهاتف.
تفعيل ميزة "تسجيل الدخول باستخدام رقم الهاتف" لمشروع Firebase
لتسجيل دخول المستخدمين من خلال الرسائل القصيرة SMS، يجب أولاً تفعيل تسجيل الدخول باستخدام رقم الهاتف. لمشروعك على Firebase وهي:
- في وحدة تحكُّم Firebase، افتح قسم المصادقة.
- في صفحة طريقة تسجيل الدخول، فعِّل رقم الهاتف. تسجيل الدخول.
تفعيل التحقق من التطبيقات
لاستخدام مصادقة رقم الهاتف، يجب أن يكون Firebase قادرًا على التحقق من أن طلبات تسجيل الدخول إلى رقم الهاتف الواردة من تطبيقك. هناك ثلاث طرق تنجز Firebase Authentication ما يلي:
- واجهة برمجة التطبيقات Play Integrity API: إذا كان المستخدم لديه جهاز تم تثبيت Google Play services عليه،
وFirebase Authentication يمكنه التحقّق من سلامة الجهاز من خلال
واجهة برمجة التطبيقات Play Integrity API
يمكنك متابعة عملية تسجيل الدخول باستخدام رقم هاتفك. تم تفعيل واجهة برمجة التطبيقات Play Integrity API في مشروع تملكه Google من خلال
Firebase Authentication، ليس في مشروعك. لا يساهم ذلك في أيّ واجهة برمجة تطبيقات في Play Integrity API.
الحصص في مشروعك. تتوفّر خدمة "الدعم من Google Play" مع
الإصدار 21.2.0 من حزمة تطوير البرامج (SDK) Authentication أو الإصدارات الأحدث
(Firebase BoM الإصدار 31.4.0 والإصدارات الأحدث).
لاستخدام Play Integrity، يجب إجراء ذلك إذا لم يسبق لك تحديد الملف المرجعي لمعيار SHA-256 لتطبيقك. من صفحة المشروع الإعدادات لوحدة تحكُّم Firebase. ارجع إلى مصادقة عميل للحصول على تفاصيل حول كيفية الحصول على بصمة الإصبع SHA-256 لتطبيقك.
- التحقّق من اختبار reCAPTCHA: في حال تعذّر استخدام Play Integrity،
مثلاً عندما يكون لدى المستخدم جهاز لم يتم تثبيت Google Play services عليه، Firebase Authentication
يستخدم اختبار reCAPTCHA لإكمال عملية تسجيل الدخول عبر الهاتف. يمكن لتحدي reCAPTCHA
إنجازها غالبًا دون الحاجة إلى حل المستخدم لأي شيء. لاحظ أن هذا التدفق يتطلب
بخوارزمية SHA-1 بتطبيقك. يتطلّب هذا المسار أيضًا توفير مفتاح واجهة برمجة التطبيقات
غير محظور أو مدرج في القائمة المسموح بها للمستخدم
PROJECT_ID.firebaseapp.com
.في ما يلي بعض الحالات التي يتم فيها تشغيل reCAPTCHA:
- إذا لم يكن Google Play services مثبَّتًا على جهاز المستخدم النهائي.
- إذا لم يتم توزيع التطبيق من خلال Google Play Store (على الإصدار 21.2.0 من حزمة تطوير البرامج (SDK) لـ Authentication
- إذا كان رمز SafetyNet الذي تم الحصول عليه غير صالح (على Authentication من إصدار حزمة تطوير البرامج (SDK) < < v21.2.0)
عند استخدام SafetyNet أو Play Integrity لإثبات ملكية التطبيقات، تتم تعبئة الحقل
%APP_NAME%
في نموذج الرسائل القصيرة SMS باسم التطبيق الذي تم تحديده من Google Play Store. في الحالات التي يتم فيها تشغيل reCAPTCHA، تتم تعبئة%APP_NAME%
على أنّهPROJECT_ID.firebaseapp.com
.
forceRecaptchaFlowForTesting
يمكنك إيقاف التحقق من التطبيقات (عند استخدام أرقام هواتف وهمية) باستخدام
setAppVerificationDisabledForTesting
تحديد المشاكل وحلّها
"الحالة الأولية غير متوفّرة" حدث خطأ عند استخدام reCAPTCHA للتحقّق من التطبيق.
ويمكن أن يحدث ذلك عند اكتمال تدفق reCAPTCHA بنجاح، ولكن لا تتم إعادة توجيه المستخدم إلى التطبيق الأصلي. وفي حال حدوث ذلك، ستتم إعادة توجيه المستخدم إلى عنوان URL الاحتياطي
PROJECT_ID.firebaseapp.com/__/auth/handler
. في متصفحات Firefox، يكون فتح روابط التطبيقات الأصلية معطلاً افتراضيًا. إذا ظهر لك الخطأ أعلاه على Firefox، يُرجى اتّباع الخطوات الواردة في ضبط Firefox لنظام التشغيل Android لفتح الروابط في التطبيقات الأصلية لتفعيل فتح روابط التطبيقات.
إرسال رمز تحقُّق إلى هاتف المستخدم
لبدء تسجيل الدخول باستخدام رقم الهاتف، اعرض للمستخدم واجهة تطلب منك على كتابة رقم هاتفه. تختلف المتطلبات القانونية، ولكن تُعتبر من أفضل الممارسات وتحديد التوقعات للمستخدمين، يجب عليك إخبارهم بأنه إذا استخدموا تسجيل الدخول عبر الهاتف، فقد يتلقون رسالة قصيرة SMS للتحقق و1 الأسعار.
بعد ذلك، أرسِل رقم هاتفه إلى
طريقة واحدة (PhoneAuthProvider.verifyPhoneNumber
) لطلب Firebase
إثبات ملكية رقم هاتف المستخدم. على سبيل المثال:
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)
Java
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // (optional) Activity for callback binding // If no activity is passed, reCAPTCHA verification can not be used. .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options);
الطريقة verifyPhoneNumber
هي إعادة المشاركة: إذا تم استدعاؤها
عدة مرات، كما هو الحال في طريقة onStart
لأحد الأنشطة،
لن يتم إرسال رسالة SMS ثانية إلى طريقة verifyPhoneNumber
ما لم
انتهت مهلة الطلب الأصلي.
ويمكنك استخدام هذا السلوك لاستئناف عملية تسجيل الدخول إلى رقم الهاتف إذا كان
قبل أن يتمكن المستخدم من تسجيل الدخول (على سبيل المثال، عندما يستخدم المستخدم
تطبيق الرسائل القصيرة SMS). بعد الاتصال بـ verifyPhoneNumber
، ضَع علامة
يشير إلى أن التحقق قيد التقدم. بعد ذلك، احفظ العلامة في قسم
onSaveInstanceState
واستعادة العلامة في
onRestoreInstanceState
وأخيرًا، في قسم "النشاط
onStart
والتحقق مما إذا كانت عملية إثبات الملكية قيد التقدّم أم لا
إذا كان الأمر كذلك، فاتصل بـ verifyPhoneNumber
مرة أخرى. تأكد من إزالة العلم عند
اكتمال التحقق أو فشله (راجع
عمليات معاودة الاتصال لإثبات الملكية).
للتعامل بسهولة مع تدوير الشاشة وحالات إعادة تشغيل النشاط الأخرى بسهولة،
نقل "نشاطك" إلى طريقة verifyPhoneNumber
. طلبات معاودة الاتصال
تلقائيًا عند توقف النشاط، حتى تتمكن من كتابة واجهة المستخدم بحرية
رمز النقل في طرق معاودة الاتصال.
يمكن أيضًا ترجمة رسالة SMS المرسلة من Firebase من خلال تحديد
لغة المصادقة عبر طريقة setLanguageCode
في المصادقة
مثال.
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
عند الاتصال بـ PhoneAuthProvider.verifyPhoneNumber
، يجب أيضًا
تقديم مثيل عن OnVerificationStateChangedCallbacks
، الذي
يحتوي على تنفيذات لدوال معاودة الاتصال التي تعالج نتائج
الطلب. على سبيل المثال:
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 } else if (e is FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // 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 } }
Java
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull 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(@NonNull 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 } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // 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; } };
طلبات معاودة الاتصال لإثبات الملكية
في معظم التطبيقات، يتم تنفيذ onVerificationCompleted
،
onVerificationFailed
وonCodeSent
عمليات معاودة الاتصال. إِنْتَ
أيضًا تنفيذ onCodeAutoRetrievalTimeOut
، استنادًا إلى
متطلبات التطبيق.
onVerifycomplete(PhoneAuthCredential)
يتم استدعاء هذه الطريقة في حالتين:
- التحقق الفوري: في بعض الحالات يمكن إدخال رقم الهاتف بشكل فوري تم التحقق منه بدون الحاجة إلى إرسال أو إدخال رمز التحقق.
- الاسترجاع التلقائي: في بعض الأجهزة، يمكن لخدمات Google Play اكتشاف الرسائل القصيرة SMS الواردة لإثبات الملكية تلقائيًا وإجراء التحقق بدون إجراء من المستخدم. (قد لا تكون هذه الإمكانية متاحة) مع بعض مشغّلي شبكات الجوّال). يستخدم هذا واجهة برمجة التطبيقات SMS Retriever API تتضمن تجزئة مكونة من 11 حرفًا في نهاية الرسالة القصيرة.
PhoneAuthCredential
الذي تم تمريره إلى
لتسجيل دخول المستخدم.
onVerifyفشل(FirebaseException)
يتم استدعاء هذه الطريقة استجابةً لطلب تحقق غير صالح، مثل كطلب يحدد رقم هاتف أو رمز تحقق غير صالح.
onCodeSent(String verificationId, PhoneAuthProvider.ForceRenameingToken)
هذه السمة اختيارية. يتم طلب هذه الطريقة بعد إرسال رمز التحقّق. عبر الرسائل القصيرة SMS إلى رقم الهاتف المقدم.
عند استدعاء هذه الطريقة، تعرض معظم التطبيقات واجهة مستخدم تطلب من المستخدم
لكتابة رمز التحقق من رسالة SMS. (في الوقت نفسه،
قد تستمر عملية إثبات الملكية التلقائي في الخلفية). بعد ذلك، بعد أن ينقر المستخدم
رمز التحقق، فيمكنك استخدام رمز التحقق
رقم تعريف التحقق الذي تم تمريره إلى الطريقة لإنشاء
عنصر واحد (PhoneAuthCredential
) يمكنك استخدامه لتسجيل الدخول
المستخدم. ومع ذلك، قد تنتظر بعض التطبيقات حتى
يتم استدعاء onCodeAutoRetrievalTimeOut
قبل عرض
واجهة المستخدم لرمز التحقق (لا يُنصح به).
onCodeAutoRetrievalTimeOut(String verificationId)
هذه السمة اختيارية. ويتم استدعاء هذه الطريقة بعد مدة المهلة المحددة
تم تجاوز verifyPhoneNumber
بدون
يتم تشغيل onVerificationCompleted
أولاً. على الأجهزة غير المزوّدة بشريحة SIM
تُسمى هذه الطريقة على الفور لأن الاسترداد التلقائي للرسائل القصيرة
ممكن.
تحظر بعض التطبيقات إدخالات المستخدم إلى أن تنتهي مهلة التحقّق التلقائي. ثم تعرض فقط واجهة مستخدم تطلب من المستخدم كتابة رمز التحقق من رسالة SMS (لا يُنصح بهذا الخيار)
إنشاء كائن PhoneAuthCredential
بعد أن يُدخل المستخدم رمز التحقّق الذي أرسله Firebase إلى
هاتف، إنشاء عنصر PhoneAuthCredential
، باستخدام التحقق
ورقم تعريف التحقّق الذي تم إدخاله إلى onCodeSent
أو
معاودة الاتصال onCodeAutoRetrievalTimeOut
. (متى
تم الاتصال بـ "onVerificationCompleted
"، وستحصل على
PhoneAuthCredential
، وبالتالي يمكنك تخطّي هذه الخطوة.)
لإنشاء كائن PhoneAuthCredential
، يمكنك طلب
PhoneAuthProvider.getCredential
:
Kotlin+KTX
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
تسجيل دخول المستخدم
بعد الحصول على عنصر PhoneAuthCredential
، سواء كان في
معاودة الاتصال عبر onVerificationCompleted
أو من خلال الاتصال
PhoneAuthProvider.getCredential
، عليك إكمال عملية تسجيل الدخول من خلال
تمرير كائن PhoneAuthCredential
إلى
FirebaseAuth.signInWithCredential
:
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 } } }
Java
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 } } } }); }
الاختبار باستخدام أرقام هواتف خيالية
يمكنك إعداد أرقام هواتف خيالية للتطوير من خلال وحدة تحكُّم Firebase. إجراء الاختبارات باستخدام هاتف وهمي الأرقام التالية:
- يمكنك اختبار مصادقة رقم الهاتف بدون استهلاك حصة الاستخدام.
- اختبار مصادقة رقم الهاتف بدون إرسال رسالة SMS فعلية.
- يمكنك إجراء اختبارات متتالية باستخدام رقم الهاتف نفسه بدون تقييد. هذا النمط إلى تقليل مخاطر الرفض أثناء عملية مراجعة متجر التطبيقات في حال استخدام المُراجع رقم الهاتف نفسه للاختبار.
- الاختبار بسهولة في بيئات التطوير دون أي جهد إضافي، مثل والقدرة على التطوير باستخدام محاكي iOS أو محاكي Android بدون "خدمات Google Play".
- كتابة اختبارات الدمج بدون حظرها من خلال فحوصات الأمان التي يتم تطبيقها عادةً على أرقام هواتف حقيقية في بيئة إنتاج.
يجب أن تستوفي أرقام الهواتف الخيالية المتطلبات التالية:
- احرص على استخدام أرقام هواتف خيالية بالفعل، وغير موجودة. لا يسمح لك Firebase Authentication بضبط أرقام الهواتف الحالية التي يستخدمها مستخدمون حقيقيون كأرقام اختبار. أحد الخيارات المتاحة هو استخدام 555 رقمًا يبدأ ببادئة كأرقام هواتف تجريبية في الولايات المتحدة، على سبيل المثال: +1 650-555-3434
- يجب أن تكون أرقام الهواتف منسَّقة بشكل صحيح حسب الطول القيود. سيظلان يخضعان لعملية التحقق نفسها مثل رقم هاتف المستخدم الحقيقي.
- يمكنك إضافة ما يصل إلى 10 أرقام هواتف لعملية التطوير.
- استخدِم أرقام هواتف أو رموزًا اختبارية يصعب تخمينها وتغييرها. بشكل متكرر.
إنشاء أرقام هواتف ورموز تحقُّق وهمية
- في وحدة تحكُّم Firebase، افتح قسم المصادقة.
- في علامة التبويب طريقة تسجيل الدخول، فعِّل مقدِّم خدمة الهاتف إذا لم يسبق لك إجراء ذلك.
- افتح قائمة أكورديون أرقام الهاتف للاختبار.
- أدخِل رقم الهاتف الذي تريد اختباره، على سبيل المثال: +1 650-555-3434.
- أدخِل رمز التحقّق المكوَّن من 6 أرقام لهذا الرقم تحديدًا، على سبيل المثال: 654321.
- أضِف الرقم. إذا كانت هناك حاجة، فيمكنك حذف رقم الهاتف رمزه عن طريق التمرير فوق الصف المقابل والنقر على رمز المهملات.
الاختبار اليدوي
يمكنك البدء مباشرةً في استخدام رقم هاتف وهمي في تطبيقك. يتيح لك ذلك إجراء اختبار يدوي أثناء مراحل التطوير بدون التسبب في مشاكل متعلّقة بالحصة أو التقييد. يمكنك أيضًا إجراء الاختبارات مباشرةً من خلال محاكي iOS أو محاكي Android بدون الحاجة إلى "خدمات Google Play". مثبت.
فعندما تقدم رقم الهاتف الوهمي وترسل رمز التحقق، لن يتم إرسال رسالة قصيرة SMS تم إرسالها. بدلاً من ذلك، عليك تقديم رمز التحقّق الذي سبق أن تم ضبطه لإكمال عملية التوقيع بوصة
عند اكتمال تسجيل الدخول، يتم إنشاء مستخدم Firebase برقم الهاتف هذا. تشير رسالة الأشكال البيانية للمستخدم نفس السلوك والخصائص مثل مستخدم رقم هاتف حقيقي، ويمكنه الوصول Realtime Database/Cloud Firestore والخدمات الأخرى بالطريقة نفسها. تم إنشاء الرمز المميز للمعرّف أثناء لهذه العملية نفس توقيع مستخدم رقم الهاتف الحقيقي.
ويمكنك أيضًا تحديد دور اختباري عبر قسم مخصّص هذه المطالبات المتعلقة بهؤلاء المستخدمين لتمييزهم كمستخدمين مزيفين إذا كنت تريد فرض قيود أكثر الوصول إليه.
لتشغيل مسار reCAPTCHA يدويًا للاختبار، استخدِم
طريقة forceRecaptchaFlowForTesting()
.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
اختبار الدمج
بالإضافة إلى الاختبار اليدوي، يوفّر Firebase Authentication واجهات برمجة تطبيقات للمساعدة في كتابة اختبارات الدمج. لاختبار مصادقة الهاتف. توقِف واجهات برمجة التطبيقات هذه التحقّق من التطبيقات من خلال إيقاف reCAPTCHA. على الويب والإشعارات الصامتة في iOS. وهذا يجعل اختبار التشغيل الآلي ممكنًا في هذه التدفقات وأسهل في التنفيذ. بالإضافة إلى ذلك، تساعد في توفير إمكانية اختبار التطبيقات الفورية خطوات إثبات الملكية على Android
على جهاز Android، اتصل بالرقم setAppVerificationDisabledForTesting()
قبل
مكالمة signInWithPhoneNumber
. سيؤدي هذا الإجراء إلى إيقاف التحقّق من التطبيقات تلقائيًا
مما يتيح لك تمرير رقم الهاتف دون حله يدويًا. على الرغم من
تم إيقاف Play Integrity و reCAPTCHA، وفي حال استخدام رقم هاتف حقيقي، سيتعذّر تنفيذ الإجراء.
إكمال عملية تسجيل الدخول لا يمكن استخدام سوى أرقام الهواتف الخيالية فقط مع واجهة برمجة التطبيقات هذه.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
يؤدي الاتصال بـ verifyPhoneNumber
باستخدام رقم وهمي إلى تشغيل
رقم معاودة الاتصال onCodeSent
، والذي سيكون عليك فيه تقديم إثبات الملكية المناسب
الرمز. يتيح ذلك إجراء الاختبارات في "محاكيات Android".
Java
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(@NonNull String verificationId, @NonNull 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(@NonNull PhoneAuthCredential phoneAuthCredential) { // Sign in with the credential // ... } @Override public void onVerificationFailed(@NonNull 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)
بالإضافة إلى ذلك، يمكنك اختبار تدفقات الاسترداد التلقائي في Android عن طريق تعيين رقم وهمي
رمز التحقق المقابل لها لاسترداد البيانات تلقائيًا عن طريق استدعاء
setAutoRetrievedSmsCodeForPhoneNumber
عندما يكون verifyPhoneNumber
هذا ما يُطلق عليه، يؤدي إلى تشغيل onVerificationCompleted
مع PhoneAuthCredential
مباشرةً. لا تعمل هذه الميزة إلا مع أرقام الهواتف الوهمية.
احرص على إيقاف هذا الإعداد ومن عدم تضمين أرقام هواتف وهمية في الترميز الثابت في تطبيقك عند نشره على متجر Google Play.
Java
// 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(@NonNull 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 Realtime Database وCloud Storage قواعد الأمان، تتيح لك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغير
auth
، واستخدامها للتحكم في البيانات التي يمكن للمستخدم الوصول إليها
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طرق مصادقة متعددة. موفِّري خدمة المصادقة من خلال ربط بيانات اعتماد موفر المصادقة حساب مستخدم حالي
لتسجيل خروج مستخدم، اتصل بالرقم
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();