אמת באמצעות Firebase באנדרואיד באמצעות מספר טלפון

תוכל להשתמש באימות Firebase כדי להיכנס למשתמש על ידי שליחת הודעת SMS לטלפון של המשתמש. המשתמש נכנס באמצעות קוד חד פעמי הכלול בהודעת ה- SMS.

הדרך הקלה ביותר להוסיף נכנסה באמצעות מספר הטלפון שלך לאפליקציה להשתמש FirebaseUI , הכולל ירידה ב-כניסת יישומון מיישמת כניסת תזרים עבור מספר טלפון כניסה, כמו גם מבוסס סיסמא סימן Federated -ב. מסמך זה מתאר כיצד ליישם זרימת כניסה למספר טלפון באמצעות SDK Firebase.

לפני שאתה מתחיל

  1. אם לא עשית זאת עדיין, להוסיף Firebase לפרויקט Android שלך .
  2. באמצעות BOM אנדרואיד Firebase , להכריז על התלות של הספרייה אנדרואיד אימות Firebase במודול שלך (ברמת האפליקציה) קובץ 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'
    }
    

    באמצעות Firebase אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד Firebase.

    (אלטרנטיבי) הצהר תלות הספרייה Firebase ללא שימוש BOM

    אם תבחר לא להשתמש ב- Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

    שים לב שאם אתה משתמש בספריות 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'
    }
    

    קוטלין+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'
    }
    

    באמצעות Firebase אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד Firebase.

    (אלטרנטיבי) הצהר תלות הספרייה Firebase ללא שימוש BOM

    אם תבחר לא להשתמש ב- Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

    שים לב שאם אתה משתמש בספריות 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. אם עדיין לא מחוברת האפליקציה שלך לפרויקט Firebase שלך, לעשות זאת מתוך קונסולת Firebase .
  4. אם עדיין לא הגדרת חשיש SHA-1 של האפליקציה שלך בחנות קונסולת Firebase , לעשות זאת. ראה אימות הלקוח שלך עבור מידע על מציאת חשיש SHA-1 של האפליקציה שלך.

חששות אבטחה

אימות באמצעות מספר טלפון בלבד, בעוד שהוא נוח, הוא פחות מאובטח משאר השיטות הקיימות, מכיוון שניתן להחזיק מספר טלפון בקלות בין משתמשים. כמו כן, במכשירים עם פרופילי משתמשים מרובים, כל משתמש שיכול לקבל הודעות SMS יכול להיכנס לחשבון באמצעות מספר הטלפון של המכשיר.

אם אתה משתמש בכניסה מבוססת מספר טלפון באפליקציה שלך, עליך להציע אותה לצד שיטות כניסה מאובטחות יותר, ולהודיע ​​למשתמשים על פשרות האבטחה בשימוש בכניסה למספרי טלפון.

אפשר כניסה למספר טלפון לפרויקט Firebase שלך

כדי להיכנס למשתמשים באמצעות SMS, עליך להפעיל תחילה את שיטת הכניסה למספר טלפון עבור פרויקט Firebase שלך:

  1. בשנות ה קונסולת Firebase , פתח את הקטע אימות.
  2. בדף הכניסה של שיטה, לאפשר כניסת מספר טלפון שיטה.

מכסת בקשת הכניסה למספר הטלפון של Firebase גבוהה מספיק כדי שרוב האפליקציות לא יושפעו. עם זאת, אם אתה צריך להיכנס להרבה מאוד משתמשים עם אימות טלפוני, ייתכן שיהיה עליך לשדרג את תוכנית התמחור שלך. עיין תמחור הדף.

אפשר אימות אפליקציה

כדי להשתמש באימות מספר טלפון, Firebase חייב להיות מסוגל לאמת שבקשות כניסה למספר טלפון מגיעות מהאפליקציה שלך. ישנן שתי דרכים לאימות Firebase להשיג זאת:

  • SafetyNet: אם למשתמש יש מכשיר עם שירותי Google Play המותקן, ו Firebase אימות תוכל לוודא שמכשיר כלגיטימי עם אנדרואיד SafetyNet , מספר טלפון כניסה יכולה להמשיך.
  • כדי לאפשר את SafetyNet לשימוש עם אימות Firebase:

    1. במסוף קלאוד גוגל, לאפשר API אנדרואיד DeviceCheck עבור הפרויקט שלך. ישתמש במפתח ברירת המחדל של Firebase API ויש לאפשר לו גישה ל- DeviceCheck API.
    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 יכולה גם להיות מקומית על ידי ציון שפת auth דרך setLanguageCode השיט על מופע המחבר שלך.

