Google-services.json वास्तव में क्या करता है?


120

मैं अपने वर्तमान ऐप में Google Analytics और GCM सेवाओं को जोड़ने का काम करता हूं। दोनों सेवाओं के कार्यान्वयन के लिए मार्गदर्शिका पर, Google डेवलपर से एक json फ़ाइल जनरेट करने के लिए कहता है: google-services.json और इसे ऐप की रूट डायरेक्टरी में रखा।

मैंने पाया कि भले ही मैं इस जोंस फाइल को अपने ऐप से डिलीट कर दूं, फिर भी सेवाएं काम करती हैं।

बस यह जानना चाहते हैं कि वास्तव में यह फाइल किस लिए है? इसका क्या उपयोग है और यह कैसे काम करता है?

जवाबों:


197

मैंने Google-Services प्लगइन और json के बारे में थोड़ी खोजबीन की और इस प्लगइन के स्रोतों का पता लगाया।

पहली चीजें पहले

वर्गीकृत-प्लगइन google-services, जो classpath द्वारा संदर्भित है और लागू होने के साथ ही एक बिल्ड-टाइम प्लगइन है! तो यह केवल आपके ऐप की बिल्ड-प्रोसेस को प्रभावित करता है, लेकिन रनटाइम-प्रोसेस को नहीं!

यह प्लगइन केवल आपके ऐप में Google-सेवाओं को जल्दी से एकीकृत करने के लिए एक तेज-सहायक के रूप में है। जाहिर है, प्रक्रिया कुछ हद तक जटिल है और दस्तावेज नहीं है, इसलिए Google को यह स्पष्ट करना चाहिए था कि यह प्रक्रिया क्या करती है।

वास्तव में, मुझे प्लगइन संस्करण com.google.gms के लिए स्रोत कोड मिला: google-services: 1.4.0-Beta3 और didin इसमें कोई विशेष संदर्भ नहीं मिला Appinvites के बारे में और न ही मुझे App Invites के लिए कोई Google API मिला! (लेकिन शायद यह सिर्फ अपनी परियोजना आईडी के साथ एक सामान्य एपीआई परियोजना का उपयोग करता है, मैंने यह कोशिश नहीं की)

यह क्या करता है

आपके ऐप-मॉड्यूल में उल्लिखित google-services.json फ़ाइल के लिए Google-सेवाओं का क्रम-प्लगइन दिखता है। तब यह Google-API डेवलपर कंसोल द्वारा Google-services.json फ़ाइल में जेनरेट की गई प्रोजेक्ट-आईडी और ट्रैकिंग-आईडी जैसी कॉन्फ़िगर सेटिंग्स की तलाश करता है। यह पाया सेटिंग्स से, Android संसाधन मान निम्न पथ में उत्पन्न होते हैं:

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

उदाहरण के लिए अपने ऐप के डिबग-बिल्ड के लिए:

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

उदाहरण के लिए, यदि आपने GCM ट्यूटोरियल का अनुसरण किया है, तो JSON फ़ाइल में API प्रोजेक्ट की id निम्नलिखित android-resource के रूप में शामिल होगी:

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

इसलिए यह प्लगइन और JSON फ़ाइल आपके ऐप को चलाने या प्रकाशित करने के लिए आवश्यक नहीं है, विशिष्ट Google API सुविधाओं के आसान एकीकरण के लिए कुछ बुनियादी एंड्रॉइड-संसाधन फ़ाइलों को उत्पन्न करने के लिए यह केवल एक तेज सहायक है।

नीचे दिए गए स्रोत कोड में सूचना है कि Google- सेवा प्लगइन हमेशा आपके ऐप्लिकेशन / बिल्ड.gradle में परिभाषित किए गए प्रत्येक एप्लिकेशन-संस्करण के लिए उन Android-संसाधनों को उत्पन्न करता है।

यदि आप ऐसा नहीं चाहते हैं, तो आपको उन एप्लिकेशन-वेरिएंट में उन जेनरेट किए गए संसाधनों का उपयोग करना चाहिए जो आप चाहते हैं, और दूसरों को हटा दें। ऐप / बिल्ड.gradle से लागू होने वाली google-services प्लगइन को हटाना न भूलें, अन्यथा यह सभी ऐप-वेरिएंट के लिए पुनर्जीवित हो जाएगा।

