Google Services Gradle प्लगिन

परिचय

अपने Android ऐप्लिकेशन में Google के एपीआई या Firebase की सेवाओं को चालू करने के लिए, आपको अपनी build.gradle फ़ाइल में google-services प्लग इन जोड़ना पड़ सकता है:

dependencies {
    classpath 'com.google.gms:google-services:4.4.2'
    // ...
}

google-services प्लग इन के दो मुख्य फ़ंक्शन हैं:

  1. google-services.json फ़ाइल को प्रोसेस करें और ऐसे Android रिसोर्स बनाएं जिनका इस्तेमाल आपके ऐप्लिकेशन के कोड में किया जा सकता है. ज़्यादा जानकारी के लिए, JSON फ़ाइल जोड़ना लेख पढ़ें.
  2. आपने जिन सेवाओं को चालू किया है उनके लिए ज़रूरी बुनियादी लाइब्रेरी की डिपेंडेंसी जोड़ें. इस चरण के लिए, आपको अपनी 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 फ़ाइल उपलब्ध कराने पर, आपको अपने प्रोडक्शन APK के लिए एक अलग 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_id

gcm_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_id

firebase_database_url:

project_info/firebase_url

google_api_key:

{YOUR_CLIENT}/api_key/current_key

google_crash_reporting_api_key:

{YOUR_CLIENT}/api_key/current_key

project_id:

project_info/project_id

समस्या का हल

सवाल: बिल्ड करते समय मुझे गड़बड़ी का यह मैसेज मिलता है: "मॉड्यूल के रूट फ़ोल्डर में फ़ाइल google-services.json मौजूद नहीं है. Google की सेवाओं का प्लग इन इसके बिना काम नहीं कर सकता".

जवाब: 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 फ़ाइल पाएं.