הוספת Firebase לפרויקט C++

אתם יכולים לשפר את משחקי ה-C++‎ שלכם באמצעות ערכות ה-Firebase C++ SDK, שמספקות ממשק C++‎ בנוסף לערכות ה-Firebase SDK.

אפשר לגשת ל-Firebase ישירות מקוד C++‎, בלי לכתוב קוד Native לפלטפורמה. בנוסף, Firebase SDK מתרגם הרבה ביטויים ספציפיים לשפה שבהם משתמשים ב-Firebase לממשק שמוכר יותר למפתחי C++‎.

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

כבר הוספתם את Firebase לפרויקט C++‎? חשוב לוודא שאתם משתמשים בגרסה העדכנית של ערכת ה-SDK של Firebase C++.


דרישות מוקדמות

  • מתקינים את הכלי המועדף לעריכה או את סביבת הפיתוח המשולבת (IDE), כמו Android Studio,‏ IntelliJ או VS Code.

  • מורידים את Android SDK.

  • חשוב לוודא שהפרויקט עומד בדרישות הבאות:

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

    • אמולטורים חייבים להשתמש בתמונת אמולטור עם Google Play.

    • בחלק מספריות C++‎, נדרש Google Play Services במכשיר הלקוח. עיינו ברשימה שבדף הזה.

  • נכנסים ל-Firebase באמצעות חשבון Google.

שלב 2: יוצרים פרויקט ב-Firebase

כדי להוסיף את Firebase לפרויקט C++‎, צריך ליצור פרויקט Firebase ולקשר אותו לפרויקט C++‎. במאמר הסבר על פרויקטים ב-Firebase תוכלו לקרוא מידע נוסף על פרויקטים ב-Firebase.

שלב 3: רושמים את האפליקציה ב-Firebase

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

  1. נכנסים למסוף Firebase.

  2. במרכז דף הסקירה הכללית של הפרויקט, לוחצים על סמל Android () או על Add app כדי להפעיל את תהליך ההגדרה.

  3. מזינים את שם החבילה של האפליקציה בשדה שם החבילה ב-Android.

  4. (אופציונלי) מזינים כינוי לאפליקציה, שהוא מזהה פנימי ונוח שגלוי רק לכם במסוף Firebase.

  5. לוחצים על Register app.

שלב 4: מוסיפים את קובץ התצורה של Firebase

  1. לוחצים על Download google-services.json כדי לקבל את קובץ התצורה של Firebase ל-Android.

  2. פותחים את פרויקט ה-C++‎ בסביבת פיתוח משולבת (IDE) ומוסיפים את קובץ התצורה לפרויקט:

  3. (רק ב-Gradle) כדי להפעיל את שירותי Firebase בפרויקט C++‎, מוסיפים את הפלאגין של שירותי Google ל-Gradle לקובץ build.gradle ברמה העליונה.

    1. מוסיפים כללים כדי לכלול את הפלאגין של Gradle לשירותי Google. מוודאים שגם מאגר ה-Maven של Google מוגדר.

        buildscript {
      
          repositories {
            // Check that you have the following line (if not, add it):
            google()  // Google's Maven repository
          }
      
          dependencies {
            // ...
      
            // Add the following lines:
            classpath 'com.google.gms:google-services:4.5.0'  // Google services Gradle plugin
            implementation 'com.google.android.gms:18.11.1'
          }
        }
      
        allprojects {
          // ...
      
          repositories {
            // Check that you have the following line (if not, add it):
            google()  // Google's Maven repository
            // ...
          }
        }
      
    2. מפעילים את הפלאגין של שירותי Google ל-Gradle:

        apply plugin: 'com.android.application'
        // Add the following line:
        apply plugin: 'com.google.gms.google-services'  // Google services Gradle plugin
      
        android {
          // ...
        }
      
  4. סיימתם את משימות ההגדרה במסוף Firebase. ממשיכים לקטע הוספת ערכות Firebase C++ SDK שבהמשך.

