Google Services Gradle प्लगिन

शुरुआती जानकारी

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

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

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 फ़ाइल जोड़कर, अपने प्रोडक्शन APKs के लिए एक अलग 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 Services प्लगिन इसके बिना काम नहीं करता".

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