परिचय
अपने Android ऐप्लिकेशन में Google के एपीआई या Firebase की सेवाओं को चालू करने के लिए, आपको अपनी build.gradle फ़ाइल में google-services प्लगिन जोड़ना पड़ सकता है:
dependencies {
classpath 'com.google.gms:google-services:4.4.4'
// ...
}
google-services प्लगिन के दो मुख्य फ़ंक्शन होते हैं:
google-services.jsonफ़ाइल को प्रोसेस करना और Android ऐसे संसाधन बनाना जिनका इस्तेमाल आपके ऐप्लिकेशन के कोड में किया जा सकता है. ज़्यादा जानकारी के लिए, JSON फ़ाइल जोड़ना लेख पढ़ें.चालू की गई सेवाओं के लिए ज़रूरी बुनियादी लाइब्रेरी के लिए, डिपेंडेंसी जोड़ना. इसके लिए, आपको अपनी
app/build.gradleफ़ाइल में Google Services Gradle प्लगिन लागू करना होगा. जैसे:
apply plugin: 'com.google.gms.google-services'./gradlew :app:dependenciesचलाकर, इस चरण का नतीजा देखा जा सकता है.
JSON फ़ाइल जोड़ना
आम तौर पर, google-services.json फ़ाइल को app/ डायरेक्ट्री में रखा जाता है. यह डायरेक्ट्री, Android Studio ऐप्लिकेशन मॉड्यूल की रूट डायरेक्ट्री होती है. वर्शन 2.2.0 से, प्लगिन, बिल्ड टाइप और प्रॉडक्ट फ़्लेवर के हिसाब से JSON फ़ाइलों के साथ काम करता है. डायरेक्ट्री के ये सभी स्ट्रक्चर मान्य हैं:
// dogfood and release are build types. app/ google-services.json src/dogfood/google-services.json src/release/google-services.json ...
ध्यान दें: रिलीज़ डायरेक्ट्री में google-services.json फ़ाइल उपलब्ध कराने से, प्रोडक्शन एपीके के लिए अलग Firebase प्रोजेक्ट बनाए रखा जा सकता है.
प्रॉडक्ट फ़्लेवर का इस्तेमाल करने पर, डायरेक्ट्री के ये ज़्यादा जटिल स्ट्रक्चर भी मान्य होते हैं.
// free and paid are product flavors. app/ google-services.json src/dogfood/paid/google-services.json src/release/free/google-services.json ...
JSON फ़ाइल को प्रोसेस करना
google-services.json फ़ाइल का बुनियादी स्ट्रक्चर यह है:
{
"project_info": {...},
"client": [...],
}project_info ऑब्जेक्ट में आपके प्रोजेक्ट के बारे में सामान्य जानकारी होती है. वहीं, client कलेक्शन के हर सदस्य में, उन क्लाइंट (Android ऐप्लिकेशन) के बारे में जानकारी होती है जिन्हें आपने प्रोजेक्ट में जोड़ा है.
अपने Android ऐप्लिकेशन के लिए JSON फ़ाइल को प्रोसेस करते समय, प्लगिन सिर्फ़ उस client ऑब्जेक्ट का इस्तेमाल करता है जो आपके पैकेज के नाम (मौजूदा बिल्ड टाइप के लिए) से मेल खाता है. इसके लिए, प्लगिन इस लॉजिक का इस्तेमाल करता है:
clientकलेक्शन के हर सदस्य के लिए:client_info/android_client_info/package_nameकी वैल्यू देखें- अगर पैकेज का नाम इस वैल्यू से मेल खाता है, तो सदस्य ऑब्जेक्ट को वापस करें.
- अगर
clientके किसी भी सदस्य का नाम, पैकेज के नाम से मेल नहीं खाता है, तो एक अपवाद जनरेट होता है.
इस दस्तावेज़ के बाकी हिस्सों में, हम client कलेक्शन के उस सदस्य के लिए {YOUR_CLIENT} का इस्तेमाल करेंगे जिसे ऊपर बताई गई प्रोसेस से तय किया गया है.
JSON को प्रोसेस करने का मुख्य नतीजा यह होता है कि दो एक्सएमएल फ़ाइलें जनरेट होती हैं. इन्हें Java कोड में Android के संसाधनों के तौर पर रेफ़र किया जा सकता है. यहां हर फ़ाइल का एक उदाहरण दिया गया है:
app/build/generated/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/generated/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>एक्सएमएल फ़ाइलों में मौजूद हर वैल्यू, google-services.json फ़ाइल में यहां मौजूद होती है. अगर आपके Android प्रोजेक्ट में कोई ऐसी कॉन्फ़िगरेशन है जिसकी वजह से google-services प्लगिन का इस्तेमाल नहीं किया जा सकता, तो इन वैल्यू का इस्तेमाल करके एक्सएमएल फ़ाइलों को मैन्युअल तरीके से फिर से बनाया जा सकता है:
google_app_id:
{YOUR_CLIENT}/client_info/mobilesdk_app_idgcm_defaultSenderId:
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_idfirebase_database_url:
project_info/firebase_url
google_api_key:
{YOUR_CLIENT}/api_key/current_keygoogle_crash_reporting_api_key:
{YOUR_CLIENT}/api_key/current_keyproject_id:
project_info/project_id
समस्या का हल
सवाल: बिल्ड करते समय, मुझे यह गड़बड़ी का मैसेज मिलता है: "File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it".
जवाब: Firebase कंसोल की मदद से, आप
डाउनलोड कर सकते हैं google-services.json.
इसके अलावा, ज़्यादातर एपीआई के लिए क्विकस्टार्ट गाइड में, इस फ़ाइल को जनरेट करने के निर्देश दिए गए हैं.
google-services.json फ़ाइल डाउनलोड करने के बाद, इसे अपने Android Studio प्रोजेक्ट के app/ फ़ोल्डर में कॉपी करें. अगर एक से ज़्यादा बिल्ड टाइप का इस्तेमाल किया जा रहा है, तो इसे app/src/{build_type} फ़ोल्डर में कॉपी करें.
सवाल: मुझे "R.string.gcm_defaultSenderId", "R.xml.global_tracker" वगैरह सिंबल नहीं मिल रहे हैं.
जवाब: पक्का करें कि आपकी build.gradle फ़ाइल में मौजूद पैकेज का नाम, google-services.json फ़ाइल बनाते समय डाले गए पैकेज के नाम से मेल खाता हो. अगर आपको पक्का नहीं है, तो शुरू करने का तरीका फिर से अपनाएं और नई JSON फ़ाइल पाएं.