परिचय
अपने Android ऐप्लिकेशन में Google के एपीआई या Firebase की सेवाओं को चालू करने के लिए, आपको अपनी build.gradle
फ़ाइल में google-services
प्लग इन जोड़ना पड़ सकता है:
dependencies {
classpath 'com.google.gms:google-services:4.4.2'
// ...
}
google-services
प्लग इन के दो मुख्य फ़ंक्शन हैं:
google-services.json
फ़ाइल को प्रोसेस करें और ऐसे Android रिसोर्स बनाएं जिनका इस्तेमाल आपके ऐप्लिकेशन के कोड में किया जा सकता है. ज़्यादा जानकारी के लिए, JSON फ़ाइल जोड़ना लेख पढ़ें.आपने जिन सेवाओं को चालू किया है उनके लिए ज़रूरी बुनियादी लाइब्रेरी की डिपेंडेंसी जोड़ें. इस चरण के लिए, आपको अपनी
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
में मौजूद कोई भी सदस्य, पैकेज के नाम से मेल नहीं खाता है, तो एक अपवाद दिखता है.
इस दस्तावेज़ के बाकी हिस्से में, हम ऊपर बताए गए तरीके से तय किए गए 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 की सेवाओं का प्लग इन इसके बिना काम नहीं कर सकता".
जवाब: 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 फ़ाइल पाएं.