Google-services.json gerçekten ne yapıyor?


120

Mevcut uygulamama Google Analytics ve GCM hizmetlerini eklemeye çalışıyorum. Her iki hizmet uygulamasına ilişkin kılavuzda, google geliştiriciden bir json dosyası oluşturmasını ister: google-services.json ve bunu uygulamanın kök dizini altına koyar.

Bu json dosyasını uygulamamdan silsem bile hizmetlerin hala çalıştığını fark ettim.

Emin olmak istiyorum, bu dosya gerçekten ne için? Kullanımı nedir ve nasıl çalışır?

Yanıtlar:


197

Google-services eklentisi ve json ile ilgili biraz araştırdım ve bu eklentinin kaynaklarını buldum.

Her şey sırayla

Classpath tarafından başvurulan ve başvuru ile başvurulan gradle eklentisi google hizmetleri yalnızca derleme zamanı eklentisidir! Dolayısıyla, yalnızca uygulamanızın derleme sürecini etkiler, ancak çalışma zamanı sürecini etkilemez!

Bu eklenti, yalnızca Google hizmetlerini uygulamanıza hızlı bir şekilde entegre etmek için hızlı başlangıç ​​yardımcısı olarak düşünülmüştür. Açıkçası, süreç biraz karışıktır ve belgelenmemiştir, bu nedenle Google bu sürecin ne yaptığını netleştirmiş olmalıydı.

Aslında, com.google.gms: google-services: 1.4.0-beta3 eklenti sürümünün kaynak kodunu buldum ve bunun içinde uygulama davetlerine ilişkin herhangi bir özel referans bulamadım veya Uygulama Davetiyeleri için herhangi bir Google API bulamadım! (Ama belki proje kimliğiyle genel bir API projesi kullanıyor, bunu denemedim)

Bu ne yapar

Google-services gradle-plugin, uygulama modülünüzde belirtilen google-services.json dosyasını arar. Ardından, Google API geliştirici konsolu tarafından google-services.json dosyasına oluşturulan proje kimlikleri ve izleme kimlikleri gibi yapılandırılmış ayarları arar. Bulduğu ayarlardan, Android kaynak değerleri aşağıdaki yola oluşturulur:

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

Örneğin, uygulamanızın hata ayıklama derlemesi için:

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

Örneğin, GCM eğiticisini takip ettiyseniz, JSON dosyası API projesinin kimliğini aşağıdaki android kaynağı olarak içerir:

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

Dolayısıyla bu eklenti ve JSON dosyası, uygulamanızı çalıştırmak veya yayınlamak için gerekli değildir, belirli Google API özelliklerinin daha kolay entegrasyonu için bazı temel android kaynak dosyalarını oluşturmak için hızlı bir başlangıç ​​yardımcısıdır.

Aşağıda referans verilen kaynak kodda, google-services eklentisinin her zaman app / build.gradle'da tanımlanan her uygulama varyantı için bu android kaynaklarını oluşturduğuna dikkat edin.

Bunu istemiyorsanız, bu oluşturulan kaynakları istediğiniz uygulama varyantlarında kullanmalı ve diğerlerini silmelisiniz. Google-services eklentisini app / build.gradle'dan kaldırmayı unutmayın, aksi takdirde tüm uygulama varyantları için yeniden oluşturulacaktır.

Ne yapmaz

Bu eklenti ve JSON dosyası, uygulamanız için söz konusu Google özelliklerinin iç işleyişini doğrudan ETKİLEMEZ! GCM veya Google Analytics gibi nasıl entegre edileceğine dair developer.android.com adresindeki eski eğitimleri zaten takip ettiyseniz, o zaman gradle-plugin google-services veya google-services.json dosyasını entegre etmeniz bile gerekmez!

Kaynakları nerede bulduğumla ilgili uyarı

Google-services gradle eklentisini entegre ettikten sonra ve projenizi senkronize ettiğinizde Gradle, google-services bağımlılığını buna benzer bir yola otomatik olarak indirir (Windows'ta, Linux için home / .gradle'a bakmanız gerekebilir):

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

Bu jar dosyasını çıkarırsanız, iki dosya bulacaksınız:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

gradle eklentisinin düz kaynak kodunu içeren.

GoogleServicesPlugin.groovy

uygulama varyantlarının işlenmesini ve yolların temel tanımlarını vb. içerir.

GoogleServicesTask.java

gerçek görev tanımını içeriyorsa, gerçekten ne yaptığını görmek için aşağıdaki yöntemi arayın:

@TaskAction
public void action() throws IOException { 

2
çok daha iyi cevap. yine de önerilen yaklaşımı izlemeye çalışırken sorunlar var gibi görünüyor ( developers.google.com/analytics/devguides/collection/android/v4 ) "kabul edilen yanıt", tamamen kişinin sabrına bağlı olan gülünç bir SO kavramıdır. buna karar ver ...
axd

7
Bunu yayınladıktan sonra değişmiş olabileceği için bununla ilgili bir takip notu. Google Hizmetleri Gradle Eklenti kılavuzu eklentinin 2 fonksiyonunu ifade eder. Ayrıca, "etkinleştirdiğiniz hizmetler için gerekli temel kitaplıklar" için bazı bağımlılıkları eklediği gibi, bağımlılık çakışmaları için de kontroller (sürüm karıştırmasından) iddia eder. Kaynakları araştırdım ve aynı zamanda "compile com.google.android.gms: play-services-Measurement" enjekte ediyor gibi görünüyor. Birinin açılır pencereyi görmesi ve neden olduğundan emin olmaması durumunda sadece bir FYI.
Android3000

3
Dosyanın birkaç anahtar içerdiğini düşünürsek, onu sürüm kontrolüne eklemek güvenli midir? Sadece parmak izi olduğunu söyleyebildiğim kadarıyla güvenli olduğunu düşünüyorum. Ama tam olarak emin değilim.
exhuma

1
@exhuma kişisel görüşüme göre, özel veya şirket içi bir proje üzerinde çalışıyorsanız, bunu sürüm kontrolüne kontrol etmeniz uygun olacaktır. Öte yandan, açık kaynaklı projeler için json dosyasını asla sürüm kontrolüne kontrol etmem tabii ki.
arne.jans

1
@ arne.jans Gönderen kimliğini dinamik olarak ayarlayabiliyor musunuz, yoksa onu values.xml dosyasına mı kodladınız? SenderId'yi dinamik olarak sunucudan alıp FCM'ye kaydolmam gerekiyor.
Bresiu

37

Bu dosya gerçekten ne için:

google-services.json , GoogleApiClient ile bağlanılırken doğrulanması gereken geliştirici kimlik bilgilerini ve yapılandırma ayarlarını içerir. Hizmetiniz geliştirici hesabınızı algıladığı için test cihazınızla sorunsuz çalışıyor ancak uygulamanızı herkese açık olarak yayınladıktan sonra json dosyası olmadan çalışmayacaktır. Bu yüzden silmeyin.

Resmi Belgeler şöyle diyor:

Uygulama, uygulamanın hangi kapsamlara ve API'lere erişeceğini belirleyen bir GoogleApiClient oluşturur. GoogleApiClient bağlandığında, kullanıcı oturum açmış olur.

Bkz nasıl çalıştığını bölüm.


3
Cevabınız için teşekkür ederim. Sadece soruları var ama yardım etmeye istekli olup olmadığınızı merak ediyorum. Bağlantınızın Oturum Açma hizmetlerine gönderildiğini gördüm. Ancak uygulamamda yalnızca Google Analytics ve GCM hizmetini kullanıyorsam ve oturum açmam gerekmiyorsa, yine de bu dosyayı saklamam gerekir mi? Teşekkürler!
Arthur Wang

3
Evet, analiz veya GCM için bu yapılandırma dosyasına da ihtiyacınız var. Dokümantasyonun 2. adımında, BİR KONFİGÜRASYON DOSYASI AL bağlantısına gitmeniz gerekiyordu . Bu conf dosyasını GCM veya analiz için kullanıp kullanmayacağınızı seçmeniz gerekir. Bu dosya sadece geliştirici Kimliğinizi içerir (api anahtarı, geliştirme bilgisayarınızın SHA1 karması vb.)
Mohammad Arman

2
@androidGuy Geç yanıt için özür dilerim. Son sürüm SHA1 keyhash ile yeni yapılandırma google-services.json dosyasını oluşturmanız gerektiğini düşünüyorum. Aksi takdirde, bazı özellikler oyun mağazasında yayınlandıktan sonra çalışmayabilir. Önceki karışıklık için özür dilerim, birisinin yanlış yöne gitmesine izin vereceği için önceki yorumumu sileceğim.
Mohammad Arman

1
Başka bir kişinin sözlerini kopyalarsanız, bunları uygun şekilde blok alıntı yapmalı ve tam atıfta bulunmalısınız . Bunun altındaki cevabın intihal olduğunu düşündüğüm için düzenlemenizi geri aldım.
Brad Larson

6
Güvenlik ne olacak? Google-services.json yeniden oluşturulabilir ve apk'den okunabilir mi? İçinde bir geliştirici ve API anahtarı görüyorum. Başkaları tarafından bilinmesini sevmiyorum ...
Tino

4

Modülünüze google-services.json ekleyin ve TEMİZLİK ve YENİDEN OLUŞTURMA yapın. App / build / generated / res / google-services / debug / values ​​/ values.xml'de proje özelliklerinizle bir xml dosyası oluşturulur ve normal xml dizesi gibi kolayca erişebilirsiniz. Misal:

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

google-service.json belgesinde tüm dizeleri ve daha fazla bilgiyi içeren bir liste var

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.