Co robi google-usługi.json naprawdę?

Pracuję nad dodaniem usług Google Analytics i GCM do mojej obecnej aplikacji. W Przewodniku dla obu implementacji usług google prosi programistę o wygenerowanie pliku json: google-services. json i umieścić go w katalogu głównym aplikacji.

Odkryłem, że nawet jeśli usunę ten plik json z mojej aplikacji, Usługi nadal działają.

Chcę tylko wiedzieć na pewno, do czego tak naprawdę służy ten plik? Jakie jest jego zastosowanie i jak działa?

Author: Janusz, 2015-07-24

3 answers

Zbadałem trochę dotyczące wtyczki google-services i json i znalazłem źródła tej wtyczki.

First things first

Gradle-plugin Google-services, do którego odwołuje się classpath i z apply, jest tylko Wtyczką w czasie kompilacji! Tak więc wpływa tylko na proces budowania aplikacji,ale nie na proces uruchamiania!

Ta wtyczka jest przeznaczona tylko jako quickstart-helper do szybkiej integracji usług Google w Twojej aplikacji. Oczywiście proces ten jest nieco zawiłe i nie udokumentowane, więc Google powinno było wyjaśnić, co ten proces robi.

W rzeczywistości znalazłem kod źródłowy wtyczki w wersji com.google.gms: google-services: 1.4.0-beta3 i nie znalazłem żadnego konkretnego odniesienia w nim dotyczące appinvites ani nie znalazłem żadnego Google API dla zaproszeń do aplikacji! (Ale może po prostu używa generycznego projektu API z jego ID projektu, nie próbowałem tego)

Co robi

Wtyczka google-services gradle szuka wspomnianej google-usługi.plik json w module aplikacji. Następnie wyszukuje skonfigurowane ustawienia, takie jak project-id i tracking-id i takie, generowane przez konsolę programisty API Google w usługach google.plik json. Z znalezionych ustawień wartości zasobów systemu Android są generowane w następującej ścieżce:

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

Na przykład dla debug-build Twojej aplikacji:

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

Np. jeśli zastosowałeś się do samouczka GCM, plik JSON będzie zawierał identyfikator projektu API w następujący sposób android-resource:

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

Więc ta wtyczka i plik JSON nie są niezbędne do uruchomienia lub publikowania aplikacji, to tylko quickstart helper do generowania podstawowych plików zasobów android dla łatwiejszej integracji określonych funkcji Google API.

Zauważ w kodzie źródłowym, o którym mowa poniżej, że wtyczka google-services zawsze generuje te zasoby Androida dla każdego wariantu aplikacji zdefiniowanego w Twojej aplikacji / kompilacji.gradle.

Jeśli tego nie chcesz, powinieneś użyć tych wygenerowane zasoby w aplikacji-warianty, które chcesz, i usunąć inne. Nie zapomnij usunąć wtyczki Google-services apply z app / build.gradle, albo zostanie zregenerowany dla wszystkich wariantów aplikacji.

Czego nie ma

Ta wtyczka i plik JSON nie mają bezpośredniego wpływu na wewnętrzne działanie wspomnianych funkcji Google dla Twojej aplikacji! Jeśli korzystałeś już ze starszych samouczków na developer.android.com jak zintegrować np. GCM czy Google Analytics, to nawet nie trzeba zintegrować albo gradle-plugin google-services lub google-services.plik json!

Informacja o tym, gdzie znalazłem źródła

Po zintegrowaniu wtyczki google-services gradle i zsynchronizowaniu projektu, Gradle automatycznie pobiera zależność google-services do ścieżki podobnej do tej (w systemie Windows może być konieczne zajrzenie do domu/.gradle dla Linuksa):

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

Jeśli rozpakujesz ten plik jar, znajdziesz dwa pliki:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

Które zawiera zwykły kod źródłowy wtyczki gradle.

GoogleServicesPlugin.groovy

Zawiera obsługę wariantów aplikacji i podstawowe definicje ścieżek itp.

GoogleServicesTask.java

Zawiera rzeczywistą definicję zadania, poszukaj następującej metody, aby zobaczyć, co naprawdę robi:

@TaskAction
public void action() throws IOException { 
 181
Author: arne.jans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-01 09:54:22

Do czego tak naprawdę służy ten plik:

Google-usługi.json zawiera poświadczenia programistów i ustawienia konfiguracyjne, które są potrzebne do weryfikacji podczas łączenia z GoogleApiClient. Chociaż usługa działa dobrze z urządzeniem testowym, ponieważ wykrywa konto dewelopera, ale po publicznym udostępnieniu aplikacji nie będzie działać bez pliku json. Więc nie kasuj go.

Oficjalna dokumentacja mówi:

Wniosek buduje GoogleApiClient, określając, do których zakresów i interfejsów API aplikacja będzie miała dostęp. Gdy GoogleApiClient się połączy, użytkownik jest zalogowany.

Zobacz Jak to działa .

 36
Author: Mohammad Arman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-21 20:09:59

Dodaj google-services.json do twojego modułu i zrób czyszczenie i przebudowę. Plik xml zostanie wygenerowany w App / build/generated/res/google-services/debug/values / values.xml z właściwości projektu i można łatwo uzyskać dostęp wtedy jak normalny ciąg xml. Przykład:

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

W Google-service znajduje się lista ze wszystkimi ciągami znaków i informacjami o momre.json doc

 2
Author: Beto Caldas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 19:01:07