שלב 5: הוספת ערכות Firebase C++ SDK

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

  1. מורידים את Firebase C++ SDK, ואז מחלצים את קובצי ה-SDK למיקום נוח.

    ערכת ה-SDK של Firebase C++ לא ספציפית לפלטפורמה, אבל היא מכילה ספריות ספציפיות לפלטפורמה.

  2. בקובץ gradle.properties של הפרויקט, מציינים את המיקום של ה-SDK שחולץ:

    systemProp.firebase_cpp_sdk.dir=full-path-to-SDK
  3. מוסיפים את התוכן הבא לקובץ settings.gradle של הפרויקט:

    def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir')
    
    gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir"
    includeBuild "$firebase_cpp_sdk_dir"
  4. מוסיפים את התוכן הבא לקובץ Gradle של המודול (ברמת האפליקציה, בדרך כלל app/build.gradle).
    כוללים את יחסי התלות של הספרייה למוצרי Firebase שבהם רוצים להשתמש באפליקציה.

    ‫Analytics מופעל

    android.defaultConfig.externalNativeBuild.cmake {
    arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
    }
    
    # Add the dependencies for the Firebase products you want to use in your app
    # For example, to use Analytics, Firebase Authentication, and Firebase Realtime Database
    apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
    firebaseCpp.dependencies {
      analytics
      auth
      database
    }

    ‫Analytics לא מופעל

    android.defaultConfig.externalNativeBuild.cmake {
    arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
    }
    
    # Add the dependencies for the Firebase products you want to use in your app
    # For example, to use Firebase Authentication and Firebase Realtime Database
    apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
    firebaseCpp.dependencies {
      auth
      database
    }
  5. מוסיפים את התוכן הבא לקובץ CMakeLists.txt של הפרויקט.
    כוללים את הספריות של מוצרי Firebase שבהם רוצים להשתמש באפליקציה.

    ‫Analytics מופעל

    # Add Firebase libraries to the target using the function from the SDK.
    add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
    
    # The Firebase C++ library `firebase_app` is required,
    # and it must always be listed last.
    
    # Add the Firebase SDKs for the products you want to use in your app
    # For example, to use Analytics, Firebase Authentication, and Firebase Realtime Database
    set(firebase_libs
      firebase_analytics
      firebase_auth
      firebase_database
      firebase_app
    )
    target_link_libraries(${target_name} "${firebase_libs}")

    ‫Analytics לא מופעל

    # Add Firebase libraries to the target using the function from the SDK.
    add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
    
    # The Firebase C++ library `firebase_app` is required,
    # and it must always be listed last.
    
    # Add the Firebase SDKs for the products you want to use in your app
    # For example, to use Firebase Authentication and Firebase Realtime Database
    set(firebase_libs
      firebase_auth
      firebase_database
      firebase_app
    )
    target_link_libraries(${target_name} "${firebase_libs}")
  6. מסנכרנים את האפליקציה כדי לוודא שלכל הרכיבים התלויים יש את הגרסאות הנדרשות.

  7. אם הוספת את Analytics, צריך להפעיל את האפליקציה כדי לשלוח אימות ל-Firebase על כך שהשילוב של Firebase בוצע בהצלחה. אם לא, אפשר לדלג על שלב האימות.

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

הכול מוכן! אפליקציית ה-C++‎ שלכם רשומה ומוגדרת לשימוש בשירותי Firebase.

ספריות זמינות

מידע נוסף על ספריות Firebase ב-C++‎ זמין במאמרי העזרה ובגרסת ה-SDK בקוד פתוח ב-GitHub.

ספריות זמינות ל-Android (באמצעות CMake)

שימו לב שספריות C++‎ לפלטפורמות של אפל מפורטות בגרסת הפלטפורמות של אפל (iOS+) של דף ההגדרה הזה.

