Birden çok proje yapılandırın

Bu sayfada, uygulamanızda birden fazla Firebase projesinin nasıl kullanılacağı açıklanmaktadır.

Birçok uygulamada yalnızca tek bir Firebase projesi ve varsayılan kurulum gereklidir Başlarken kılavuzlarında açıklanan adımları izleyin. Ne zaman yararlı olabileceğine dair örnekler kullanmak için şunlara dikkat edin:

  • Geliştirme ortamınızı farklı Firebase projeleri kullanacak şekilde ayarlama tek bir kullanıcı adı ve şifre kullanın.
  • Uygulamanızdaki birden çok Firebase projesinin içeriğine erişme.

Farklı ortamları destekleme

Yaygın kullanım alanlarından biri, geliştirme işleminiz için ayrı Firebase projelerini desteklemektir. ve üretim ortamlarıyla bağlantılıdır.

Web ve Admin SDK'lar doğrudan ilk kullanıma hazırlama işlevlerine değer iletme. Bu SDK için çalışma zamanı kontrolünü kullanarak geliştirme veya üretim yapılandırması değişkenlerini seçin.

Android ve Apple platformları (ve bunların Unity ve C++ sarmalayıcıları) normalde yüklenir bir yapılandırma dosyasından yapılandırma: Apple'da GoogleService-Info.plist platformu ve Android'de google-services.json. Bu dosyalar bir seçenekleri nesnesini (FIROption veya FirebaseOptions) Firebase uygulama nesnesi (FIRApp veya FirebaseApp).

Bu platformlar için, ortamlar arasında geçiş genellikle Her biri için farklı yapılandırma dosyaları kullanarak derleme zamanı kararı bahsedeceğim.

Apple uygulamanızda birden fazla ortamı destekleme

FirebaseApp.configure() varsayılan olarak GoogleService-Info.plist dosyasını yükler pakete dahil edilir. Geliştirme ve üretim ortamlarınız Xcode'da ayrı hedefler olarak yapılandırıldığında, şunları yapabilirsiniz:

  • GoogleService-Info.plist dosyanın ikisini de indir
  • İki dosyayı farklı dizinlerde depolayın
  • Her ikisini de Xcode projenize ekleyin
  • Search Ads 360'ı kullanarak farklı dosyaları farklı hedeflerle ilişkilendirmek Üyelik paneli:

Hedef Üyelik paneli

Derlemeler tek bir hedefin parçasıysa, en iyi seçenek her ikisini de yapılandırma dosyalarına ilişkin benzersiz adlar (ör. GoogleService-Info-Free.plist ve GoogleService-Info-Paid.plist) tıklayın. 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ı destekleme

Android'de, google-services.json dosyası Android dizesi olarak işlenir kaynaklar için Google Hizmetleri gradle eklentisinden yararlanabilirsiniz. Böylece iki web sitesindeki Google Hizmetler Eklentisi dokümanlarında hangi kaynakların JSON dosyası işleniyor.

Farklı dosyalar için birden fazla google-services.json dosyanız olabilir derleme varyantları Her biri için ada sahip özel dizinlere google-services.json dosya yerleştirerek varyantını görürsünüz. Örneğin, "geliştirme" ve "yayınla" şu şekilde düzenlenebilir:

app/
    google-services.json
    src/development/google-services.json
    src/release/google-services.json
    ...

Daha fazla bilgi edinmek için şu adresteki Google Hizmetleri Eklentisi dokümanlarına bakın: JSON dosyasını ekleme.

Bu kaynaklar daha sonra FirebaseInitProvider, Bu API, uygulama kodunuzdan önce çalışır ve Firebase API'lerini bahsedeceğim.

Bu sağlayıcı yalnızca bilinen adlara sahip kaynakları okuduğu için, seçeneği, dize kaynaklarını Google Hizmetleri gradle eklentisi. Bunu aşağıdaki şekilde yapabilirsiniz:

  • google-services eklentisi, build.gradle kök dosyanızdan kaldırılıyor
  • google-services.json, projenizden siliniyor
  • Dize kaynaklarını doğrudan ekleme
  • apply plugin: 'com.google.gms.google-services', build.gradle uygulamanızdan siliniyor

Uygulamanızda birden fazla proje kullanın

Bazen aynı API'leri kullanarak farklı projelere erişmeniz gerekir. Örneğin, birden fazla veritabanı örneğine erişme. Çoğu durumda, kurulacak Tüm Firebase için yapılandırmayı yöneten Firebase uygulama nesnesi API'ler. Bu nesne normal kurulumunuzun bir parçası olarak başlatıldı. Ancak, tek bir uygulamadan birden çok projeye erişmek istiyorsanız bir başvurulacak farklı Firebase uygulama nesnesi bulunmalıdır. İnsanların ilk kullanıma hazırlamanız önerilir.

Her iki durumda da, Firebase uygulaması için yapılandırma verileri. Tüm belgeler seçenekler için API referans dokümanlarında bulunabilir: şu sınıflarda:

Bir uygulamada birden fazla projeyi desteklemek için bu sınıfların kullanımı gösterilmektedir aşağıdaki örneklerde:

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.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();

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 onu kullanarak bir ek Firebase uygulama örneği. Gösterilen tüm örneklerde aşağıda secondary dizesini kullanırız. Bu ad, ve diğer örneklerden ayırt edilebilmesi açısından önemlidir. varsayılan örneğidir ([DEFAULT] adında). diğer Firebase projesinin amaçlanan kullanımı.

Aşağıdaki snippet'ler alternatif bir Realtime Database'e bağlanmayı göstermektedir (diğer Firebase özelliklerinin API'leri de aynı kalıbı izler).

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 { 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");

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, etkinlikleri uygulama başlatma akışının en erken aşamalarında toplar. bazı durumlara örnek olarak verilebilir. İçinde Bu durumlarda Firebase, Android kaynağını veya Doğru Google uygulamasını aramak için Apple platformlarında GoogleService-Info.plist Etkinliklerin depolanacağı kimlik. Bu nedenle, varsayılan olarak yapılandırma yöntemlerini kullanın.

Çalışma zamanı yapılandırması gerekiyorsa lütfen aşağıdaki uyarıları göz önünde bulundurun:

  1. AdMob kullanıyorsanız ve başlangıçta reklam isteğinde belirtildiği gibi, kaynağı kullanılmadığında mobil reklamlarla ilgili bazı Analytics verilerini kaçırmak en iyi uygulamaları paylaşacağım.
  2. Uygulamanızın dağıtılan her varyantı için yalnızca tek bir Google uygulama kimliği sağlayın. Örneğin, uygulamanızın 1. sürümünü belirli bir GOOGLE_APP_ID ile gönderirseniz sonra farklı bir kimlikle sürüm 2'yi yükleyebilirsiniz. Bu durum, verinin bırakılmasına neden olabilir.
  3. Apple platformlarında aşağıdaki durumlarda GoogleService-Info.plist öğesini projenize eklemeyin: çalışma zamanında farklı yapılandırmalar sağlamanız durumunda GOOGLE_APP_ID belirgin bir değişiklik gösterir ve Analytics'in kaybedilmesine neden olur.