Google की सेवाओं का Gradle प्लग इन

सुविधा के बारे में जानकारी

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

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

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

  1. google-services.json फ़ाइल को प्रोसेस करें और अपने ऐप्लिकेशन के कोड में इस्तेमाल किए जा सकने वाले Android के रिसॉर्स बनाएं. ज़्यादा जानकारी के लिए, JSON फ़ाइल जोड़ना देखें.
  2. चालू की गई सेवाओं के लिए ज़रूरी बुनियादी लाइब्रेरी के लिए डिपेंडेंसी जोड़ें. इस चरण के लिए, आपको अपनी app/build.gradle फ़ाइल में Google की सेवाएं 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/generate/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/generate/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 फ़ाइल पाएं.