ג'אווה

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

קוטלין+KTX

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

כאשר אתה קורא PhoneAuthProvider.verifyPhoneNumber , אתה חייב גם לספק מופע של OnVerificationStateChangedCallbacks , אשר מכיל מימושים של פונקציות callback כי להתמודד עם התוצאות של הבקשה. לדוגמה:

ג'אווה

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;
    }
};

קוטלין+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 (אימות מחרוזת, PhoneAuthProvider.ForceResendingToken)

אופציונאלי. שיטה זו נקראת לאחר שליחת קוד האימות באמצעות SMS למספר הטלפון שסופק.

כאשר נקראת שיטה זו, רוב האפליקציות מציגות ממשק משתמש המבקש מהמשתמש להקליד את קוד האימות מהודעת ה- SMS. (במקביל, אוטומטית אימות עלולה להיות שתמשיך ברקע.) ואז, לאחר שהמשתמש מקליד את קוד האימות, אתה יכול להשתמש בקוד האימות מזהה האימות שהועבר השיטה ליצור PhoneAuthCredential אובייקט, אשר אתה יכול להשתמש בכניסה למשתמש. עם זאת, כמה אפליקציות כדאי שתחכה עד onCodeAutoRetrievalTimeOut נקרא לפני הצגת UI קוד אימות (לא מומלץ).

onCodeAutoRetrievalTimeOut (אימות מחרוזת)

אופציונאלי. שיטה זו נקראת לאחר משך הזמן קצוב שצוין verifyPhoneNumber עבר ללא onVerificationCompleted המפעילה ראשונה. במכשירים ללא כרטיסי SIM, שיטה זו נקראת באופן מיידי מכיוון שלא ניתן לאחזר SMS אוטומטית.

חלק מהאפליקציות חוסמות את קלט המשתמש עד שתקופת הזמן של האימות האוטומטי פג, ורק לאחר מכן מציגות ממשק משתמש המבקש מהמשתמש להקליד את קוד האימות מהודעת ה- SMS (לא מומלץ).

צור אובייקט PhoneAuthCredential

לאחר שהמשתמש מזין את קוד אימות Firebase שנשלחה לטלפון הנייד של המשתמש, ליצור PhoneAuthCredential אובייקט, בעזרת קוד האימות מזהה האימות כי הועברה onCodeSent או onCodeAutoRetrievalTimeOut ההתקשרות. (כאשר onVerificationCompleted נקרא, אתה מקבל PhoneAuthCredential אובייקט ישירות, כך שאתה יכול לדלג על שלב זה.)

כדי ליצור את PhoneAuthCredential אובייקט, קוראים PhoneAuthProvider.getCredential :

ג'אווה

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

קוטלין+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
                        }
                    }
                }
            });
}

קוטלין+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 או אמולטור אנדרואיד ללא שירותי Google Play.
  • כתוב בדיקות אינטגרציה מבלי להיחסם על ידי בדיקות אבטחה המופעלות בדרך כלל על מספרי טלפון אמיתיים בסביבת ייצור.

מספרי טלפון בדיוניים חייבים לעמוד בדרישות הבאות:

  1. הקפד להשתמש במספרי טלפון שהם אכן בדיוניים, ואינם קיימים כבר. אימות Firebase אינו מאפשר לך להגדיר מספרי טלפון קיימים המשמשים משתמשים אמיתיים כמספרי בדיקה. אפשרות אחת היא להשתמש 555 מספרים ולפניה כמספרי טלפון המבחן האמריקאי, למשל: 1 650-555-3434
  2. יש לעצב את מספרי הטלפון בצורה הנכונה באורך ובאילוצים אחרים. הם עדיין יעברו את אותו אימות כמו מספר הטלפון של משתמש אמיתי.
  3. ניתן להוסיף עד 10 מספרי טלפון לפיתוח.
  4. השתמש במספרי טלפון/קודי בדיקה שקשה לנחש ושנה אותם לעתים קרובות.

