Google-services.json thực sự làm được gì?


120

Tôi làm việc để thêm các dịch vụ Google Analytics và GCM vào ứng dụng hiện tại của mình. Trong hướng dẫn triển khai cả hai dịch vụ, google yêu cầu nhà phát triển tạo tệp json: google-services.json và đặt nó trong thư mục gốc của ứng dụng.

Tôi thấy rằng ngay cả khi tôi xóa tệp json này khỏi ứng dụng của mình, các dịch vụ vẫn hoạt động.

Chỉ muốn biết chắc chắn, tập tin này thực sự để làm gì? Cách sử dụng và nó hoạt động như thế nào?

Câu trả lời:


197

Tôi đã điều tra một chút về plugin google-services và json và tìm thấy các nguồn của plugin này.

Điều đầu tiên trước tiên

Google-services gradle-plugin được tham chiếu bởi classpath và khi áp dụng chỉ là một plugin dành cho thời gian xây dựng! Vì vậy, nó chỉ ảnh hưởng đến quá trình xây dựng ứng dụng của bạn, chứ không ảnh hưởng đến quá trình thời gian chạy!

Plugin này chỉ có nghĩa là một người trợ giúp bắt đầu nhanh chóng để tích hợp các dịch vụ của Google một cách nhanh chóng trong ứng dụng của bạn. Rõ ràng, quá trình này hơi phức tạp và không được ghi lại bằng tài liệu, vì vậy Google lẽ ra phải làm rõ quá trình này làm gì.

Trên thực tế, tôi đã tìm thấy mã nguồn cho phiên bản plugin com.google.gms: google-services: 1.4.0-beta3 và không tìm thấy bất kỳ tài liệu tham khảo cụ thể nào trong đó về appinvites cũng như tôi không tìm thấy bất kỳ API Google nào cho Lời mời ứng dụng! (Nhưng có thể nó chỉ sử dụng một dự án API chung với id dự án của nó, tôi đã không thử điều này)

Những gì nó làm

Google-services gradle-plugin tìm kiếm tệp google-services.json được đề cập trong mô-đun ứng dụng của bạn. Sau đó, nó tìm kiếm các cài đặt đã định cấu hình như id dự án và id theo dõi, v.v., được tạo bởi bảng điều khiển dành cho nhà phát triển API của Google vào tệp google-services.json. Từ cài đặt mà nó tìm thấy, các giá trị tài nguyên Android được tạo thành đường dẫn sau:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

Ví dụ về bản dựng gỡ lỗi của ứng dụng của bạn:

app/build/generated/res/google-services/debug/values/values.xml

Ví dụ: nếu bạn đã làm theo hướng dẫn GCM, tệp JSON sẽ bao gồm id của dự án API dưới dạng tài nguyên android sau:

<string name="gcm_defaultSenderId">project-id</string>

Vì vậy, plugin và tệp JSON này không cần thiết để chạy hoặc xuất bản ứng dụng của bạn, nó chỉ là trình trợ giúp khởi động nhanh để tạo một số tệp tài nguyên android cơ bản để tích hợp dễ dàng hơn các tính năng API cụ thể của Google.

Lưu ý trong mã nguồn được tham chiếu bên dưới rằng plugin google-services luôn tạo các tài nguyên android đó cho mọi biến thể ứng dụng được xác định trong app / build.gradle của bạn.

Nếu không muốn điều đó, bạn nên sử dụng các tài nguyên đã tạo đó trong các biến thể ứng dụng bạn muốn và xóa các tài nguyên khác. Đừng quên xóa plugin google-services áp dụng khỏi app / build.gradle, nếu không nó sẽ được tạo lại cho tất cả các biến thể ứng dụng.

Những gì nó không

Plugin và tệp JSON này KHÔNG ảnh hưởng trực tiếp đến hoạt động bên trong của các tính năng Google nói trên cho ứng dụng của bạn! Nếu bạn đã làm theo các hướng dẫn cũ hơn trên developer.android.com về cách tích hợp, ví dụ như GCM hoặc Google Analytics, thì bạn thậm chí không cần phải tích hợp Google-services gradle hoặc tệp google-services.json!

Lưu ý về nơi tôi tìm thấy các nguồn

Sau khi bạn tích hợp google-services gradle-plugin và khi đồng bộ hóa dự án của mình, Gradle sẽ tự động tải phần phụ thuộc google-services xuống một đường dẫn tương tự như thế này (trên Windows, bạn có thể cần phải xem trang chủ của mình / .gradle dành cho Linux):

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

Nếu bạn giải nén tệp jar này, bạn sẽ tìm thấy hai tệp:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

chứa mã nguồn đơn giản của plugin gradle.

GoogleServicesPlugin.groovy

chứa việc xử lý các biến thể ứng dụng và các định nghĩa cơ bản về đường dẫn, v.v.

GoogleServicesTask.java

chứa định nghĩa nhiệm vụ thực tế, hãy tìm phương pháp sau để xem nó thực sự hoạt động gì:

@TaskAction
public void action() throws IOException { 

2
câu trả lời tốt hơn nhiều. tuy nhiên, dường như có vấn đề khi cố gắng làm theo phương pháp được đề xuất ( Develop.google.com/analytics/devguides/collection/android/v4 ) "câu trả lời được chấp nhận" là một khái niệm SO nực cười hoàn toàn phụ thuộc vào sự kiên nhẫn của người có thể quyết định về nó ...
axd

7
Một ghi chú tiếp theo về điều này, vì nó có thể đã thay đổi kể từ khi bạn đăng điều này. Các Google Dịch vụ Gradle Plugin dẫn khẳng định một chức năng thứ 2 của các plugin. Nó cũng tuyên bố thêm một số phụ thuộc cho "các thư viện cơ bản cần thiết cho các dịch vụ bạn đã bật", cũng như kiểm tra các xung đột phụ thuộc (từ việc trộn phiên bản). Tôi đã tìm hiểu kỹ các nguồn và có vẻ như nó cũng đưa vào "compile com.google.android.gms: play-services-Measure". Chỉ là FYI trong trường hợp bất kỳ ai nhìn thấy cửa sổ bật lên và không chắc chắn tại sao.
Android3000

3
Xem xét rằng tệp chứa một vài khóa, có an toàn để thêm nó vào kiểm soát phiên bản không? Theo như tôi có thể nói đó chỉ là dấu vân tay, vì vậy tôi nghĩ nó an toàn. Nhưng tôi không hoàn toàn chắc chắn.
exhuma

1
@exhuma theo ý kiến ​​cá nhân của tôi, nếu bạn đang làm việc cho một dự án riêng tư hoặc nội bộ công ty, bạn nên kiểm tra nó ở chế độ kiểm soát phiên bản. Mặt khác, tôi sẽ không bao giờ kiểm tra tệp json trong kiểm soát phiên bản cho các dự án mã nguồn mở, hiển nhiên.
arne.jans

1
@ arne.jans Bạn có thể đặt senderId động hay bạn chỉ mã hóa nó trong các giá trị.xml? Tôi cần tìm nạp động senderId từ máy chủ và hơn là đăng ký FCM.
Bresiu

37

Tệp này thực sự dùng để làm gì:

google-services.json chứa thông tin đăng nhập của nhà phát triển và cài đặt cấu hình cần để xác minh trong khi kết nối với GoogleApiClient. Mặc dù dịch vụ của bạn đang hoạt động tốt với thiết bị thử nghiệm vì nó đang phát hiện tài khoản nhà phát triển của bạn nhưng sau khi phát hành ứng dụng của bạn ở chế độ công khai, nó sẽ không hoạt động nếu không có tệp json. Vì vậy, đừng xóa nó.

Tài liệu chính thức cho biết:

Ứng dụng xây dựng GoogleApiClient, chỉ định phạm vi và API mà ứng dụng sẽ truy cập. Khi GoogleApiClient kết nối, người dùng đã đăng nhập.

Xem phần cách nó hoạt động .


3
Cảm ơn bạn vì câu trả lời. Chỉ cần có câu hỏi mặc dù tự hỏi nếu bạn sẵn sàng giúp đỡ. Tôi thấy liên kết của bạn được đăng lên dịch vụ Đăng nhập. Nhưng nếu tôi chỉ sử dụng Google Analytics và dịch vụ GCM trong ứng dụng của mình, không cần đăng nhập, thì tôi có cần giữ lại tệp này không? Cảm ơn!
Arthur Wang

3
Có, đối với phân tích hoặc GCM, bạn cũng cần tệp cấu hình này. Trong bước 2 của tài liệu, bạn phải truy cập liên kết NHẬN TỆP CẤU HÌNH . Ở đó, bạn phải chọn nếu bạn đang sử dụng tệp conf này cho GCM hoặc phân tích. Tệp này chỉ chứa Danh tính nhà phát triển của bạn (như khóa api, mã băm SHA1 của máy tính phát triển của bạn, v.v.)
Mohammad Arman

2
@androidGuy Xin lỗi vì phản hồi muộn. Tôi nghĩ rằng bạn phải tạo tệp google-services.json cấu hình mới với bản phát hành mới nhất SHA1 keyhash. Một số tính năng khôn ngoan khác có thể không hoạt động sau khi xuất bản trên Play Store. Xin lỗi vì sự nhầm lẫn trước đó, tôi sẽ xóa bình luận trước đó của tôi vì nó sẽ khiến ai đó đi sai hướng.
Mohammad Arman

1
Nếu bạn sao chép lời của người khác, bạn phải trích dẫn chúng đúng cách và cung cấp đầy đủ thông tin ghi nhận tác giả. Tôi đã khôi phục bản chỉnh sửa của bạn, vì tôi coi đó là đạo văn của câu trả lời bên dưới câu trả lời này.
Brad Larson

6
Còn về vấn đề bảo mật? Có thể tạo lại và đọc google-services.json từ apk không? Tôi thấy một nhà phát triển và khóa API bên trong. Tôi không thích bị người khác biết đến ...
Tino

4

Thêm google-services.json vào mô-đun của bạn và thực hiện LÀM SẠCH và TÁI TẠO. Tệp xml sẽ được tạo trong app / build / created / res / google-services / debug / values ​​/ values.xml với các thuộc tính dự án của bạn và bạn có thể dễ dàng truy cập sau đó như chuỗi xml bình thường. Thí dụ:

String serverClientId = getString(R.string.default_web_client_id);

có một danh sách với tất cả các chuỗi và thông tin khác trong tài liệu google-service.json

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.