מוצר של Firebase הפניות לספרייה
(firebaseCpp.dependencies
לקובץ build.gradle)
הפניות לספרייה
(firebase_libs
לקובץ CMakeLists.txt)
Analytics analytics firebase_analytics
(חובה) firebase_app
App Check appCheck firebase_app_check
(חובה) firebase_app
Authentication auth firebase_auth
(חובה) firebase_app
Cloud Firestore firestore firebase_firestore
(חובה) firebase_auth
(חובה) firebase_app
Cloud Functions functions firebase_functions
(חובה) firebase_app
Cloud Messaging messaging firebase_messaging
(מומלץ) firebase_analytics
(חובה) firebase_app
Cloud Storage storage firebase_storage
(חובה) firebase_app
Realtime Database database firebase_database
(חובה) firebase_app
Remote Config remoteConfig firebase_remote_config
(מומלץ) firebase_analytics
(חובה) firebase_app
ספריות שהוצאו משימוש או שלא נתמכות
Dynamic Links dynamicLinks firebase_dynamic_links
(מומלץ) firebase_analytics
(חובה) firebase_app

מידע נוסף על הגדרת המכשיר הנייד

קבלת דוחות קריסה של NDK

‫Firebase Crashlytics תומך בדיווח על קריסות של אפליקציות שמשתמשות בספריות Native של Android. מידע נוסף זמין במאמר קבלת דוחות קריסה של Android NDK.

מערכות build בהתאמה אישית

ב-Firebase יש את הסקריפט generate_xml_from_google_services_json.py כדי להמיר את google-services.json למשאבי .xml שאפשר לכלול בפרויקט. הסקריפט הזה מחיל את אותה טרנספורמציה שמבצע הפלאגין של Gradle ל-Google Play Services כשיוצרים אפליקציות ל-Android.

