Google की सेवाओं का Gradle प्लगिन और JSON कॉन्फ़िगरेशन फ़ाइल

अपने Android प्रोजेक्ट में Firebase जोड़ने के लिए, आपको अपने प्रोजेक्ट में google-services Gradle प्लगिन और google-services.json कॉन्फ़िगरेशन फ़ाइल जोड़नी होगी.

अगर आपने Firebase कंसोल, Management REST API या Firebase CLI का इस्तेमाल करके, अपने Android प्रोजेक्ट में Firebase जोड़ा है, तो आपको अपने प्रोजेक्ट में Gradle प्लगिन और JSON कॉन्फ़िगरेशन फ़ाइल को मैन्युअल तरीके से जोड़ना होगा. हालांकि, Firebase Assistant for Android Studio का इस्तेमाल करने पर, सेटअप के दौरान ये काम अपने-आप हो जाते हैं.

Gradle प्लगिन जोड़ना

आपको Google services Gradle प्लगिन (google-services) को अपनी build.gradle फ़ाइल में जोड़ना होगा:

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

Google services Gradle प्लगिन के दो मुख्य काम हैं:

  • यह google-services.json कॉन्फ़िगरेशन फ़ाइल को प्रोसेस करता है और Android संसाधन बनाता है. इन संसाधनों का इस्तेमाल आपके ऐप्लिकेशन के कोड में किया जा सकता है.

  • यह उन बुनियादी लाइब्रेरी के लिए डिपेंडेंसी जोड़ता है जिनकी ज़रूरत उन सेवाओं के लिए होती है जिन्हें आपने चालू किया है. इस चरण के लिए, आपको अपनी 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
    ...

प्रॉडक्ट फ़्लेवर का इस्तेमाल करने पर, डायरेक्ट्री के ये ज़्यादा जटिल स्ट्रक्चर भी मान्य होते हैं.

// 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 प्रोसेसिंग का मुख्य नतीजा यह होता है कि दो एक्सएमएल फ़ाइलें जनरेट होती हैं. इन्हें अपने कोड में 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 Gradle प्लगिन का इस्तेमाल नहीं किया जा सकता, तो इन वैल्यू का इस्तेमाल करके, 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
    

समस्या का हल

बिल्ड करते समय, मुझे गड़बड़ी का यह मैसेज मिलता है: 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 फ़ाइल पाएं.