דף זה מתאר כיצד להשתמש ביותר מפרויקט Firebase אחד באפליקציה שלך.
אפליקציות רבות זקוקות רק לפרויקט Firebase בודד ולהגדרת ברירת המחדל המתוארת במדריכי התחל . דוגמאות למקרים שבהם זה יכול להיות שימושי להשתמש בפרוייקטים מרובים של Firebase כוללות:
- הגדרת סביבת הפיתוח שלך לשימוש בפרויקטים שונים של Firebase בהתבסס על סוג בנייה או יעד.
- גישה לתוכן מפרויקטים מרובים של Firebase באפליקציה שלך.
תמיכה בסביבות שונות
מקרה שימוש נפוץ אחד הוא תמיכה בפרויקטים נפרדים של Firebase עבור סביבות הפיתוח והייצור שלך.
ערכות ה-Web ו-Admin מוגדרות על ידי העברת ערכים ישירות לפונקציות האתחול שלהן. עבור SDK אלה, אתה יכול להשתמש בבדיקת זמן ריצה כדי לבחור משתני פיתוח או תצורת ייצור.
פלטפורמות אנדרואיד ואפל (ועטיפת Unity ו-C++ שלהן) בדרך כלל טוענות תצורה מקובץ תצורה: GoogleService-Info.plist
בפלטפורמת Apple ו- google-services.json
באנדרואיד. קבצים אלה נקראים לתוך אובייקט אפשרויות ( FIROption
או FirebaseOptions
) שאליו מפנה אובייקט היישום של Firebase ( FIRApp
או FirebaseApp
).
עבור פלטפורמות אלו, מעבר בין סביבות מיושם בדרך כלל כהחלטה של זמן בנייה, באמצעות שימוש בקבצי תצורה שונים עבור כל סביבה.
תמכו בסביבות מרובות באפליקציית Apple שלכם
כברירת מחדל, FirebaseApp.configure()
יטען את הקובץ GoogleService-Info.plist
המצורף לאפליקציה. אם סביבות הפיתוח והייצור שלך מוגדרות כיעדים נפרדים ב-Xcode, אתה יכול:
- הורד את שני הקבצים
GoogleService-Info.plist
- אחסן את שני הקבצים בספריות שונות
- הוסף את שניהם לפרויקט Xcode שלך
- שייך את הקבצים השונים ליעדים השונים באמצעות חלונית Target Membership:
אם ה-builds הם חלק מיעד בודד, האפשרות הטובה ביותר היא לתת לשני קובצי התצורה שמות ייחודיים (למשל GoogleService-Info-Free.plist
ו- GoogleService-Info-Paid.plist
). לאחר מכן בחר בזמן ריצה איזה plist לטעון. זה מוצג בדוגמה הבאה:
// Load a named file. let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist") guard let fileopts = FirebaseOptions(contentsOfFile: filePath!) else { assert(false, "Couldn't load config file") } FirebaseApp.configure(options: fileopts)
תמכו בסביבות מרובות באפליקציית האנדרואיד שלכם
באנדרואיד, הקובץ google-services.json
מעובד למשאבי מחרוזת אנדרואיד על ידי הפלאגין Gradle של שירותי Google. אתה יכול לראות אילו משאבים נוצרו בתיעוד Google Services Plugin על עיבוד קובץ JSON .
אתה יכול לקבל קבצי google-services.json
מרובים עבור גרסאות בנייה שונות על ידי הצבת קבצי google-services.json
בספריות ייעודיות הנקראות לכל גרסה תחת שורש מודול האפליקציה. לדוגמה, אם יש לך טעמים של "פיתוח" ו"שחרור", התצורה שלך יכולה להיות מאורגנת כך:
app/
google-services.json
src/development/google-services.json
src/release/google-services.json
...
למידע נוסף, עיין בתיעוד הפלאגין של שירותי Google בנושא הוספת קובץ ה-JSON .
משאבים אלה נטענים לאחר מכן על ידי FirebaseInitProvider , שפועל לפני קוד האפליקציה שלך ומאתחל ממשקי API של Firebase באמצעות ערכים אלה.
מכיוון שספק זה רק קורא משאבים עם שמות ידועים, אפשרות נוספת היא להוסיף את משאבי המחרוזת ישירות לאפליקציה שלך במקום להשתמש בתוסף הדרגה של שירותי Google. אתה יכול לעשות זאת על ידי:
- הסרת התוסף
google-services
מהשורשbuild.gradle
שלך - מחיקת
google-services.json
מהפרויקט שלך - הוספת משאבי המחרוזת ישירות
- מחיקת
apply plugin: 'com.google.gms.google-services'
מהאפליקציהbuild.gradle
שלך
השתמש במספר פרויקטים ביישום שלך
לפעמים אתה צריך לגשת לפרויקטים שונים באמצעות אותם APIs - למשל, גישה למספר מופעי מסד נתונים. ברוב המקרים יש אובייקט יישום מרכזי של Firebase שמנהל את התצורה של כל ממשקי ה-API של Firebase. אובייקט זה מאותחל כחלק מההגדרה הרגילה שלך. עם זאת, כאשר ברצונך לגשת לפרויקטים מרובים מיישום יחיד, תזדקק לאובייקט יישום ייחודי של Firebase כדי להתייחס לכל אחד בנפרד. זה תלוי בך לאתחל את המקרים האחרים האלה.
בשני המקרים, תחילה עליך ליצור אובייקט אפשרויות של Firebase כדי להחזיק את נתוני התצורה של אפליקציית Firebase. תיעוד מלא עבור האפשרויות ניתן למצוא בתיעוד ההפניה ל-API עבור המחלקות הבאות:
- Swift:
FirebaseOptions(googleAppID:gcmSenderID:)
- אנדרואיד:
FirebaseOptions.Builder
- אינטרנט:
initializeApp()
- C++:
firebase::App::Create
- אחדות:
FirebaseApp.Create
- Node.js:
initializeApp
- Java:
FirebaseOptions.Builder
השימוש במחלקות אלה לתמיכה בפרויקטים מרובים ביישום מוצג בדוגמאות הבאות:
מָהִיר
// Configure with manual options. Note that projectID and apiKey, though not // required by the initializer, are mandatory. let secondaryOptions = FirebaseOptions(googleAppID: "1:27992087142:ios:2a4732a34787067a", gcmSenderID: "27992087142") secondaryOptions.apiKey = "AIzaSyBicqfAZPvMgC7NZkjayUEsrepxuXzZDsk" secondaryOptions.projectID = "projectid-12345" // The other options are not mandatory, but may be required // for specific Firebase products. secondaryOptions.bundleID = "com.google.firebase.devrel.FiroptionConfiguration" secondaryOptions.trackingID = "UA-12345678-1" secondaryOptions.clientID = "27992087142-ola6qe637ulk8780vl8mo5vogegkm23n.apps.googleusercontent.com" secondaryOptions.databaseURL = "https://myproject.firebaseio.com" secondaryOptions.storageBucket = "myproject.appspot.com" secondaryOptions.androidClientID = "12345.apps.googleusercontent.com" secondaryOptions.deepLinkURLScheme = "myapp://" secondaryOptions.storageBucket = "projectid-12345.appspot.com" secondaryOptions.appGroupID = nil
Kotlin+KTX
// Manually configure Firebase Options. The following fields are REQUIRED: // - Project ID // - App ID // - API Key val options = FirebaseOptions.Builder() .setProjectId("my-firebase-project") .setApplicationId("1:27992087142:android:ce3b6448250083d1") .setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw") // .setDatabaseUrl(...) // .setStorageBucket(...) .build()
Java
// Manually configure Firebase Options. The following fields are REQUIRED: // - Project ID // - App ID // - API Key FirebaseOptions options = new FirebaseOptions.Builder() .setProjectId("my-firebase-project") .setApplicationId("1:27992087142:android:ce3b6448250083d1") .setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw") // setDatabaseURL(...) // setStorageBucket(...) .build();
אינטרנט
// The following fields are REQUIRED: // - Project ID // - App ID // - API Key const secondaryAppConfig = { projectId: "<PROJECT_ID>", appId: "<APP_ID>", apiKey: "<API_KEY>", // databaseURL: "...", // storageBucket: "...", };
C++
firebase::AppOptions secondary_app_options;
// API key, app ID, and project ID are always required.
secondary_app_options.set_api_key("<API_KEY>");
secondary_app_options.set_app_id("<GOOGLE_APP_ID>");
secondary_app_options.set_project_id("<PROJECT_ID>");
// The following options are specific to individual Firebase products
// and may not always be required.
secondary_app_options.set_database_url("<DATABASE_URL>");
secondary_app_options.set_messaging_sender_id("<SENDER_ID>");
secondary_app_options.set_storage_bucket("<STORAGE_BUCKET>");
אַחְדוּת
Firebase.AppOptions secondaryAppOptions = new Firebase.AppOptions {
ApiKey = "<API_KEY>",
AppId = "<GOOGLE_APP_ID>",
ProjectId = "<PROJECT_ID>"
};
Node.js
const secondaryServiceAccount = require('./path/to/serviceAccountKey.json'); // All required options are specified by the service account, // add service-specific configuration like databaseURL as needed. const secondaryAppConfig = { credential: cert(secondaryServiceAccount), // databaseURL: 'https://<DATABASE_NAME>.firebaseio.com' };
Java
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
FirebaseOptions secondaryAppConfig = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
לאחר שאתחול אובייקט אפשרויות זה, תוכל להשתמש בו כדי להגדיר מופע יישום נוסף של Firebase. שים לב שבכל הדוגמאות המוצגות להלן אנו משתמשים במחרוזת המשנית . שם זה משמש כדי לאחזר את מופע היישום, ולהבדיל אותו ממופעים אחרים, כולל מופע ברירת המחדל (ששמו [DEFAULT] ). עליך לבחור מחרוזת המתאימה לשימוש המיועד של פרויקט Firebase האחר.
הקטעים הבאים מדגימים התחברות למסד נתונים חלופי בזמן אמת (ממשקי ה-API של תכונות אחרות של Firebase עוקבות אחר אותו דפוס).
מָהִיר
// Configure an alternative FIRApp. FirebaseApp.configure(name: "secondary", options: secondaryOptions) // Retrieve a previous created named app. guard let secondary = FirebaseApp.app(name: "secondary") else { assert(false, "Could not retrieve secondary app") } // Retrieve a Real Time Database client configured against a specific app. let secondaryDb = Database.database(app: secondary)
Kotlin+KTX
// Initialize secondary FirebaseApp. Firebase.initialize(context = this, options, "secondary") // Retrieve secondary FirebaseApp. val secondary = Firebase.app("secondary") // Get the database for the other app. val secondaryDatabase = Firebase.database(secondary)
Java
// Initialize with secondary app FirebaseApp.initializeApp(this /* Context */, options, "secondary"); // Retrieve secondary FirebaseApp FirebaseApp secondary = FirebaseApp.getInstance("secondary");
אינטרנט
// Initialize another app with a different config const secondaryApp = firebase.initializeApp(secondaryAppConfig, "secondary"); // Access services, such as the Realtime Database // secondaryApp.database();
C++
firebase::App* secondary_app = firebase::App::Create(secondary_app_options, "Secondary");
firebase::database::Database* secondary_database = firebase::database::Database::GetInstance(secondary_app);
אַחְדוּת
var secondaryApp = Firebase.FirebaseApp.Create(secondaryAppOptions, "Secondary"));
var secondaryDatabase = Firebase.Database.FirebaseDatabase.getInstance(secondaryApp);
Node.js
// Initialize another app with a different config const secondary = initializeApp(secondaryAppConfig, 'secondary'); // Access services, such as the Realtime Database // const secondaryDatabase = secondary.database();
Java
// Initialize another app with a different config
FirebaseApp secondaryApp = FirebaseApp.initializeApp(secondaryAppConfig, "secondary");
// Retrieve the database.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondaryApp);
הבטח דיווח אמין עבור Analytics
Google Analytics אוסף אירועים מוקדם מאוד בתהליך ההפעלה של האפליקציה, במקרים מסוימים לפני שהוגדר מופע האפליקציה הראשי של Firebase. במקרים אלה, Firebase מתייחס למשאב אנדרואיד או GoogleService-Info.plist
בפלטפורמות של Apple כדי לחפש את מזהה האפליקציה הנכון של Google לאחסון אירועים. מסיבה זו, אנו ממליצים להשתמש בשיטות הגדרת ברירת המחדל בכל מקום אפשרי.
אם נדרשת תצורת זמן ריצה, שים לב להזהרות הבאות:
- אם אתה משתמש ב-AdMob ומבקש מודעות בעת ההפעלה כפי שהומלץ, אתה עלול להחמיץ נתונים מסוימים מ-Analytics הקשורים למודעות לנייד, כאשר אינך משתמש בגישת התצורה מבוססת המשאבים.
- ספק רק מזהה אפליקציית Google בודדת בכל גרסה מבוזרת של האפליקציה שלך. לדוגמה, אם אתה שולח את גרסה 1 של האפליקציה שלך עם
GOOGLE_APP_ID
מסוים בתצורה ואז תעלה גרסה 2 עם מזהה אחר, זה עלול לגרום לביטול נתוני ניתוח. - בפלטפורמות של Apple, אל תוסיף את GoogleService-Info.plist לפרויקט שלך אם אתה מספק תצורה אחרת בזמן ריצה, מכיוון שהדבר עלול לגרום לשינוי לכאורה של
GOOGLE_APP_ID
ולהוביל לאיבוד של Analytics.