Trình bổ trợ Gradle cho các dịch vụ của Google

Stay organized with collections Save and categorize content based on your preferences.

Giới thiệu

Để bật API Google hoặc các dịch vụ của Firebase trong ứng dụng Android, bạn có thể phải thêm trình bổ trợ google-services vào tệp build.gradle:

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

Trình bổ trợ google-services có hai hàm chính:

  1. Xử lý tệp google-services.json và tạo các tài nguyên Android có thể dùng trong mã của ứng dụng. Xem thêm thông tin trong bài viết Thêm tệp JSON.
  2. Thêm các phần phụ thuộc cho những thư viện cơ bản cần thiết đối với các dịch vụ mà bạn đã bật. Để thực hiện bước này, bạn phải áp dụng trình bổ trợ Gradle cho Dịch vụ của Google trong tệp app/build.gradle, chẳng hạn như:
    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 JSON

Tệp google-services.json thường được đặt trong thư mục app/ (ở gốc của mô-đun ứng dụng Android Studio). Kể từ phiên bản 2.2.0, trình bổ trợ sẽ 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
    ...

Lưu ý: Việc cung cấp tệp google-services.json trong thư mục phát hành cho phép bạn duy trì một dự án Firebase riêng cho tệp APK phát hành chính thức.

Khi bạn sử dụng 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
    ...

Xử lý tệp JSON

Tệp google-services.json có cấu trúc cơ bản 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 (ứ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 (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:
    • 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, hãy 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ì hệ thống sẽ gửi một trường hợp ngoại lệ.

Trong phần còn lại của tài liệu này, chúng ta sẽ sử dụng {YOUR_CLIENT} để tham chiếu đến thành phần của mảng client được xác định theo quy trình ở trên.

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

app/build/created/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/created/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>

Mọi giá trị trong các tệp XML đều có trong tệp google-services.json tại các vị trí bên dưới. Nếu dự án Android có một số cấu hình ngăn bạn sử dụng trình bổ trợ google-services, 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ị sau:

google_app_id:

{YOUR_CLIENT}/client_info/mobilesdk_app_id

gcm_defaultGửiId:

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

khoá_google_api:

{YOUR_CLIENT}/api_key/current_key

google_crash_reporting_api_key:

{YOUR_CLIENT}/api_key/current_key

mã_dự_án:

project_info/project_id

Khắc phục sự cố

Hỏi: Khi xây dựng, tôi nhận được thông báo lỗi sau: "Tệp google-services.json bị thiếu trong thư mục gốc của mô-đun. Trình bổ trợ Dịch vụ của Google không thể hoạt động nếu không có trình bổ trợ này.

Đáp: Bảng điều khiển của Firebase sẽ giúp bạn tải google-services.json xuống. Ngoài ra, hướng dẫn Quickstart cho hầu hết các API cũng có hướng dẫn để tạo tệp này. Sau khi bạn tải tệp 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.

Hỏi: Tôi không tìm thấy biểu tượng "R.string.gcm_defaultSenderId", "R.xml.global_tracker", v.v.

Đáp: Hãy đảm bảo tên gói trong tệp build.gradle khớp với tên gói 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 tệp json mới.