Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

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

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

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

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

  1. אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך .
  2. באמצעות Firebase Android BoM , הצהיר על התלות בספריית Android של אימות Firebase במודול שלך (ברמת האפליקציה) בקובץ Gradle (בדרך כלל app/build.gradle ).

    ג'אווה

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.0.0')
    
        // 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 Android BoM , האפליקציה שלך תשתמש תמיד בגרסאות תואמות של ספריות Android של 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:20.0.4'
    }
    

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:27.0.0')
    
        // 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 Android BoM , האפליקציה שלך תשתמש תמיד בגרסאות תואמות של ספריות Android של 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:20.0.4'
    }
    
  3. אם עדיין לא חיברת את האפליקציה שלך לפרויקט Firebase שלך, עשה זאת ממסוף Firebase .
  4. אם עדיין לא הגדרת את ה- SHA-1 של האפליקציה שלך במסוף Firebase , עשה זאת. ראה אימות הלקוח שלך למידע על מציאת ה- SHA-1 של האפליקציה שלך.

חששות ביטחוניים

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

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

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

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

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

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

הפעל אימות אפליקציה

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

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

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

ניתן למקם את הודעת ה- SMS שנשלחה על ידי Firebase על ידי ציון שפת האימות באמצעות שיטת setLanguageCode במופע Auth שלך.

ג'אווה

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 , המכיל יישומים של פונקציות 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 onVerificationCompleted , onVerificationFailed ו- onCodeSent . אתה יכול גם ליישם onCodeAutoRetrievalTimeOut , בהתאם לדרישות האפליקציה שלך.

onVerificationCompleted (PhoneAuthCredential)

שיטה זו נקראת בשני מצבים:

  • אימות מיידי: בחלק מהמקרים ניתן לאמת את מספר הטלפון באופן מיידי ללא צורך לשלוח או להזין קוד אימות.
  • אחזור אוטומטי: במכשירים מסוימים שירותי Google Play יכולים לזהות באופן אוטומטי את הודעת ה- SMS לאימות הנכנס ולבצע אימות ללא פעולת משתמש. (יכולת זו עשויה להיות לא זמינה אצל ספקים מסוימים).
בשני המקרים, מספר הטלפון של המשתמש אומת בהצלחה, ותוכל להשתמש באובייקט PhoneAuthCredential המועבר להתקשרות חוזרת כדי להיכנס למשתמש .

onVerificationFailed (FirebaseException)

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

onCodeSent (VerificationId String, PhoneAuthProvider.ForceResendingToken)

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

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

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

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

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

צור אובייקט PhoneAuthCredential

לאחר שהמשתמש מזין את קוד האימות ששלחה Firebase לטלפון של המשתמש, צור אובייקט PhoneAuthCredential באמצעות קוד האימות ומזהה האימות שהועבר onCodeSent onCodeAutoRetrievalTimeOut או 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 בפועל.
  • ערכו בדיקות רצופות עם אותו מספר טלפון מבלי להיסגר. זה ממזער את הסיכון לדחייה במהלך תהליך סקירת App Store אם במקרה הסוקר משתמש באותו מספר טלפון לבדיקה.
  • בדוק בקלות בסביבות פיתוח ללא כל מאמץ נוסף, כגון היכולת להתפתח בסימולטור 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 הספרות עבור אותו מספר ספציפי, למשל: 654321 .
  6. הוסף את המספר. אם יש צורך, אתה יכול למחוק את מספר הטלפון ואת הקוד שלו על ידי ריחוף מעל השורה המתאימה ולחץ על סמל האשפה.

בדיקה ידנית

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

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

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

בנוסף, באפשרותך לבדוק את זרימת האחזור האוטומטי ב- Android על ידי הגדרת המספר הבדיוני וקוד האימות המתאים לאחזור אוטומטי על ידי קריאה ל- setAutoRetrievedSmsCodeForPhoneNumber .

כאשר verifyPhoneNumber , הוא מופעל באופן onVerificationCompleted באמצעות 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 ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

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

כדי לצאת ממשתמש, התקשר ל- signOut :

ג'אווה

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()