Google Services Gradle प्लगिन

परिचय

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

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

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

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

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

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 फ़ाइल बनानी चाहिए.