Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Konfigurasi beberapa proyek

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Halaman ini menjelaskan cara menggunakan lebih dari satu proyek Firebase di aplikasi Anda.

Banyak aplikasi hanya memerlukan satu proyek Firebase dan penyiapan default yang dijelaskan dalam panduan Memulai . Contoh penggunaan beberapa proyek Firebase yang berguna meliputi:

  • Menyiapkan lingkungan pengembangan Anda untuk menggunakan proyek Firebase yang berbeda berdasarkan jenis atau target build.
  • Mengakses konten dari beberapa proyek Firebase di aplikasi Anda.

Mendukung lingkungan yang berbeda

Salah satu kasus penggunaan yang umum adalah untuk mendukung proyek Firebase yang terpisah untuk lingkungan pengembangan dan produksi Anda.

Web dan Admin SDK dikonfigurasikan dengan meneruskan nilai secara langsung ke fungsi inisialisasinya. Untuk SDK ini, Anda dapat menggunakan pemeriksaan waktu proses untuk memilih variabel konfigurasi pengembangan atau produksi.

Platform Android dan Apple (dan pembungkus Unity dan C++ mereka) biasanya memuat konfigurasi dari file konfigurasi: GoogleService-Info.plist di platform Apple dan google-services.json di Android. File ini dibaca menjadi objek opsi ( FIROption atau FirebaseOptions ) yang direferensikan oleh objek aplikasi Firebase ( FIRApp atau FirebaseApp ).

Untuk platform ini, peralihan antar lingkungan biasanya diimplementasikan sebagai keputusan waktu pembuatan, melalui penggunaan file konfigurasi yang berbeda untuk setiap lingkungan.

Mendukung banyak lingkungan di aplikasi Apple Anda

Secara default, FirebaseApp.configure() akan memuat file GoogleService-Info.plist yang dibundel dengan aplikasi. Jika lingkungan pengembangan dan produksi Anda dikonfigurasi sebagai target terpisah di Xcode, Anda dapat:

  • Unduh kedua file GoogleService-Info.plist
  • Simpan dua file di direktori yang berbeda
  • Tambahkan keduanya ke proyek Xcode Anda
  • Kaitkan file yang berbeda dengan target yang berbeda menggunakan panel Target Membership:

Panel Keanggotaan Target

Jika build merupakan bagian dari satu target, opsi terbaik adalah memberikan nama unik pada kedua file konfigurasi (mis GoogleService-Info-Free.plist dan GoogleService-Info-Paid.plist ). Kemudian pilih saat runtime plist mana yang akan dimuat. Ini ditunjukkan dalam contoh berikut:

// 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)

Mendukung banyak lingkungan di aplikasi Android Anda

Di Android, file google-service.json diproses menjadi sumber daya string Android oleh plugin gradle Layanan Google. Anda dapat melihat sumber daya mana yang dibuat dalam dokumentasi Plugin Layanan Google di Memproses file JSON .

Anda dapat memiliki beberapa file google-services.json untuk varian build yang berbeda dengan menempatkan file google-services.json di direktori khusus yang diberi nama untuk setiap varian di bawah root modul aplikasi. Misalnya, jika Anda memiliki ragam build "pengembangan" dan "rilis", konfigurasi Anda dapat diatur seperti ini:

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

Untuk mempelajari lebih lanjut, lihat dokumentasi Plugin Layanan Google tentang Menambahkan file JSON .

Sumber daya ini kemudian dimuat oleh FirebaseInitProvider , yang berjalan sebelum kode aplikasi Anda dan menginisialisasi Firebase API menggunakan nilai tersebut.

Karena penyedia ini hanya membaca sumber daya dengan nama yang diketahui, opsi lainnya adalah menambahkan sumber daya string langsung ke aplikasi Anda alih-alih menggunakan plugin gradle Layanan Google. Anda dapat melakukannya dengan:

  • Menghapus plugin google-services dari root build.gradle Anda
  • Menghapus google-services.json dari proyek Anda
  • Menambahkan sumber daya string secara langsung
  • Menghapus apply plugin: 'com.google.gms.google-services' dari build.gradle aplikasi Anda

Gunakan beberapa proyek di aplikasi Anda

