با استفاده از شماره تلفن با Firebase در Android احراز هویت کنید

برای ورود به سیستم کاربر با ارسال پیام کوتاه به تلفن کاربر ، می توانید از احراز هویت Firebase استفاده کنید. کاربر با استفاده از کد یکبار موجود در پیام کوتاه وارد سیستم می شود.

ساده ترین راه برای اضافه کردن شماره تلفن ورود به سیستم برای برنامه خود را به استفاده FirebaseUI ، که شامل یک قطره در ورود به سیستم ویدجت است که پیاده سازی جریانهای ورود به سیستم برای شماره تلفن ورود به سیستم، و همچنین مبتنی بر رمز عبور و ورود به سیستم فدرال -که در. این سند نحوه پیاده سازی جریان ورود شماره تلفن با استفاده از Firebase SDK را توضیح می دهد.

قبل از اینکه شروع کنی

  1. اگر شما در حال حاضر، اضافه فایربیس به پروژه آندروید خود را .
  2. با استفاده از فایربیس آندروید BOM ، اعلام وابستگی برای کتابخانه فایربیس احراز هویت آندروید در ماژول خود را (در سطح برنامه) فایل Gradle (معمولا app/build.gradle ).

    جاوا

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

    با استفاده از فایربیس آندروید BOM ، برنامه شما همیشه نسخه های سازگار با کتابخانه فایربیس آندروید استفاده خواهد کرد.

    (جایگزین) اعلام فایربیس وابستگی کتابخانه بدون استفاده از BOM

    در صورت عدم استفاده از Firebase BoM ، باید هر نسخه کتابخانه Firebase را در خط وابستگی مشخص کنید.

    توجه داشته باشید که در صورت استفاده از کتابخانه فایربیس های متعدد در برنامه شما، ما به شدت توصیه با استفاده از BOM به مدیریت نسخه های کتابخانه، که تضمین می کند که تمام نسخه های سازگار است.

    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.1')
    
        // 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'
    }
    

    با استفاده از فایربیس آندروید BOM ، برنامه شما همیشه نسخه های سازگار با کتابخانه فایربیس آندروید استفاده خواهد کرد.

    (جایگزین) اعلام فایربیس وابستگی کتابخانه بدون استفاده از BOM

    در صورت عدم استفاده از Firebase BoM ، باید هر نسخه کتابخانه Firebase را در خط وابستگی مشخص کنید.

    توجه داشته باشید که در صورت استفاده از کتابخانه فایربیس های متعدد در برنامه شما، ما به شدت توصیه با استفاده از BOM به مدیریت نسخه های کتابخانه، که تضمین می کند که تمام نسخه های سازگار است.

    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. اگر هنوز برنامه خود را متصل به پروژه فایربیس شما نیست، انجام این کار از کنسول فایربیس .
  4. اگر شما در حال حاضر برنامه شما الگوریتم SHA-1 در تنظیم نشده فایربیس کنسول ، انجام این کار. مشاهده تأیید اعتبار مشتری خود را برای اطلاعات در مورد پیدا کردن برنامه شما الگوریتم SHA-1.

نگرانی های امنیتی

احراز هویت تنها با استفاده از یک شماره تلفن ، در حالی که راحت است ، اما از سایر روش های موجود ایمن تر نیست ، زیرا داشتن شماره تلفن به راحتی بین کاربران منتقل می شود. همچنین ، در دستگاه های دارای چندین نمایه کاربر ، هر کاربری که می تواند پیامک دریافت کند می تواند با استفاده از شماره تلفن دستگاه وارد حساب کاربری شود.

اگر در برنامه خود از ورود به سیستم با شماره تلفن استفاده می کنید ، باید آن را در کنار روشهای ورود به سیستم ایمن تر ارائه دهید و کاربران را از معاملات امنیتی استفاده از ورود به سیستم شماره تلفن مطلع کنید.

ورود به سیستم شماره تلفن را برای پروژه Firebase خود فعال کنید

برای ورود کاربران از طریق پیامک ، ابتدا باید روش ورود شماره تلفن را برای پروژه Firebase خود فعال کنید:

  1. در فایربیس کنسول ، باز کردن بخش احراز هویت.
  2. در صفحه ی ثبت نام در روش، فعال کردن شماره تلفن ثبت نام در روش.

