این صفحه نحوه استفاده از بیش از یک پروژه Firebase را در برنامهتان شرح میدهد.
بسیاری از برنامهها فقط به یک پروژه Firebase و راهاندازی پیشفرض شرحدادهشده در راهنماهای شروع به کار نیاز دارند. نمونههایی از زمانی که استفاده از چند پروژه Firebase میتواند مفید باشد عبارتاند از:
- راهاندازی محیط توسعه نرمافزار برای استفاده از پروژههای Firebase مختلف براساس نوع ساخت یا هدف.
- دسترسی به محتوا از چندین پروژه Firebase در برنامهتان.
پشتیبانی از محیطهای مختلف
یک مورد استفاده رایج، پشتیبانی از پروژههای Firebase جداگانه برای محیطهای توسعه و تولید شما است.
Web and Admin SDKs are configured by directly passing values to their initialization functions. برای این کیت توسعه نرمافزار، میتوانید از بررسی زمان اجرا برای انتخاب متغیرهای پیکربندی توسعه یا تولید استفاده کنید.
پلاتفرمهای Android و Apple (و پوشانندههای Unity و C++ آنها) معمولاً پیکربندی را از فایل پیکربندی بار میکنند: GoogleService-Info.plist در پلاتفرم Apple و در Android. این فایلها در یک شیء گزینهها (FIROption یا FirebaseOptions) خوانده میشوند که توسط شیء برنامه Firebase (FIRApp یا FirebaseApp) ارجاع داده میشود.
برای این پلاتفرمها، جابهجایی بین محیطها معمولاً بهعنوان تصمیم زمان ساخت، ازطریق استفاده از فایلهای پیکربندی مختلف برای هر محیط، اجرا میشود.
پشتیبانی از محیطهای متعدد در برنامه Apple شما
بهطور پیشفرض، FirebaseApp.configure() فایل GoogleService-Info.plist را که با برنامه همراه شده است بار خواهد کرد. اگر محیطهای توسعه و تولید شما
بهعنوان اهداف جداگانه در Xcode پیکربندی شدهاند، میتوانید:
- بارگیری هر دو فایل
GoogleService-Info.plist - دو فایل را در دایرکتوریهای مختلف ذخیره کنید
- هر دو را به پروژه Xcode خود اضافه کنید
- فایلهای مختلف را بااستفاده از پانل «عضویت هدف» به هدفهای مختلف مرتبط کنید:

