Google 服務 Gradle 外掛程式和 JSON 設定檔

將 Firebase 新增至 Android 專案時,您需要在專案中加入 google-services Gradle 外掛程式和 google-services.json 設定檔。

如果您使用 Firebase 控制台Management REST APIFirebase CLI 將 Firebase 新增至 Android 專案,則必須手動將 Gradle 外掛程式和 JSON 設定檔新增至專案。不過,如果您使用 Firebase Assistant for Android Studio, 系統會在設定期間自動完成這些工作。

新增 Gradle 外掛程式

將 Google 服務 Gradle 外掛程式 (google-services) 新增至 build.gradle 檔案:

dependencies {
    classpath 'com.google.gms:google-services:4.5.0'
    // ...
}

Google 服務 Gradle 外掛程式有兩項主要功能:

  • 處理 google-services.json 設定檔,並產生可在應用程式程式碼中使用的 Android 資源。

  • 新增您已啟用服務所需的基本程式庫依附元件。這個步驟需要您在 app/build.gradle 檔案中套用 Google 服務 Gradle 外掛程式,如下所示:
    apply plugin: 'com.google.gms.google-services'

    執行 ./gradlew :app:dependencies 即可查看這個步驟的結果。

新增 JSON 設定檔

google-services.json 設定檔通常會放在 app/ 目錄 (位於 Android Studio 應用程式模組的根目錄)。從 2.2.0 版開始,外掛程式支援建構類型和變種版本專屬的 JSON 檔案。下列所有目錄結構都有效:

// dogfood and release are build types.
app/
    google-services.json
    src/dogfood/google-services.json
    src/release/google-services.json
    ...

使用產品變化版本時,這些較複雜的目錄結構也有效。

// free and paid are product flavors.
app/
    google-services.json
    src/dogfood/paid/google-services.json
    src/release/free/google-services.json
    ...

JSON 設定檔的處理方式

google-services.json 設定檔的基本結構如下:

{
  "project_info": {...},
  "client": [...],
}

project_info 物件包含專案的一般資訊,而 client 陣列的每個成員則包含您新增至專案的用戶端 (Android 應用程式) 資訊。

處理 Android 應用程式的 JSON 檔案時,外掛程式只會根據下列邏輯,使用與套件名稱 (適用於目前的建構類型) 相符的 client 物件:

  • 外掛程式會檢查 client 陣列中每個成員的 client_info/android_client_info/package_name 值。如果套件名稱與這個值相符,系統會傳回成員物件。

  • 如果 client 的任何成員都不符合套件名稱,外掛程式會擲回例外狀況。

本文其餘部分會使用 YOUR_CLIENT 指稱由上述邏輯決定的 client 陣列成員。

製作 XML 檔案

JSON 處理作業的主要結果是產生兩個 XML 檔案,您可以在程式碼中將其做為 Android 資源參照。以下是各檔案的範例:

  • app/build/generated/res/google-services/{build_type}/values/values.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <! -- Present in all applications -->
        <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>
    
        <! -- Present in applications with the appropriate services configured -->
        <string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
        <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
        <string name="ga_trackingId" translatable="false">UA-65557217-3</string>
        <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
        <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
        <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
        <string name="project_id" translatable="false">mydemoapp</string>
    
    </resources>
    
  • app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="ga_trackingId" translatable="false">UA-65557218-3</string>
    </resources>
    

XML 檔案中的值

XML 檔案中的每個值都會出現在 google-services.json 設定檔的下列位置。如果 Android 專案的某些設定導致您無法使用 google-services Gradle 外掛程式,可以安全地使用這些值手動重新建立 XML 檔案。

  • google_app_id

    YOUR_CLIENT/client_info/mobilesdk_app_id
    
  • gcm_defaultSenderId

    project_info/project_number
    
  • default_web_client_id

    YOUR_CLIENT/oauth_client/client_id (client_type == 3)
    
  • ga_trackingId

    YOUR_CLIENT/services/analytics-service/analytics_property/tracking_id
    
  • firebase_database_url

    project_info/firebase_url
    
  • google_api_key

    YOUR_CLIENT/api_key/current_key
    
  • google_crash_reporting_api_key

    YOUR_CLIENT/api_key/current_key
    
  • project_id

    project_info/project_id
    

疑難排解

建構時,我收到下列錯誤訊息:File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it

Firebase 控制台會協助您下載 google-services.json 設定檔。

下載 google-services.json 設定檔後,請將其複製到 Android Studio 專案的 app/ 資料夾,或複製到 app/src/{build_type} 資料夾 (如果您使用多個建構類型)。

我找不到 R.string.gcm_defaultSenderIdR.xml.global_tracker 等符號。

請確認 build.gradle 檔案中的套件名稱,與建立 google-services.json 檔案時輸入的套件名稱相符。如果不確定,請再次執行入門流程,取得新的 JSON 檔案。