سهمیه درخواست ورود به سیستم شماره تلفن Firebase آنقدر زیاد است که اکثر برنامه ها تحت تأثیر قرار نمی گیرند. با این حال ، اگر نیاز دارید با احراز هویت تلفن وارد حجم زیادی از کاربران شوید ، ممکن است لازم باشد طرح قیمت گذاری خود را ارتقا دهید. مراجعه کنید قیمت گذاری صفحه.

تأیید برنامه را فعال کنید

برای استفاده از احراز هویت شماره تلفن ، Firebase باید بتواند تأیید کند که درخواست های ورود به سیستم از طریق برنامه شما وارد شده است. دو راه برای احراز هویت Firebase وجود دارد:

  • SafetyNet: اگر یک کاربر به یک دستگاه با خدمات Google Play نصب و فایربیس احراز هویت می توانید دستگاه را به عنوان مشروع با بررسی آندروید SafetyNet ، شماره تلفن ورود به سیستم می توانید ادامه دهید.
  • برای فعال کردن SafetyNet برای استفاده با احراز هویت Firebase:

    1. در ابر کنسول گوگل، فعال کردن API آندروید DeviceCheck برای پروژه شما. کلید پیش فرض API Firebase مورد استفاده قرار می گیرد و باید اجازه دسترسی به API DeviceCheck را داشته باشد.
    2. اگر هنوز مشخص برنامه خود را SHA-256 اثر انگشت نیست، این کار را از تنظیمات صفحه از کنسول فایربیس. برای اشاره تأیید اعتبار مشتری خود را برای جزئیات بیشتر در مورد چگونگی گرفتن برنامه خود را SHA-256 اثر انگشت.
  • تایید reCAPTCHA را: در صورتی که SafetyNet نمی توان استفاده کرد، مانند زمانی که کاربر را ندارد خدمات Google Play پشتیبانی، و یا در هنگام تست برنامه خود را بر روی شبیه ساز، فایربیس احراز هویت با استفاده از یک تایید از reCAPTCHA برای تکمیل ثبت نام در تلفن جریان. چالش reCAPTCHA اغلب می تواند بدون نیاز به حل مشکل توسط کاربر تکمیل شود. لطفاً توجه داشته باشید که این جریان مستلزم آن است که SHA-1 با برنامه شما مرتبط باشد.

کد تأیید را به تلفن کاربر ارسال کنید

برای شروع ورود به سیستم شماره تلفن ، رابطی را به کاربر ارائه دهید که از او بخواهد شماره تلفن خود را تایپ کند. الزامات قانونی متفاوت است ، اما به عنوان بهترین روش و برای ایجاد انتظارات برای کاربران ، باید به آنها اطلاع دهید که اگر از ورود به سیستم تلفن استفاده می کنند ، ممکن است پیامکی برای تأیید دریافت کنند و نرخ های استاندارد اعمال می شود.

سپس، عبور شماره تلفن خود را به PhoneAuthProvider.verifyPhoneNumber روش به درخواست که فایربیس منظور بررسی شماره تلفن کاربر است. مثلا:

جاوا

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 روش را reentrant است: اگر شما آن را چندین بار، از جمله در یک فعالیت است onStart روش، verifyPhoneNumber روش یک اس ام اس دوم ارسال نشود مگر اینکه درخواست اصلی به پایان رسیده است.

اگر برنامه شما قبل از ورود کاربر به سیستم بسته شد (برای مثال ، در حالی که کاربر از برنامه پیام کوتاه خود استفاده می کند) ، می توانید از این رفتار برای از سرگیری ورود به سیستم شماره تلفن استفاده کنید. پس از شما پاسخ verifyPhoneNumber ، مجموعه پرچم که نشان می دهد تأیید در حال انجام است. سپس، صرفه جویی پرچم در فعالیت خود را onSaveInstanceState روش و بازگرداندن پرچم در onRestoreInstanceState . در نهایت، در فعالیت خود را onStart روش، بررسی کنید که تایید در حال انجام است، و اگر چنین است، پاسخ verifyPhoneNumber دوباره. مطمئن باشید که برای روشن شدن پرچم که تکمیل تأیید و یا نتواند (نگاه کنید به تماس مجدد تأیید ).

به راحتی چرخش صفحه نمایش و موارد دیگر از راه اندازی مجدد فعالیت، تصویب فعالیت خود را به verifyPhoneNumber روش. هنگامی که Activity متوقف می شود ، فراخوان ها به صورت خودکار جدا می شوند ، بنابراین می توانید آزادانه کد انتقال UI را در روشهای فراخوانی بنویسید.