Terkadang Anda perlu mengakses proyek yang berbeda menggunakan API yang sama - misalnya, mengakses beberapa instance database. Dalam kebanyakan kasus, ada objek aplikasi Firebase pusat yang mengelola konfigurasi untuk semua API Firebase. Objek ini diinisialisasi sebagai bagian dari pengaturan normal Anda. Namun, bila Anda ingin mengakses beberapa proyek dari satu aplikasi, Anda memerlukan objek aplikasi Firebase yang berbeda untuk mereferensikan masing-masing proyek satu per satu. Terserah Anda untuk menginisialisasi instance lain ini.

Dalam kedua kasus tersebut, Anda harus terlebih dahulu membuat objek opsi Firebase untuk menyimpan data konfigurasi untuk aplikasi Firebase. Dokumentasi lengkap untuk opsi dapat ditemukan di dokumentasi referensi API untuk kelas berikut:

Penggunaan kelas-kelas ini untuk mendukung banyak proyek dalam suatu aplikasi ditunjukkan dalam contoh berikut:

Cepat

// 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

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

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

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

Persatuan

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'
};

Jawa

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

FirebaseOptions secondaryAppConfig = new FirebaseOptions.Builder()
  .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
  .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
  .build();

Setelah Anda menginisialisasi objek opsi ini, Anda dapat menggunakannya untuk mengonfigurasi instance aplikasi Firebase tambahan. Perhatikan bahwa dalam semua contoh yang ditunjukkan di bawah ini kami menggunakan string secondary . Nama ini digunakan untuk mengambil instance aplikasi, dan untuk membedakannya dari instance lain, termasuk instance default (bernama [DEFAULT] ). Anda harus memilih string yang sesuai dengan tujuan penggunaan proyek Firebase lainnya.

Cuplikan berikut menunjukkan koneksi ke Realtime Database alternatif (API untuk fitur Firebase lainnya mengikuti pola yang sama).

Cepat

// 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)

Java

// Initialize with secondary app
FirebaseApp.initializeApp(this /* Context */, options, "secondary");

// Retrieve secondary FirebaseApp
FirebaseApp secondary = FirebaseApp.getInstance("secondary");

Kotlin+KTX

// Initialize secondary FirebaseApp.
Firebase.initialize(this /* Context */, options, "secondary")

// Retrieve secondary FirebaseApp.
val secondary = Firebase.app("secondary")
// Get the database for the other app.
val secondaryDatabase = Firebase.database(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);

Persatuan

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

Jawa

// Initialize another app with a different config
FirebaseApp secondaryApp = FirebaseApp.initializeApp(secondaryAppConfig, "secondary");

// Retrieve the database.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondaryApp);

Pastikan pelaporan yang andal untuk Analytics

Google Analytics mengumpulkan peristiwa sangat awal dalam alur memulai aplikasi, dalam beberapa kesempatan sebelum instance aplikasi Firebase utama dikonfigurasi. Dalam kasus ini, Firebase merujuk ke sumber daya Android atau GoogleService-Info.plist di platform Apple untuk mencari ID aplikasi Google yang benar untuk menyimpan peristiwa. Untuk alasan ini, kami menyarankan untuk menggunakan metode konfigurasi default jika memungkinkan.

Jika konfigurasi runtime diperlukan, harap perhatikan peringatan berikut:

  1. Jika Anda menggunakan AdMob dan meminta iklan saat memulai seperti yang disarankan, Anda mungkin kehilangan beberapa data Analytics yang terkait dengan iklan seluler saat tidak menggunakan pendekatan konfigurasi berbasis sumber daya.
  2. Hanya berikan satu ID aplikasi Google di setiap varian terdistribusi dari aplikasi Anda. Misalnya, jika Anda mengirimkan versi 1 aplikasi Anda dengan GOOGLE_APP_ID tertentu dalam konfigurasi, lalu mengunggah versi 2 dengan ID yang berbeda, ini dapat menyebabkan data analytics dihapus.
  3. Pada platform Apple, jangan tambahkan GoogleService-Info.plist ke proyek Anda jika Anda menyediakan konfigurasi yang berbeda pada waktu proses, karena hal ini dapat mengakibatkan perubahan nyata pada GOOGLE_APP_ID dan mengakibatkan hilangnya Analytics.