اگر ساختها بخشی از یک هدف واحد باشند، بهترین گزینه این است که به هر دو فایل پیکربندی نامهای منحصربهفرد بدهید (مثلاً GoogleService-Info-Free.plist و GoogleService-Info-Paid.plist). سپس در زمان اجرا انتخاب کنید که کدام plist بار شود.
این موضوع در مثال زیر نشان داده شده است:
// Load a named file. guard let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist"), let fileOptions = FirebaseOptions(contentsOfFile: filePath) else { fatalError("Couldn't load config file.") } FirebaseApp.configure(options: fileOptions)
پشتیبانی از محیطهای متعدد در برنامه Android
در پروژههای Android، فایل پیکربندی
توسط افزایه Gradle
به منابع رشته Android پردازش میشود.
در نحوه پردازش فایل پیکربندی JSON، با منابعی که توسط افزایه ایجاد میشود آشنا شوید.
میتوانید برای هریک از
انواع ساخت متفاوت خود،
یک فایل پیکربندی داشته باشید.
برای این کار، هر فایل پیکربندی را در یک
دایرکتوری اختصاصی با نام همان نوع ساخت در ریشه ماژول برنامه قرار دهید. برای مثال، اگر
انواع ساخت «توسعه» و «انتشار» را دارید، پیکربندی شما میتواند
به این صورت سازماندهی شود:
app/
google-services.json
src/development/google-services.json
src/release/google-services.json
...
برای کسب اطلاعات بیشتر، افزودن فایل JSON را ببینید.
سپس این منابع توسط FirebaseInitProvider بارگیری میشوند، که قبلاز کد برنامه شما اجرا میشود و میاناهای برنامهسازی کاربردی Firebase را بااستفاده از آن مقادیر مقداردهی اولیه میکند.
Because this provider is just reading resources with known names, another option
is to add the string resources directly to your app instead of using the
Gradle plugin. برای انجام این کار میتوانید:
- برداشتن افزایه Gradle
از ریشهgoogle-services build.gradle - درحال حذف فایل پیکربندی
از پروژه شماgoogle-services.json - افزودن مستقیم منابع رشتهای
- درحال حذف
apply plugin: 'com.google.gms.google-services'از برنامه شماbuild.gradle
استفاده از چند پروژه در برنامه
گاهی اوقات لازم است بااستفاده از میاناهای برنامهسازی کاربردی یکسان به پروژههای مختلفی دسترسی داشته باشید - برای مثال، دسترسی به چند نمونه پایگاه داده. در بیشتر موارد، یک شیء برنامه Firebase مرکزی وجود دارد که پیکربندی را برای همه Firebase APIها مدیریت میکند. این شیء بهعنوان بخشی از راهاندازی عادی شما مقداردهی اولیه شده است. اما وقتی میخواهید از یک برنامه به چند پروژه دسترسی داشته باشید، به یک شیء برنامه Firebase مجزا نیاز دارید تا به هرکدام بهطور جداگانه ارجاع دهید. راهاندازی این نمونههای دیگر به شما بستگی دارد.
در هر دو مورد، ابتدا باید یک شیء گزینههای Firebase ایجاد کنید تا دادههای پیکربندی برنامه Firebase را نگه دارد. اسناد کامل برای گزینهها را میتوانید در اسناد مرجع میانای برنامهسازی کاربردی برای کلاسهای زیر پیدا کنید:
- سوئیفت:
FirebaseOptions(googleAppID:gcmSenderID:) - Android:
FirebaseOptions.Builder - وب:
initializeApp() - C++:
firebase::App::Create - Unity:
FirebaseApp.Create - Node.js:
initializeApp - جاوا:
FirebaseOptions.Builder
استفاده از این کلاسها برای پشتیبانی از چندین پروژه در یک برنامه در مثالهای زیر نشان داده شده است:
Swift
// 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.clientID = "27992087142-ola6qe637ulk8780vl8mo5vogegkm23n.apps.googleusercontent.com" secondaryOptions.databaseURL = "https://myproject.firebaseio.com" secondaryOptions.storageBucket = "myproject.appspot.com" secondaryOptions.deepLinkURLScheme = "myapp://" secondaryOptions.storageBucket = "projectid-12345.appspot.com" secondaryOptions.appGroupID = nil
Kotlin
// 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>");
Unity
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' };
جاوا
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 اضافی استفاده کنید. توجه داشته باشید که در همه مثالهای نشاندادهشده در زیر، از رشته secondary استفاده میکنیم. از این نام برای بازیابی نمونه برنامه و متمایز کردن آن از نمونههای دیگر، ازجمله نمونه پیشفرض (بهنام [DEFAULT])، استفاده میشود. باید رشتهای را انتخاب کنید که برای استفاده موردنظر از پروژه Firebase دیگر مناسب باشد.
تکهکدهای زیر نحوه اتصال به Realtime Database جایگزین را نشان میدهند (میاناهای برنامهسازی کاربردی برای سایر ویژگیهای Firebase از همین الگو پیروی میکنند).
Swift
// Configure an alternative FIRApp. FirebaseApp.configure(name: "secondary", options: secondaryOptions) // Retrieve a previous created named app. guard let secondary = FirebaseApp.app(name: "secondary") else { fatalError("Could not retrieve secondary app") } // Retrieve a Real Time Database client configured against a specific app. let secondaryDb = Database.database(app: secondary)
Kotlin
// 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);
Unity
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();
جاوا
// 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 به منبع Android یا
GoogleService-Info.plist در پلاتفرمهای Apple مراجعه میکند تا شناسه صحیح برنامه Google
را برای ذخیره رویدادها جستجو کند. به همین دلیل، توصیه میکنیم هرجا ممکن است از روشهای پیکربندی پیشفرض استفاده کنید.
اگر پیکربندی زمان اجرا لازم است، لطفاً به هشدارهای زیر توجه کنید:
- اگر از AdMob استفاده میکنید و طبق توصیه، در زمان راهاندازی درخواست آگهی میکنید، ممکن است برخیاز دادههای Analytics مربوط به آگهیهای تلفن همراه را درصورت عدم استفاده از رویکرد پیکربندی مبتنی بر منبع ازدست بدهید.
- فقط یک شناسه برنامه Google در هر نسخه توزیعشده از برنامهتان ارائه دهید.
برای مثال، اگر نسخه ۱ برنامهتان را با
GOOGLE_APP_IDخاصی در پیکربندی ارسال کنید و سپس نسخه ۲ را با شناسه دیگری بارگذاری کنید، ممکن است باعث شود دادههای Analytics حذف شود. - در پلاتفرمهای Apple، اگر پیکربندی متفاوتی در زمان اجرا ارائه میدهید، GoogleService-Info.plist را به پروژهتان اضافه نکنید، زیرا این کار میتواند منجر به تغییر ظاهری
GOOGLE_APP_IDو ازدست رفتن Analytics شود.