پیام کوتاه ارسال شده توسط فایربیس همچنین می توانید با مشخص زبان تایید از طریق موضعی شود 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 اس ام اس سگ شکاری ، که شامل یک هش 11 شخصیت در پایان پیام SMS.
در هر صورت، شماره تلفن کاربر با موفقیت تایید شده است، و شما می توانید با استفاده از PhoneAuthCredential شی که به پاسخ به تماس گذشت به سیستم وارد شوید کاربر .

onVerificationFailed (FirebaseException)

این روش در پاسخ به درخواست تأیید نامعتبر ، مانند درخواستی که شماره تلفن یا کد تأیید نامعتبر را مشخص می کند ، فراخوانی می شود.

onCodeSent (String verificationId، PhoneAuthProvider.ForceResendingToken)

اختیاری. این روش پس از ارسال کد تأیید توسط پیامک به شماره تلفن ارائه شده فراخوانی می شود.

هنگامی که این روش فراخوانی می شود ، اکثر برنامه ها یک UI نمایش می دهند که از کاربر می خواهد کد تأیید را از پیام SMS تایپ کند. (در همان زمان، خودکار تأیید ممکن است در پس زمینه ادامه دارد.) سپس، پس از که کاربر کد امنیتی، شما می توانید کد امنیتی و ID تأییدی را که به ایجاد یک به روش تصویب شد استفاده PhoneAuthCredential جسم، که شما می توانید به نوبه خود برای ورود به سیستم کاربر استفاده کنید. با این حال، برخی از برنامه های ممکن است تا صبر onCodeAutoRetrievalTimeOut است قبل از نمایش UI کد امنیتی به نام (توصیه نمی شود).

onCodeAutoRetrievalTimeOut (تأیید رشته)

اختیاری. این روش به نام پس از مدت زمان مشخص شده برای ایست verifyPhoneNumber بدون گذشت onVerificationCompleted اول تحریک. در دستگاههای بدون سیم کارت ، این روش بلافاصله فراخوانی می شود زیرا بازیابی خودکار پیامک امکان پذیر نیست.

برخی از برنامه ها تا زمانی که دوره تأیید خودکار به پایان نرسیده است ، ورودی کاربر را مسدود می کنند و تنها پس از آن یک UI نمایش می دهد که از کاربر می خواهد کد تأیید را از پیام SMS تایپ کند (توصیه نمی شود).

یک شیء PhoneAuthCredential ایجاد کنید

بعد که کاربر وارد کد تأییدی را که فایربیس به تلفن کاربر ارسال، ایجاد یک 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 تنظیم کنید. آزمایش با شماره تلفن های خیالی مزایای زیر را ارائه می دهد:

  • احراز هویت شماره تلفن را بدون مصرف سهمیه استفاده خود آزمایش کنید.
  • تأیید شماره تلفن را بدون ارسال پیام کوتاه واقعی آزمایش کنید.
  • آزمایش های متوالی را با شماره تلفن یکسان بدون ضربه زدن انجام دهید. اگر مرورگر از شماره تلفن یکسانی برای آزمایش استفاده کند ، خطر رد شدن در طی فرآیند بررسی فروشگاه App را به حداقل می رساند.
  • به راحتی در محیط های توسعه بدون هیچ گونه تلاش اضافی ، مانند توانایی توسعه در شبیه ساز iOS یا شبیه ساز Android بدون خدمات Google Play ، آزمایش کنید.
  • تست های ادغام را بدون مانع شدن توسط چک های امنیتی که معمولاً بر روی شماره تلفن های واقعی در محیط تولید اعمال می شود ، بنویسید.

شماره تلفن های تخیلی باید شرایط زیر را داشته باشند:

  1. مطمئن شوید که از شماره تلفن هایی استفاده می کنید که واقعاً تخیلی هستند و در حال حاضر وجود ندارند. احراز هویت Firebase به شما اجازه نمی دهد شماره تلفن های موجود را که توسط کاربران واقعی استفاده می شود به عنوان شماره آزمایشی تنظیم کنید. یک گزینه این است به استفاده از 555 عدد پیشوند شماره تلفن آزمایش ایالات متحده، برای مثال: 1 650-555-3434
  2. شماره تلفن ها باید به درستی برای طول و سایر محدودیت ها قالب بندی شوند. آنها همچنان از اعتبار سنجی شماره تلفن کاربر واقعی برخوردار خواهند بود.
  3. برای توسعه می توانید حداکثر 10 شماره تلفن اضافه کنید.
  4. از شماره تلفن ها/کدهایی که حدس زدن آنها دشوار است استفاده کنید و آنها را به طور مکرر تغییر دهید.