אם אתם לא משתמשים ב-Gradle (לדוגמה, אתם משתמשים ב-ndk-build, ב-makefiles, ב-Visual Studio וכו'), אתם יכולים להשתמש בסקריפט הזה כדי להפוך את היצירה של משאבי מחרוזות ב-Android לאוטומטית.

ProGuard

הרבה מערכות build של Android משתמשות ב-ProGuard ל-builds במצב Release כדי להקטין את גודל האפליקציה ולהגן על קוד המקור של Java.

אם אתם משתמשים ב-ProGuard, תצטרכו להוסיף את הקבצים ב-libs/android/*.pro שתואמים לספריות Firebase C++‎ שבהן אתם משתמשים בהגדרות של ProGuard.

לדוגמה, ב-Gradle, אם משתמשים ב-Google Analytics, קובץ ה-build.gradle ייראה כך:

android {
  // ...
  buildTypes {
    release {
      minifyEnabled true
      proguardFile getDefaultProguardFile('your-project-proguard-config.txt')
      proguardFile file(project.ext.your_local_firebase_sdk_dir + "/libs/android/app.pro")
      proguardFile file(project.ext.your_local_firebase_sdk_dir + "/libs/android/analytics.pro")
      // ...  and so on, for each Firebase C++ library that you're using
    }
  }
}

דרישה לגבי Google Play Services

רוב ספריות Firebase C++‎ דורשות ש-Google Play Services יהיו במכשיר Android של הלקוח. אם ספריית Firebase C++‎ מחזירה את הערך kInitResultFailedMissingDependency במהלך ההפעלה, המשמעות היא ש-Google Play Services לא זמינה במכשיר הלקוח (כלומר, צריך לעדכן אותה, להפעיל אותה מחדש, לתקן את ההרשאות וכו'). אי אפשר להשתמש בספריית Firebase עד שהמצב במכשיר הלקוח יתוקן.

כדי לברר למה Google Play Services לא זמינים במכשיר הלקוח (ולנסות לתקן את הבעיה), אפשר להשתמש בפונקציות שב-google_play_services/availability.h.

בטבלה הבאה מפורט אם נדרש Google Play Services במכשיר לקוח לכל מוצר נתמך של Firebase.

ספריית Firebase C++‎ האם נדרשת חבילת Google Play Services במכשיר הלקוח?
Analytics לא חובה
Authentication חובה
Cloud Firestore חובה
Cloud Functions חובה
Cloud Messaging חובה
Cloud Storage חובה
Dynamic Links חובה
Realtime Database חובה
Remote Config חובה

הגדרת תהליך עבודה במחשב (בטא)

כשיוצרים משחק, בדרך כלל הרבה יותר קל לבדוק אותו קודם בפלטפורמות למחשב, ואז לפרוס ולבדוק אותו במכשירים ניידים בשלב מאוחר יותר של הפיתוח. כדי לתמוך בתהליך העבודה הזה, אנחנו מספקים קבוצת משנה של ערכות ה-SDK של Firebase C++ שיכולות לפעול ב-Windows, ב-macOS, ב-Linux ומתוך עורך C++‎.

  1. בתהליכי עבודה במחשב, צריך לבצע את הפעולות הבאות:

    1. מגדירים את פרויקט ה-C++‎ ל-CMake.
    2. יצירת פרויקט ב-Firebase
    3. רושמים את האפליקציה (iOS או Android) ב-Firebase
    4. הוספת קובץ תצורה של Firebase לפלטפורמה לנייד
  2. יוצרים גרסת מחשב של קובץ התצורה של Firebase:

    • אם הוספתם את הקובץ google-services.json ל-Android – כשמפעילים את האפליקציה, Firebase מאתר את הקובץ הזה של הנייד ויוצר באופן אוטומטי קובץ תצורה של Firebase למחשב (google-services-desktop.json).

    • אם הוספתם את הקובץ GoogleService-Info.plist ל-iOS – לפני שמפעילים את האפליקציה, צריך להמיר את הקובץ הזה ל-נייד לקובץ תצורה של Firebase למחשב. כדי להמיר את הקובץ, מריצים את הפקודה הבאה מאותה ספרייה שבה נמצא הקובץ GoogleService-Info.plist:

      generate_xml_from_google_services_json.py --plist -i GoogleService-Info.plist

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

  3. מוסיפים את ערכות ה-SDK של Firebase לפרויקט ב-C++‎.

    השלבים הבאים הם דוגמה להוספת כל מוצר נתמך של Firebase לפרויקט C++‎. בדוגמה הזו נסביר איך מוסיפים את Firebase Authentication ו-Firebase Realtime Database.

    1. מגדירים את משתנה הסביבה FIREBASE_CPP_SDK_DIR למיקום של ה-SDK של Firebase C++ אחרי שחילצתם אותו מקובץ ה-ZIP.

    2. מוסיפים לקובץ CMakeLists.txt של הפרויקט את התוכן הבא, כולל הספריות של מוצרי Firebase שבהם רוצים להשתמש. לדוגמה, כדי להשתמש ב-Firebase Authentication וב-Firebase Realtime Database:

      # Add Firebase libraries to the target using the function from the SDK.
      add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
      
      # The Firebase C++ library `firebase_app` is required,
      # and it must always be listed last.
      
      # Add the Firebase SDKs for the products you want to use in your app
      # For example, to use Firebase Authentication and Firebase Realtime Database
      set(firebase_libs firebase_auth firebase_database firebase_app)
      target_link_libraries(${target_name} "${firebase_libs}")
  4. מריצים את אפליקציית C++‎.

ספריות זמינות (במחשב)

ערכת ה-SDK של Firebase C++ כוללת תמיכה בתהליך עבודה במחשב לקבוצת משנה של תכונות, שמאפשרת להשתמש בחלקים מסוימים של Firebase בגרסאות build עצמאיות למחשב ב-Windows, ב-macOS וב-Linux.

מוצר של Firebase הפניות לספרייה (באמצעות CMake)
App Check firebase_app_check
(חובה) firebase_app
Authentication firebase_auth
(חובה) firebase_app
Cloud Firestore firebase_firestore
firebase_auth
firebase_app
Cloud Functions firebase_functions
(חובה) firebase_app
Cloud Storage firebase_storage
(חובה) firebase_app
Realtime Database firebase_database
(חובה) firebase_app
Remote Config firebase_remote_config
(חובה) firebase_app

כדי שיהיה נוח יותר לפתח ל-Windows, ל-macOS ול-Linux, ‏ Firebase מספקת את שאר הספריות למחשב כהטמעות של stub (לא פונקציונליות). לכן, אין צורך להדר קוד באופן מותנה כדי לטרגט למחשב.

מחשב Realtime Database

ערכת ה-SDK של Realtime Database למחשב משתמשת ב-REST כדי לגשת למסד הנתונים, לכן צריך להצהיר על האינדקסים שבהם משתמשים עם Query::OrderByChild() במחשב, אחרת המאזינים ייכשלו.

מידע נוסף על הגדרה במחשב

ספריות של Windows

ב-Windows, גרסאות הספרייה מסופקות על סמך:

  • פלטפורמת פיתוח: מצב 32 ביט (x86) לעומת מצב 64 ביט (x64)
  • סביבת זמן ריצה של Windows: ‏ Multithreaded / MT לעומת Multithreaded DLL /MD
  • יעד: גרסה לעומת ניפוי באגים

שימו לב שהספריות הבאות נבדקו באמצעות Visual Studio 2015 ו-2017.

כשמפתחים אפליקציות C++‎ למחשב ב-Windows, צריך לקשר לפרויקט את הספריות הבאות של Windows SDK. למידע נוסף, עיינו במסמכי התיעוד של המהדר.

ספריית Firebase C++‎ יחסי תלות של ספריית Windows SDK
App Check advapi32, ws2_32, crypt32
Authentication advapi32, ws2_32, crypt32
Cloud Firestore advapi32, ws2_32, crypt32, rpcrt4, ole32, shell32
Cloud Functions advapi32, ws2_32, crypt32, rpcrt4, ole32
Cloud Storage advapi32, ws2_32, crypt32
Realtime Database advapi32, ws2_32, crypt32, iphlpapi, psapi, userenv
Remote Config advapi32, ws2_32, crypt32, rpcrt4, ole32

ספריות macOS

ב-macOS (Darwin), גרסאות הספרייה מסופקות לפלטפורמת 64 ביט (x86_64). אנחנו מספקים גם מסגרות לנוחותכם.

שימו לב שהספריות של macOS נבדקו באמצעות Xcode 26.2.

כשמפתחים אפליקציות C++‎ למחשב ב-macOS, צריך לקשר את הפריטים הבאים לפרויקט:

  • ספריית מערכת אחת (pthread)
  • CoreFoundation מסגרת המערכת של macOS
  • Foundation מסגרת המערכת של macOS
  • Security מסגרת המערכת של macOS
  • GSS מסגרת המערכת של macOS
  • Kerberos מסגרת המערכת של macOS
  • SystemConfiguration מסגרת המערכת של macOS

למידע נוסף, עיינו במסמכי התיעוד של המהדר.

ספריות Linux

ב-Linux, גרסאות הספרייה מסופקות לפלטפורמות של 32 ביט (i386) ו-64 ביט (x86_64).

שימו לב שספריות Linux נבדקו באמצעות GCC 4.8.0,‏ GCC 7.2.0 ו-Clang 5.0 ב-Ubuntu.

כשמפתחים אפליקציות C++‎ למחשב ב-Linux, צריך לקשר את ספריית המערכת pthread לפרויקט. למידע נוסף, עיינו במסמכי התיעוד של המהדר. אם אתם משתמשים ב-GCC 5 ואילך, הגדירו את -D_GLIBCXX_USE_CXX11_ABI=0.

השלבים הבאים