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

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

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

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

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


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

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

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

  4. (אופציונלי) מזינים מידע נוסף על האפליקציה: הכינוי של האפליקציה וSHA-1 של אישור החתימה לניפוי באגים.

  5. לוחצים על רישום האפליקציה.

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

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

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

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

    1. מוסיפים כללים שכוללים את הפלאגין של שירותי Google ל-Gradle. בודקים גם אם מאגר 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.4.2'  // Google Services plugin
            implementation 'com.google.android.gms:18.5.0'
          }
        }
      
        allprojects {
          // ...
      
          repositories {
            // Check that you have the following line (if not, add it):
            google()  // Google's Maven repository
            // ...
          }
        }
      
    2. מחילים את הפלאגין של Google Services ל-Gradle:

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

שלב 5: מוסיפים את ערכות ה-SDK של Firebase ל-C++

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

  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++‎ לפלטפורמות של Apple מפורטות בגרסה של דף ההגדרה הזה לפלטפורמות של Apple‏ (iOS ואילך).

מוצר Firebase הפניות לספרייה
(firebaseCpp.dependencies
לקובץ build.gradle)
הפניות לספרייה
(firebase_libs
לקובץ CMakeLists.txt)
AdMob admob firebase_admob
(חובה) firebase_analytics
(חובה) firebase_app
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
Dynamic Links dynamicLinks firebase_dynamic_links
(מומלץ) firebase_analytics
(חובה) firebase_app
Realtime Database database firebase_database
(חובה) firebase_app
Remote Config remoteConfig firebase_remote_config
(מומלץ) firebase_analytics
(חובה) firebase_app

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

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

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

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

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

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

ProGuard

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

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

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

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

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

Firebase C++ Library האם נדרש Google Play Services במכשיר הלקוח?
AdMob לא חובה (בדרך כלל)
Analytics לא נדרש
Authentication חובה
Cloud Firestore חובה
Cloud Functions חובה
Cloud Messaging חובה
Cloud Storage חובה
Dynamic Links חובה
Realtime Database חובה
Remote Config חובה

AdMob ו-Google Play Services

רוב הגרסאות של Google Mobile Ads SDK ל-Android יכולות לפעול כראוי בלי Google Play Services במכשיר הלקוח. עם זאת, אם משתמשים ביחס התלות com.google.android.gms:play-services-ads-lite במקום ביחס התלות הרגיל com.google.firebase:firebase-ads שמפורט למעלה, נדרשת התקנה של Google Play Services.

הפונקציה AdMob תחזיר את הערך kInitResultFailedMissingDependency רק אם מתקיימים שני התנאים הבאים:

  • שירותי Google Play לא זמינים במכשיר הלקוח.
  • אתם משתמשים ב-com.google.android.gms:play-services-ads-lite.

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

כשאתם יוצרים משחק, בדרך כלל קל יותר לבדוק אותו קודם בפלטפורמות למחשב, ולאחר מכן לפרוס ולבדוק אותו במכשירים ניידים בשלב מאוחר יותר בפיתוח. כדי לתמוך בתהליך העבודה הזה, אנחנו מספקים קבוצת משנה של ערכות ה-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. מוסיפים את Firebase SDK לפרויקט C++‎.

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

    1. מגדירים את משתנה הסביבה FIREBASE_CPP_SDK_DIR למיקום של Firebase C++ SDK ללא הארכיון.

    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

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

Realtime Database למחשב

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

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

ספריות של Windows

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

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

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

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

Firebase C++ Library יחסי תלות בספריות של 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 13.3.1.

כשמפתחים אפליקציות למחשב ב-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.

השלבים הבאים