Bu sayfada, uygulamanızda birden fazla Firebase projesinin nasıl kullanılacağı açıklanmaktadır.
Çoğu uygulama yalnızca tek bir Firebase projesine ve Başlangıç kılavuzlarında açıklanan varsayılan kuruluma ihtiyaç duyar. Birden fazla Firebase projesi kullanmanın ne zaman yararlı olabileceğine dair örnekler şunları içerir:
- Geliştirme ortamınızı, yapı türüne veya hedefe göre farklı Firebase projelerini kullanacak şekilde ayarlama.
- Uygulamanızdaki birden fazla Firebase projesinden içeriğe erişme.
Farklı ortamları destekleyin
Yaygın kullanım örneklerinden biri, geliştirme ve üretim ortamlarınız için ayrı Firebase projelerini desteklemektir.
Web ve Yönetici SDK'ları, değerlerin doğrudan başlatma işlevlerine aktarılmasıyla yapılandırılır. Bu SDK için geliştirme veya üretim yapılandırma değişkenlerini seçmek üzere çalışma zamanı denetimini 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
ve Android'de google-services.json
. Bu dosyalar, Firebase uygulama nesnesi ( FIROption
veya FirebaseOptions
) tarafından başvurulan bir seçenekler nesnesine ( FIRApp
veya FirebaseApp
) okunur.
Bu platformlar için, ortamlar arasında geçiş genellikle her ortam için farklı yapılandırma dosyalarının kullanılması yoluyla oluşturma zamanı kararı olarak uygulanır.
Apple uygulamanızda birden fazla ortamı destekleyin
Varsayılan olarak FirebaseApp.configure()
uygulamayla birlikte verilen GoogleService-Info.plist
dosyasını yükleyecektir. Geliştirme ve üretim ortamlarınız Xcode'da ayrı hedefler olarak yapılandırılmışsa şunları yapabilirsiniz:
- Her iki
GoogleService-Info.plist
dosyasını 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 (örneğin GoogleService-Info-Free.plist
ve GoogleService-Info-Paid.plist
). Daha sonra çalışma zamanında hangi plist'in yükleneceğini seçin. Bu, aşağıdaki örnekte gösterilmektedir:
// 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)
Android uygulamanızda birden fazla ortamı destekleyin
Android'de, google-services.json
dosyası, Google Hizmetleri gradle eklentisi tarafından Android dize kaynaklarına işlenir. JSON dosyasının işlenmesi başlıklı Google Hizmetleri Eklentisi belgelerinde hangi kaynakların oluşturulduğunu görebilirsiniz.
google-services.json
dosyalarını, uygulama modülü kökü altında her bir değişken için adlandırılmış özel dizinlere yerleştirerek, farklı derleme varyantları için birden fazla google google-services.json
dosyasına sahip olabilirsiniz. Örneğin, "geliştirme" ve "yayınlama" yapı seçenekleriniz 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 hakkındaki Google Hizmetleri Eklentisi belgelerine bakın.
Bu kaynaklar daha sonra uygulama kodunuzdan önce çalışan ve Firebase API'lerini bu değerleri kullanarak başlatan FirebaseInitProvider tarafından yüklenir.
Bu sağlayıcı yalnızca bilinen adlara sahip kaynakları okuduğundan, başka bir seçenek de Google Hizmetleri gradle eklentisini kullanmak yerine dize kaynaklarını doğrudan uygulamanıza eklemektir. Bunu şu şekilde yapabilirsiniz:
-
google-services
eklentisini kökbuild.gradle
dosyanızdan kaldırma -
google-services.json
dosyasını projenizden silme - Dize kaynaklarını doğrudan ekleme
-
apply plugin: 'com.google.gms.google-services'
,build.gradle
uygulamanızdan
Uygulamanızda birden fazla proje kullanın
Bazen aynı API'leri kullanarak farklı projelere erişmeniz gerekebilir (örneğin, birden fazla veritabanı örneğine erişim). Çoğu durumda, tüm Firebase API'lerinin yapılandırmasını yöneten merkezi bir Firebase uygulama nesnesi bulunur. Bu nesne normal kurulumunuzun bir parçası olarak başlatıldı. Ancak tek bir uygulamadan birden fazla projeye erişmek istediğinizde her birine ayrı ayrı başvuruda bulunmak için ayrı bir Firebase uygulama nesnesine ihtiyacınız olacaktır. Bu diğer örnekleri başlatmak size kalmıştır.
Her iki durumda da, öncelikle Firebase uygulamasına ilişkin yapılandırma verilerini tutacak bir Firebase seçenekleri nesnesi oluşturmanız gerekir. Seçeneklere ilişkin tam belgeler aşağıdaki sınıflara ilişkin API referans belgelerinde bulunabilir:
- Swift:
FirebaseOptions(googleAppID:gcmSenderID:)
- Android:
FirebaseOptions.Builder
- Web:
initializeApp()
- C++:
firebase::App::Create
- Birlik:
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:
Süratli
// 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();
ağ
// 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>");
Birlik
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, onu ek bir Firebase uygulama örneği yapılandırmak için kullanabilirsiniz. Aşağıda gösterilen tüm örneklerde ikincil dizeyi kullandığımızı unutmayın. Bu ad, uygulama örneğini almak ve onu, varsayılan örnek (adlandırılmış [DEFAULT] dahil) dahil olmak üzere diğer örneklerden ayırmak için kullanılır. Diğer Firebase projesinin kullanım amacına uygun bir dize seçmelisiniz.
Aşağıdaki kod parçacıkları alternatif bir Gerçek Zamanlı Veritabanına bağlanmayı göstermektedir (diğer Firebase özelliklerine ilişkin API'ler aynı modeli izler).
Süratli
// 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");
ağ
// 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);
Birlik
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ğlayın
Google Analytics, etkinlikleri uygulama başlatma akışının çok erken safhalarında, bazı durumlarda birincil Firebase uygulaması örneği yapılandırılmadan önce toplar. Bu durumlarda Firebase, etkinlikleri depolamak için doğru Google uygulama kimliğini aramak için Android kaynağına veya Apple platformlarındaki GoogleService-Info.plist
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ılara dikkat edin:
- AdMob kullanıyorsanız ve önerilen şekilde başlangıçta reklam isteğinde bulunuyorsanız, kaynak tabanlı yapılandırma yaklaşımını kullanmadığınızda mobil reklamlarla ilgili bazı Analytics verilerini kaçırabilirsiniz.
- Uygulamanızın dağıtılan her versiyonunda yalnızca tek bir Google uygulama kimliği sağlayın. Örneğin, uygulamanızın 1. sürümünü yapılandırmada belirli bir
GOOGLE_APP_ID
ile gönderip ardından 2. sürümü farklı bir kimlikle yüklerseniz analiz verilerinin düşmesine neden olabilir. - Apple platformlarında, çalışma zamanında farklı bir yapılandırma sağlıyorsanız projenize GoogleService-Info.plist'i eklemeyin; bu,
GOOGLE_APP_ID
belirgin bir değişikliğe ve Analytics'in kaybolmasına neden olabilir.