Bu sayfada, uygulamanızda birden fazla Firebase projesini nasıl kullanacağınız açıklanmaktadır.
Birçok uygulama için yalnızca tek bir Firebase projesi ve Başlangıç kılavuzlarında açıklanan varsayılan kurulum gerekir. Birden fazla Firebase projesi kullanmanın faydalı olabileceği durumlara örnekler:
- Geliştirme ortamınızı derleme türüne veya hedefe göre farklı Firebase projeleri kullanacak şekilde ayarlama.
- Uygulamanızda birden fazla Firebase projesindeki içeriğe erişme
Farklı ortamları destekleme
Yaygın bir kullanım alanı, geliştirme ve üretim ortamlarınız için ayrı Firebase projelerini desteklemektir.
Web ve Yönetici SDK'ları, değerler doğrudan başlatma işlevlerine iletilerek yapılandırılır. Bu SDK'lar için geliştirme veya üretim yapılandırma değişkenlerini seçmek üzere bir çalışma zamanı kontrolü kullanabilirsiniz.
Android ve Apple platformları (ve bunların Unity ve C++ sarmalayıcıları) normalde yapılandırmayı bir yapılandırma dosyasından yükler: Apple platformunda GoogleService-Info.plist, Android'de ise google-services.json. Bu dosyalar, Firebase uygulama nesnesi (FIRApp veya FirebaseApp) tarafından referans verilen bir seçenekler nesnesine (FIROption veya FirebaseOptions) okunur.
Bu platformlarda, ortamlar arasında geçiş genellikle her ortam için farklı yapılandırma dosyaları kullanılarak derleme süresi kararı olarak uygulanır.
Apple uygulamanızda birden fazla ortamı destekleme
Varsayılan olarak, FirebaseApp.configure(), uygulamayla birlikte gelen GoogleService-Info.plist dosyasını yükler. Geliştirme ve üretim ortamlarınız Xcode'da ayrı hedefler olarak yapılandırılmışsa:
GoogleService-Info.plistdosyayı da indirin.- İki dosyayı farklı dizinlerde saklayın.
- Her ikisini de Xcode projenize ekleyin.
- Hedef Üyelik panelini kullanarak farklı dosyaları farklı hedeflerle ilişkilendirin:

Derlemeler tek bir hedefin parçasıysa en iyi seçenek, her iki yapılandırma dosyasına da benzersiz adlar vermektir (ör. GoogleService-Info-Free.plist ve GoogleService-Info-Paid.plist). Ardından, çalışma zamanında hangi plist'in yükleneceğini seçin.
Bu durum aşağıdaki örnekte gösterilmektedir:
// 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 uygulamanızda birden fazla ortamı destekleme
Android'de google-services.json dosyası, Google Hizmetleri Gradle eklentisi tarafından Android dize kaynaklarına dönüştürülür. Google Hizmetleri Eklentisi belgelerindeki JSON dosyasını işleme bölümünde hangi kaynakların oluşturulduğunu görebilirsiniz.
google-services.json dosyalarını, uygulama modülü kökü altındaki her varyant için adlandırılmış özel dizinlere yerleştirerek farklı derleme varyantları için birden fazla google-services.json dosyanız olabilir. Örneğin, "development" (geliştirme) ve "release" (yayın) adlı derleme türleriniz varsa yapılandırmanız şu şekilde düzenlenebilir:
app/
google-services.json
src/development/google-services.json
src/release/google-services.json
...
Daha fazla bilgi edinmek için JSON dosyasını ekleme başlıklı Google Hizmetleri Eklentisi dokümanını inceleyin.
Bu kaynaklar daha sonra FirebaseInitProvider tarafından yüklenir. FirebaseInitProvider, uygulama kodunuzdan önce çalışır ve bu değerleri kullanarak Firebase API'lerini başlatır.
Bu sağlayıcı yalnızca bilinen adlara sahip kaynakları okuduğundan, Google Hizmetleri Gradle eklentisini kullanmak yerine dize kaynaklarını doğrudan uygulamanıza eklemek de bir seçenektir. Bu işlemi şu şekilde yapabilirsiniz:
google-serviceseklentisini kökbuild.gradle'nizden kaldırma- Projenizden
google-services.jsonöğesini silme - Dize kaynaklarını doğrudan ekleme
apply plugin: 'com.google.gms.google-services'öğesinibuild.gradleuygulamanızdan silme
Uygulamanızda birden fazla proje kullanma
Bazen aynı API'leri kullanarak farklı projelere erişmeniz gerekir. Örneğin, birden fazla veritabanı örneğine erişmek gibi. Çoğu durumda, tüm Firebase API'lerinin yapılandırmasını yöneten merkezi bir Firebase uygulama nesnesi vardır. Bu nesne, normal kurulumunuzun bir parçası olarak başlatılır. Ancak tek bir uygulamadan birden fazla projeye erişmek istediğinizde her birine ayrı ayrı referans vermek için farklı bir Firebase uygulama nesnesine ihtiyacınız olur. Bu diğer örnekleri başlatmak sizin sorumluluğunuzdadır.
Her iki durumda da öncelikle Firebase uygulaması için yapılandırma verilerini tutacak bir Firebase seçenekleri nesnesi oluşturmanız gerekir. Seçeneklerle ilgili tüm belgeleri, aşağıdaki sınıfların API referans belgelerinde bulabilirsiniz:
- Swift:
FirebaseOptions(googleAppID:gcmSenderID:) - Android:
FirebaseOptions.Builder - Web:
initializeApp() - C++:
firebase::App::Create - Unity:
FirebaseApp.Create - Node.js:
initializeApp - Java:
FirebaseOptions.Builder
Bir uygulamada birden fazla projeyi desteklemek için bu sınıfların kullanımı aşağıdaki örneklerde gösterilmektedir:
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();
Web
// 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' };
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();
Bu seçenekler nesnesini başlattıktan sonra ek bir Firebase uygulama örneği yapılandırmak için kullanabilirsiniz. Aşağıda gösterilen tüm örneklerde secondary dizesini kullandığımızı unutmayın. Bu ad, uygulama örneğini almak ve varsayılan örnek ([DEFAULT] adlı) dahil olmak üzere diğer örneklerden ayırt etmek için kullanılır. Diğer Firebase projesinin kullanım amacına uygun bir dize seçmelisiniz.
Aşağıdaki snippet'ler, alternatif bir Realtime Database (diğer Firebase özelliklerinin API'leri de aynı kalıbı izler) bağlantısı oluşturmayı gösterir.
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");
Web
// 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();
Java
// Initialize another app with a different config
FirebaseApp secondaryApp = FirebaseApp.initializeApp(secondaryAppConfig, "secondary");
// Retrieve the database.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondaryApp);
Analytics için güvenilir raporlama sağlama
Google Analytics, uygulama başlatma akışının çok erken aşamalarında, bazı durumlarda birincil Firebase uygulama örneği yapılandırılmadan önce etkinlikleri toplar. Bu durumlarda Firebase, etkinlikleri depolamak için doğru Google uygulaması kimliğini aramak üzere Apple platformlarındaki Android kaynağına veya GoogleService-Info.plist öğesine başvurur. Bu nedenle, mümkün olan her yerde varsayılan yapılandırma yöntemlerini kullanmanızı öneririz.
Çalışma zamanı yapılandırması gerekiyorsa lütfen aşağıdaki uyarıları dikkate alın:
- AdMob kullanıyorsanız ve önerildiği gibi başlangıçta reklam isteğinde bulunuyorsanız kaynak tabanlı yapılandırma yaklaşımı kullanılmadığında mobil reklamlarla ilgili bazı Analytics verilerini kaçırabilirsiniz.
- Uygulamanızın dağıtılan her varyantında yalnızca tek bir Google uygulaması kimliği sağlayın.
Örneğin, uygulamanızın 1. sürümünü yapılandırmada belirli bir
GOOGLE_APP_IDile birlikte gönderip 2. sürümünü farklı bir kimlikle yüklerseniz analiz verilerinin bırakılmasına neden olabilirsiniz. - Çalışma zamanında farklı bir yapılandırma sağlıyorsanız Apple platformlarında GoogleService-Info.plist dosyasını projenize eklemeyin. Aksi takdirde
GOOGLE_APP_ID'da belirgin bir değişiklik meydana gelebilir ve Analytics verileri kaybolabilir.