Google Services Gradle प्लगिन

परिचय

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

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

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 के किसी भी सदस्य का नाम, पैकेज के नाम से मेल नहीं खाता है, तो एक अपवाद थ्रो किया जाता है.

इस दस्तावेज़ के बाकी हिस्से में, हम {YOUR_CLIENT} का इस्तेमाल करके, ऊपर दी गई प्रोसेस से तय किए गए 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 प्लगिन का इस्तेमाल नहीं किया जा सकता, तो इन वैल्यू का इस्तेमाल करके, XML फ़ाइलों को मैन्युअल तरीके से फिर से बनाया जा सकता है:

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 Services Plugin इसके बिना काम नहीं कर सकता".

जवाब: google-services.json को डाउनलोड करने के लिए, Firebase कंसोल का इस्तेमाल करें. इसके अलावा, ज़्यादातर एपीआई के लिए क्विकस्टार्ट गाइड में, इस फ़ाइल को जनरेट करने के निर्देश दिए गए हैं. google-services.json फ़ाइल डाउनलोड करने के बाद, इसे अपने Android Studio प्रोजेक्ट के app/ फ़ोल्डर में कॉपी करें. अगर एक से ज़्यादा बिल्ड टाइप का इस्तेमाल किया जा रहा है, तो इसे app/src/{build_type} फ़ोल्डर में कॉपी करें.

सवाल: मुझे "R.string.gcm_defaultSenderId", "R.xml.global_tracker" वगैरह सिंबल नहीं मिल रहा है.

जवाब: पक्का करें कि आपकी build.gradle फ़ाइल में मौजूद पैकेज का नाम, google-services.json फ़ाइल बनाते समय डाले गए पैकेज के नाम से मेल खाता हो. अगर आपको पक्के तौर पर नहीं पता है, तो शुरू करने की प्रोसेस को फिर से पूरा करें और नई JSON फ़ाइल पाएं.