Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
דף זה תורגם על ידי Cloud Translation API.
Switch to English

אמת עם Firebase באמצעות מספר טלפון ו- C ++

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

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

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

  1. הוסף את Firebase לפרויקט C ++ שלך .
  2. אם עדיין לא חיברת את האפליקציה שלך לפרויקט Firebase שלך, עשה זאת ממסוף Firebase .

ב- iOS, שים לב שכניסה למספר טלפון דורשת מכשיר פיזי ולא תפעל בסימולטור.

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

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

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

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

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

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

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

התחל לקבל התראות APN (iOS)

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

להפעלת התראות APN לשימוש עם אימות Firebase:

  1. ב- Xcode, הפעל הודעות דחיפה לפרויקט שלך.
  2. העלה את אישור ה- APN שלך ל- Firebase. אם עדיין אין לך אישור APNs, ראה הקצאת אישורי SSL של APNs .

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

    2. בחר בלחצן העלה אישור עבור אישור הפיתוח שלך, אישור הייצור שלך או שניהם. לפחות אחד נדרש.

    3. עבור כל אישור בחר בקובץ .p12 וספק את הסיסמה, אם קיימת. ודא שמזהה החבילה עבור אישור זה תואם את מזהה החבילה של האפליקציה שלך. בחר שמור .

שלח קוד אימות לטלפון המשתמש

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

  1. קבל את מספר הטלפון של המשתמש.

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

  2. התקשר ל- PhoneAuthProvider::VerifyPhoneNumber , והעביר אליו את מספר הטלפון של המשתמש.
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(Credential credential) override {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // No need for the user to input the verification code manually.
        // `credential` can be used instead of calling GetCredential().
      }
    
      void OnVerificationFailed(const std::string& error) override {
        // Verification code not sent.
      }
    
      void OnCodeSent(const std::string& verification_id,
                      const PhoneAuthProvider::ForceResendingToken&
                          force_resending_token) override {
        // Verification code successfully sent via SMS.
        // Show the Screen to enter the Code.
        // Developer may want to save that verification_id along with other app states in case
        // the app is terminated before the user gets the SMS verification code.
      }
    };
    
    PhoneListener phone_listener;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(phone_number, kAutoVerifyTimeOut, null,
                                      &phone_listener);
    
    כשאתה מתקשר ל- PhoneAuthProvider::VerifyPhoneNumber , Firebase,
    • (ב- iOS) שולח הודעת דחיפה שקטה לאפליקציה שלך,
    • שולח הודעת SMS המכילה קוד אימות למספר הטלפון שצוין ומעביר מזהה אימות לפונקציית ההשלמה שלך. תצטרך גם את קוד האימות וגם את מזהה האימות כדי להיכנס למשתמש.
  3. שמור את מזהה האימות ושחזר אותו כאשר האפליקציה שלך נטענת. על ידי כך, אתה יכול להבטיח שעדיין יהיה לך מזהה אימות חוקי אם האפליקציה שלך הופסקה לפני שהמשתמש ישלים את זרימת הכניסה (למשל, בעת מעבר לאפליקציית SMS).

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

אם הקריאה ל- VerifyPhoneNumber מביאה להתקשרות VerifyPhoneNumber OnCodeSent שלך, תוכל להנחות את המשתמש להקליד את קוד האימות כאשר הוא מקבל אותו בהודעת ה- SMS.

מצד השני, אם קריאת VerifyPhoneNumber תוצאות OnVerificationCompleted , אז אימות אוטומטית הצליחה ואתה עכשיו יש Credential שבה ניתן להשתמש כמתואר להלן.

היכנס למשתמש באמצעות קוד האימות

לאחר שהמשתמש מספק לאפליקציה שלך את קוד האימות מהודעת ה- SMS, היכנס למשתמש על ידי יצירת אובייקט Credential מקוד האימות ומזהה האימות Auth::SignInWithCredential אובייקט ל- Auth::SignInWithCredential .

  1. קבל את קוד האימות מהמשתמש.
  2. צור אובייקט Credential מקוד האימות ומזהה האימות.
    Credential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. כניסה למשתמש עם Credential האובייקט:
    Future<User*> future = auth_->SignInWithCredential(credential);
    future.OnCompletion(
        [](const Future<User*>& result, void*) {
          if (result.error() == kAuthErrorNone) {
            // Successful.
            // User is signed in.
            const User* user = *result.result();
    
            // This should display the phone number.
            printf("Phone number: %s", user->phone_number().c_str());
    
            // The phone number provider UID is the phone number itself.
            printf("Phone provider uid: %s", user->uid().c_str());
    
            // The phone number providerID is 'phone'
            printf("Phone provider ID: %s", user->provider_id().c_str());
          } else {
            // Error.
            printf("Sign in error: %s", result.error_message().c_str());
          }
        },
        nullptr);
    

הצעדים הבאים

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

  • באפליקציות שלך תוכל לקבל את פרטי הפרופיל הבסיסי של המשתמש מ- firebase::auth::User אובייקט firebase::auth::User :

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • במסד הנתונים שלך בזמן אמת של Firebase ובכללי האבטחה של אחסון ענן, אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש auth ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

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

כדי לצאת ממשתמש, התקשר ל- SignOut() :

auth->SignOut();