צור מספרי טלפון בדיוניים וקודי אימות

  1. בשנות ה קונסולת Firebase , פתח את קטע האימות.
  2. במזל בלשונית השיטה, לאפשר ספקית טלפון אם עדיין אין לך חשבון.
  3. פתח את מספרי הטלפון לבדיקת תפריט אקורדיון.
  4. ספקו את מספר הטלפון שאתה רוצה לבדוק, למשל: 1 650-555-3434.
  5. לספק את קוד אימות 6 ספרות עבור מספר מסוים, למשל: 654,321.
  6. מוסיפים את המספר. אם יש צורך, תוכל למחוק את מספר הטלפון והקוד שלו על ידי ריחוף מעל השורה המתאימה ולחיצה על סמל האשפה.

בדיקה ידנית

אתה יכול להתחיל להשתמש ישירות במספר טלפון בדיוני ביישום שלך. זה מאפשר לך לבצע בדיקות ידניות בשלבי פיתוח מבלי להיתקל בבעיות מכסה או חנק. אתה יכול גם לבדוק ישירות מתוך סימולטור iOS או אמולטור אנדרואיד ללא מותקן שירותי Google Play.

כאשר אתה מספק את מספר הטלפון הבדיוני ושולח את קוד האימות, לא נשלח SMS בפועל. במקום זאת, עליך לספק את קוד האימות שהוגדר בעבר כדי להשלים את הכניסה.

בסיום הכניסה, נוצר משתמש Firebase עם מספר הטלפון הזה. למשתמש יש את אותה התנהגות ומאפיינים כמו משתמש במספר טלפון אמיתי, והוא יכול לגשת למסד נתונים בזמן אמת/Firestore בענן ולשירותים אחרים באותה הדרך. לאסימון הזהות שהוטבע במהלך תהליך זה יש אותה חתימה כמו משתמש מספר טלפון אמיתי.

אפשרות נוספת היא להגדיר תפקיד בדיקה באמצעות טענות מנהג על משתמשים אלה כדי לבדל אותם כמשתמשים מזויפים אם אתה רוצה להגביל את הגישה נוספת.

כדי הפעלה ידנית של reCAPTCHA לזרום לבדיקה, להשתמש forceRecaptchaFlowForTesting() השיטה.

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

בדיקות אינטגרציה

בנוסף לבדיקות ידניות, אימות Firebase מספק ממשקי API המסייעים בכתיבת בדיקות אינטגרציה לבדיקת אימות טלפוני. ממשקי API אלה משביתים את אימות האפליקציות על ידי השבתת דרישת reCAPTCHA באינטרנט והתראות דחיפה שקטות ב- iOS. זה מאפשר בדיקות אוטומציה בזרימות אלה וקלות יותר ליישום. בנוסף, הם עוזרים לספק את היכולת לבדוק זרימות אימות מיידיות ב- Android.

ב Android, השיחה setAppVerificationDisabledForTesting() לפני signInWithPhoneNumber השיחה. זה מבטל את אימות האפליקציה באופן אוטומטי, ומאפשר לך להעביר את מספר הטלפון מבלי לפתור אותו באופן ידני. שים לב שלמרות ש- reCAPTCHA ו/או SafetyNet מושבתים, השימוש במספר טלפון אמיתי עדיין לא יצליח להשלים את הכניסה. ניתן להשתמש רק במספרי טלפון בדיוניים עם ה- API הזה.

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

שיחות verifyPhoneNumber עם מספר בדוי מפעילה את onCodeSent ההתקשרות, שבו תצטרך לספק את קוד האימות המתאימה. זה מאפשר בדיקות במאמצי אנדרואיד.

ג'אווה

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)

בנוסף, אתה יכול לבדוק תזרימי אחזור אוטומטי ב- Android על ידי קביעת מספר בדוי וקוד אימות המקביל שלה למטרות אחזור אוטומטי על ידי התקשרות 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);

קוטלין+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 משתנה, ולהשתמש בו כדי לקבוע אילו נתונים גישה יכול משתמש.

תוכל לאפשר למשתמשים להיכנס לאפליקציה שלך דרך ספקי אימות מרובים על ידי מקשר auth אישורי ספק לחשבון משתמש קיים.

כדי לצאת מהחשבון משתמש, קוראים signOut :

ג'אווה

FirebaseAuth.getInstance().signOut();

קוטלין+KTX

Firebase.auth.signOut()