Trình bổ trợ Gradle của dịch vụ Google và tệp cấu hình JSON

Trong quá trình thêm Firebase vào dự án Android, bạn cần thêm trình bổ trợ google-services Gradle và tệp cấu hình google-services.json vào dự án.

Nếu thêm Firebase vào dự án Android bằng bảng điều khiển Firebase, API REST quản lý hoặc Firebase CLI, bạn phải tự thêm trình bổ trợ Gradle và tệp cấu hình JSON vào dự án. Tuy nhiên, nếu bạn sử dụng Firebase Assistant for Android Studio, thì những việc này sẽ tự động được thực hiện cho bạn trong quá trình thiết lập.

Thêm trình bổ trợ Gradle

Bạn thêm trình bổ trợ Gradle dịch vụ của Google (google-services) vào tệp build.gradle:

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

Trình bổ trợ Gradle cho Các dịch vụ của Google có 2 chức năng chính:

  • Xử lý tệp cấu hình google-services.json và tạo ra các tài nguyên Android có thể dùng trong mã của ứng dụng.

  • Thêm các phần phụ thuộc cho các thư viện cơ bản cần thiết cho những dịch vụ mà bạn đã bật. Bước này yêu cầu bạn áp dụng trình bổ trợ Gradle dịch vụ của Google trong tệp app/build.gradle, như sau:
    apply plugin: 'com.google.gms.google-services'

    Bạn có thể xem kết quả của bước này bằng cách chạy ./gradlew :app:dependencies.

Thêm tệp cấu hình JSON

Tệp cấu hình google-services.json thường được đặt trong thư mục app/ (ở thư mục gốc của mô-đun ứng dụng Android Studio). Kể từ phiên bản 2.2.0, trình bổ trợ này hỗ trợ các tệp JSON dành riêng cho loại bản dựng và phiên bản sản phẩm. Tất cả các cấu trúc thư mục sau đây đều hợp lệ:

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

Khi sử dụng các phiên bản sản phẩm, các cấu trúc thư mục phức tạp hơn này cũng hợp lệ.

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

Cách xử lý tệp cấu hình JSON

Tệp cấu hình google-services.json có cấu trúc cơ bản như sau:

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

Đối tượng project_info chứa thông tin chung về dự án của bạn, trong khi mỗi thành phần của mảng client chứa thông tin về các ứng dụng khách (ứng dụng Android) mà bạn đã thêm vào dự án.

Khi xử lý tệp JSON cho ứng dụng Android, trình bổ trợ này chỉ sử dụng đối tượng client khớp với tên gói của bạn (cho loại bản dựng hiện tại) dựa trên logic sau:

  • Đối với mỗi thành phần của mảng client, trình bổ trợ sẽ kiểm tra giá trị của client_info/android_client_info/package_name. Nếu tên gói khớp với giá trị này, thì phương thức sẽ trả về đối tượng thành viên.

  • Nếu không có thành viên nào của client khớp với tên gói, thì trình bổ trợ sẽ gửi một ngoại lệ.

Phần còn lại của tài liệu này sử dụng YOUR_CLIENT để đề cập đến thành phần của mảng client do logic được mô tả ở trên xác định.

Tạo tệp XML

Kết quả chính của quá trình xử lý JSON là tạo ra 2 tệp XML mà bạn có thể tham chiếu dưới dạng tài nguyên Android trong mã của mình. Sau đây là ví dụ về từng tệp:

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

Giá trị trong tệp XML

Mọi giá trị trong tệp XML đều có trong tệp cấu hình google-services.json tại các vị trí được liệt kê bên dưới. Nếu dự án Android của bạn có một số cấu hình ngăn bạn sử dụng trình bổ trợ google-services Gradle, thì bạn có thể tạo lại các tệp XML theo cách thủ công bằng cách sử dụng các giá trị này.

  • 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
    

Khắc phục sự cố

Khi tạo bản dựng, tôi nhận được thông báo lỗi sau: File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.

Bảng điều khiển Firebase sẽ giúp bạn tải tệp cấu hình google-services.json xuống.

Sau khi tải tệp cấu hình google-services.json xuống, hãy sao chép tệp đó vào thư mục app/ của dự án Android Studio hoặc vào thư mục app/src/{build_type} nếu bạn đang sử dụng nhiều loại bản dựng.

Tôi không tìm thấy các biểu tượng như R.string.gcm_defaultSenderId hoặc R.xml.global_tracker.

Đảm bảo tên gói trong tệp build.gradle khớp với tên gói mà bạn đã nhập khi tạo tệp google-services.json. Nếu bạn không chắc chắn, hãy chạy lại quy trình bắt đầu và nhận một tệp JSON mới.