ایجاد شماره تلفن های تخیلی و کدهای تأیید

  1. در فایربیس کنسول ، باز کردن بخش احراز هویت.
  2. در ثبت نام در تب روش، فعال ارائه دهنده تلفن اگر شما در حال حاضر نیست.
  3. برای تست منوی آکاردئونی باز شماره تلفن.
  4. ارائه شماره تلفن شما را به آزمون می خواهید، برای مثال: 1 650-555-3434.
  5. ارائه کد تأیید 6 رقمی که شماره های خاص، برای مثال: 654321.
  6. اضافه کردن شماره. در صورت نیاز ، می توانید شماره تلفن و کد آن را با قرار دادن نشانگر روی ردیف مربوطه و کلیک روی نماد سطل زباله حذف کنید.

تست دستی

می توانید مستقیماً از یک شماره تلفن خیالی در برنامه خود استفاده کنید. این به شما این امکان را می دهد که در مراحل توسعه ، بدون دستیابی به مشکلات سهمیه بندی یا فشار گاز ، آزمایش دستی انجام دهید. همچنین می توانید مستقیماً از شبیه ساز iOS یا شبیه ساز Android بدون نصب سرویس Google Play تست کنید.

وقتی شماره تلفن داستانی را ارائه می دهید و کد تأیید را ارسال می کنید ، هیچ پیامک واقعی ارسال نمی شود. در عوض ، برای تکمیل ورود به سیستم ، باید کد تأیید پیکربندی شده قبلی را ارائه دهید.

پس از اتمام ورود به سیستم ، یک کاربر Firebase با آن شماره تلفن ایجاد می شود. کاربر همان رفتار و ویژگی های یک کاربر شماره تلفن واقعی را دارد و می تواند به همان روش به پایگاه داده Realtime/Cloud Firestore و سایر خدمات دسترسی پیدا کند. شناسه توکنی که طی این فرایند ضبط شده است دارای امضای مشابه یک کاربر شماره تلفن واقعی است.

یکی دیگر از گزینه تنظیم یک نقش آزمون از طریق ادعاهای سفارشی در این کاربران به آنها را متمایز به عنوان کاربران جعلی اگر شما می خواهید برای محدود کردن بیشتر دسترسی داشته باشید.

به صورت دستی باعث جریان reCAPTCHA را برای آزمایش، استفاده از forceRecaptchaFlowForTesting() روش.

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

آزمایش ادغام

علاوه بر آزمایش دستی ، تأیید هویت Firebase API هایی را برای کمک به نوشتن تست های ادغام برای تست تأیید تلفن ارائه می دهد. این API ها با غیرفعال کردن نیاز reCAPTCHA در وب و اعلان های فشار بی صدا در iOS ، تأیید برنامه را غیرفعال می کنند. این امر آزمایش اتوماسیون را در این جریانها ممکن کرده و پیاده سازی آن را آسان تر می کند. علاوه بر این ، آنها به شما امکان می دهند جریانهای تأیید فوری را در Android آزمایش کنید.

در آندروید، پاسخ setAppVerificationDisabledForTesting() قبل از signInWithPhoneNumber پاسخ. این کار تأیید برنامه را به طور خودکار غیرفعال می کند و به شما امکان می دهد شماره تلفن را بدون حل دستی آن ارسال کنید. توجه داشته باشید که حتی اگر reCAPTCHA و/یا SafetyNet غیرفعال باشند ، استفاده از یک شماره تلفن واقعی هنوز در ورود به سیستم کامل نمی شود. فقط شماره تلفن های تخیلی را می توان با این API استفاده کرد.

// 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 شی. مشاهده مدیریت کاربران .

  • در خود پایگاه فایربیس بیدرنگ و ابر ذخیره سازی قوانین امنیتی ، شما می توانید دریافت امضا در شناسه کاربری منحصر به فرد کاربر را از auth متغیر، و استفاده از آن برای کنترل آنچه داده دسترسی کاربر می تواند.

شما می توانید اجازه به کاربران برای ورود به سیستم برنامه خود را با استفاده از ارائه دهندگان تأیید هویت چندگانه توسط ارتباط تایید اعتبار ارائه دهنده به یک حساب کاربری موجود.

برای خروج از سیستم یک کاربر، پاسخ signOut :

جاوا

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()