यह क्या नहीं है

यह प्लगइन और JSON- फाइल आपके ऐप के लिए Google- सुविधाओं के आंतरिक कामकाज को सीधे प्रभावित नहीं करता है! अगर आपने पहले से ही जीसीएम या गूगल एनालिटिक्स को कैसे एकीकृत किया जाए, इसके बारे में developer.android.com पर पुराने ट्यूटोरियल्स का अनुसरण किया है, तो आपको gradle-plugin google-services या google-services.json फ़ाइल को भी एकीकृत करने की आवश्यकता नहीं है!

जहां मुझे स्रोत मिले, उसके बारे में ध्यान दें

आपके द्वारा Google-सेवाओं के ग्रेड-प्लगइन को एकीकृत करने के बाद और जब आपकी परियोजना सिंक हो जाती है, तो Gradle स्वचालित रूप से Google-सेवाओं की निर्भरता को इसी तरह के पथ पर डाउनलोड करता है (Windows पर, आपको अपने घर / लिनक्स के लिए .gradle देखने की आवश्यकता हो सकती है):

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

यदि आप इस जार-फ़ाइल को निकालते हैं, तो आपको दो फाइलें मिलेंगी:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

जिसमें ग्रेड-प्लगइन का सादा स्रोत कोड होता है।

GoogleServicesPlugin.groovy

ऐप-वेरिएंट की हैंडलिंग और रास्तों की बुनियादी परिभाषाएं आदि शामिल हैं।

GoogleServicesTask.java

इसमें वास्तविक कार्य-परिभाषा सम्‍मिलित है, यह देखने के लिए निम्नलिखित विधि की तलाश करें कि यह वास्तव में क्या करता है:

@TaskAction
public void action() throws IOException { 

2
बहुत बेहतर जवाब। अभी तक वहाँ मुद्दों होने के लिए जब सिफारिश की दृष्टिकोण (पालन करने की कोशिश कर रहा है developers.google.com/analytics/devguides/collection/android/v4 ) "स्वीकार किए जाते हैं जवाब" एक हास्यास्पद अतः अवधारणा है कि पूरी तरह से व्यक्ति कि कैन के धैर्य पर निर्भर करता है इस पर फैसला ...
AXD

7
इस पर एक अनुवर्ती नोट, क्योंकि यह आपके द्वारा पोस्ट किए जाने के बाद से बदल गया है। गूगल सेवा Gradle प्लगइन गाइड प्लग-इन के 2 समारोह में कहा गया है। यह "आपके द्वारा सक्षम सेवाओं के लिए आवश्यक बुनियादी पुस्तकालयों" के लिए कुछ निर्भरता जोड़ने का भी दावा करता है, साथ ही निर्भरता टकराव (संस्करण मिश्रण से) के लिए जांच भी करता है। मैंने स्रोतों में खोद लिया, और यह "compile com.google.android.gms: play-services-माप" को इंजेक्ट करने के लिए भी प्रकट होता है। अगर किसी को पॉप अप होता है तो निश्चित रूप से एक FYI करें और निश्चित नहीं है कि क्यों।
Android3000

3
यह देखते हुए कि फ़ाइल में कुछ कुंजियाँ हैं, क्या इसे संस्करण नियंत्रण में जोड़ना सुरक्षित है? जहां तक ​​मैं बता सकता हूं कि यह केवल उंगलियों के निशान है, इसलिए मुझे लगता है कि यह सुरक्षित है। लेकिन मैं पूरी तरह से निश्चित नहीं हूं।
प्रातः

1
मेरे निजी विचार में @exhuma, यदि आप एक निजी या कंपनी-आंतरिक परियोजना पर काम कर रहे हैं, तो इसे संस्करण नियंत्रण में जाँचना ठीक रहेगा। दूसरी ओर, मैं ओपन सोर्स प्रोजेक्ट्स के लिए संस्करण नियंत्रण में जसन-फाइल की जांच कभी नहीं करूंगा।
arne.jans

1
@ arne.jans क्या आप प्रेषक को गतिशील रूप से सेट करने में सक्षम हैं, या आप इसे मानों में हार्डकोड कर चुके हैं। xml? मुझे प्रेषक को गतिशील रूप से सर्वर से लाने की आवश्यकता है, और एफसीएम के पंजीकरण से।
ब्रेसियू

37

इस फ़ाइल के लिए वास्तव में क्या है:

google-services.json में डेवलपर क्रेडेंशियल और कॉन्फ़िगरेशन सेटिंग्स शामिल हैं, जिन्हें GoogleApiClient से कनेक्ट करते समय सत्यापित करने की आवश्यकता होती है। यद्यपि आपकी सेवा आपके परीक्षण उपकरण के साथ ठीक काम कर रही है, क्योंकि यह आपके डेवलपर खाते का पता लगा रहा है, लेकिन आपके ऐप को सार्वजनिक रूप से जारी करने के बाद, यह json फ़ाइल के बिना काम नहीं करेगा। तो इसे हटाएं नहीं।

आधिकारिक दस्तावेज कहता है:

एप्लिकेशन एक GoogleApiClient बनाता है, जो निर्दिष्ट करता है कि कौन सा स्कोप और API एक्सेस करेगा। GoogleApiClient कनेक्ट होने पर, उपयोगकर्ता में प्रवेश किया जाता है।

देखें कि यह कैसे काम करता है


3
आपके उत्तर के लिए धन्यवाद। यदि आपके पास मदद करने के लिए तैयार हैं तो बस आश्चर्य है। मैंने देखा कि आपका लिंक साइन इन सेवाओं में पोस्ट है। लेकिन अगर मैं केवल अपने ऐप में Google Analytics और GCM सेवा का उपयोग कर रहा हूं, तो साइन इन करने की आवश्यकता नहीं है, क्या मुझे अभी भी इस फ़ाइल को रखने की आवश्यकता है? धन्यवाद!
आर्थर वैंग

3
हां, एनालिटिक्स या GCM के लिए भी आपको इस कॉन्फ़िगरेशन फ़ाइल की आवश्यकता है। प्रलेखन के चरण 2 में, आपको GET A CONFIGURATION FILE लिंक पर जाना होगा। अगर आपको GCM या एनालिटिक्स के लिए इस कॉन्फिडेंस फाइल का उपयोग करना है, तो आपको सेलेक्ट करना होगा इस फ़ाइल में सिर्फ आपकी डेवलपर पहचान (जैसे एपीआई कुंजी, आपके विकास पीसी का SHA1 हैश) है
मोहम्मद अरमान

2
@androidGuy देर से प्रतिक्रिया के लिए क्षमा करें। मुझे लगता है कि आपको नवीनतम कॉन्फ़िगरेशन SHA1 कीहाश के साथ नई कॉन्फ़िगरेशन google-services.json फ़ाइल बनानी होगी। अन्य बुद्धिमान कुछ सुविधाएँ प्ले स्टोर पर प्रकाशित होने के बाद काम नहीं कर सकते हैं। पिछले भ्रम के लिए क्षमा करें, मैं अपनी पिछली टिप्पणी को हटा दूंगा क्योंकि यह किसी को गलत दिशा में ले जाने देगा।
मोहम्मद अरमान

1
यदि आप किसी अन्य व्यक्ति के शब्दों को कॉपी करते हैं, तो आपको उन्हें सही तरीके से ब्लॉक करना चाहिए और पूर्ण एट्रिब्यूशन प्रदान करना चाहिए । मैंने आपके संपादन को वापस ले लिया है, क्योंकि मैं इसे इस एक के नीचे दिए गए उत्तर का साहित्यिक चोरी मानता हूं।
ब्रैड लार्सन

6
सुरक्षा के बारे में क्या? क्या google-services.json को एपीके से फिर से बनाया और पढ़ा जा सकता है? मुझे एक डेवलपर और API कुंजी दिखाई देती है। मुझे यह पसंद नहीं है कि इसे दूसरों के द्वारा जाना जाए ...
Tino

4

अपने मॉड्यूल में google-services.json जोड़ें और एक CLEAN और A REBUILD करें। एक xml फ़ाइल आपके प्रोजेक्ट गुणों के साथ ऐप / बिल्ड / जेनरेट / रेस / google-services / debug / values ​​/ values.xml में जेनरेट की जाएगी और आप सामान्य xml string की तरह आसानी से एक्सेस कर सकते हैं। उदाहरण:

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

Google-service.json doc में सभी स्ट्रिंग और अधिक जानकारी के साथ एक सूची है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.