शुरुआती जानकारी
यहां Firebase SDK for Unity का इस्तेमाल करके, Unity गेम के लिए कंपाइल और बिल्ड करने की प्रोसेस को डीबग करने के बारे में बताया गया है. इसमें बताया गया है कि किसी नए प्लैटफ़ॉर्म के लिए गेम को कॉन्फ़िगर और बिल्ड करते समय या अपडेट के बाद, आपको जो सामान्य समस्याएं आ सकती हैं उन्हें कैसे ठीक किया जाए. इन्हें इस क्रम में व्यवस्थित किया गया है कि प्रोसेस के दौरान ये गड़बड़ियां कब हो सकती हैं. इनसे एक-एक करके सलाह लें और हर समस्या के हल होने के बाद आगे बढ़ें.
ज़्यादा जानकारी के लिए, इस दस्तावेज़ के साथ-साथ Firebase for Unity के बारे में अक्सर पूछे जाने वाले सवाल देखें.
प्ले मोड के कंपाइलेशन से जुड़ी समस्याएं
बिल्ड से जुड़ी समस्याओं की पहली क्लास, मोबाइल बिल्ड शुरू करने से पहले एडिटर में टेस्टिंग के दौरान हो सकती है. इस सेक्शन में, Play Mode से पहले और उसके दौरान होने वाली सभी Firebase गड़बड़ियों के बारे में बताया गया है.
Unity शुरू होने या डिपेंडेंसी, कोड या अन्य ऐसेट में बदलाव का पता चलने पर, यह प्रोजेक्ट को फिर से बनाने की कोशिश करेगा. अगर उस समय प्रोजेक्ट कंपाइल नहीं हो पाता है, तो एडिटर, कंपाइलेशन से जुड़ी गड़बड़ियों को कंसोल में लॉग कर देगा. साथ ही, अगर Play Mode में जाने की कोशिश की जाती है, तो आपको Unity के Scene टैब में गड़बड़ी का पॉप-अप दिखेगा. इसमें All compiler errors have to be fixed before you can enter playmode! लिखा होगा.
Firebase से जुड़ी कंपाइलेशन की समस्याओं को डीबग करना
टाइप, क्लास, तरीके, और सदस्यों की जानकारी मौजूद नहीं है
Firebase से जुड़ी कई समस्याएं, एडिटर और कंपाइलर के ज़रूरी टाइप, क्लास, तरीके, और सदस्यों का पता न लगा पाने की वजह से होती हैं. इसके सामान्य लक्षणों में ये शामिल हैं:
The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?
The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)
‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'
समस्या को हल करने का तरीका:
अगर कोड में Firebase क्लास या तरीकों का इस्तेमाल किया जा रहा है, तो पक्का करें कि आपने ज़रूरी Firebase प्रॉडक्ट के लिए सही
usingडायरेक्टिव उपलब्ध कराए हों.पुष्टि करें कि आपने सही Firebase पैकेज इंपोर्ट किए हों:
- सही पैकेज इंपोर्ट करने के लिए, इनमें से कोई एक तरीका अपनाएं:
- Firebase Unity SDK को
.unitypackages के तौर पर जोड़ें या - Unity को इंस्टॉल करने के अन्य विकल्प में जाकर, कोई एक विकल्प आज़माएं.
- Firebase Unity SDK को
- पक्का करें कि आपके प्रोजेक्ट और EDM4U में मौजूद हर Firebase प्रॉडक्ट:
- एक ही वर्शन पर हों
- इन्हें सिर्फ़
.unitypackages के तौर पर या सिर्फ़ Unity Package Manager के ज़रिए इंस्टॉल किया गया हो.
- सही पैकेज इंपोर्ट करने के लिए, इनमें से कोई एक तरीका अपनाएं:
अगर आपने Firebase Unity SDK के "10.0.0" से पहले के वर्शन को
.unitypackages के तौर पर इंपोर्ट किया है, तो Firebase Unity SDK के ज़िप संग्रह में .NET 3.x और .NET 4.x, दोनों के लिए पैकेज शामिल होते हैं. पक्का करें कि आपने अपने प्रोजेक्ट में, सिर्फ़ .NET Framework के साथ काम करने वाला लेवल शामिल किया हो:- यूनिटी एडिटर और .NET फ़्रेमवर्क के वर्शन के बीच काम करने की सुविधा के बारे में, अपने यूनिटी प्रोजेक्ट में Firebase जोड़ना लेख में बताया गया है.
- अगर आपने गलती से Firebase पैकेज को .NET फ़्रेमवर्क के गलत लेवल पर इंपोर्ट कर लिया है या आपको
.unitypackages का इस्तेमाल करने के बजाय, Unity को इंस्टॉल करने के अन्य विकल्पों में से किसी एक का इस्तेमाल करना है, तो सबसे सही तरीका यह है कि माइग्रेशन के इस सेक्शन में बताए गए तरीकों का इस्तेमाल करके, हर Firebase पैकेज को हटा दें. इसके बाद, सभी Firebase पैकेज को फिर से इंपोर्ट करें.
देखें कि आपका एडिटर, प्रोजेक्ट को फिर से बना रहा हो. साथ ही, गेम खेलने की आपकी कोशिशों से, प्रोजेक्ट की मौजूदा स्थिति का पता चलता हो:
- डिफ़ॉल्ट रूप से, Unity एडिटर को इस तरह सेट किया जाता है कि जब भी ऐसेट या कॉन्फ़िगरेशन में बदलाव का पता चले, तो वह फिर से बनाए.
- ऐसा हो सकता है कि इस सुविधा को बंद कर दिया गया हो और Unity Editor को मैन्युअल रीफ़्रेश/फिर से कंपाइल करें पर सेट किया गया हो. इसकी जांच करें. अगर ऐसा है, तो मैन्युअल तरीके से रीफ़्रेश करने की कोशिश करें.
प्ले मोड में रनटाइम से जुड़ी गड़बड़ियां
अगर आपका गेम शुरू हो जाता है, लेकिन चलते समय Firebase से जुड़ी समस्याएं आती हैं, तो यह तरीका आज़माएं:
पक्का करें कि आपने Mac OS पर "Security & Privacy" में जाकर, Firebase बंडलों को अनुमति दी हो
अगर Mac OS पर एडिटर में गेम शुरू करते समय, आपको एक डायलॉग दिखता है. इसमें लिखा होता है, "FirebaseCppApp-<version>.bundle को खोला नहीं जा सकता, क्योंकि डेवलपर की पुष्टि नहीं की जा सकी.", तो आपको Mac के Security & Privacy मेन्यू में जाकर, उस बंडल फ़ाइल को अनुमति देनी होगी.
इसके लिए, Apple आइकॉन > System Preferences > Security & Privacy पर क्लिक करें
सुरक्षा मेन्यू में, पेज पर नीचे की ओर, एक सेक्शन होता है. इसमें लिखा होता है कि ""FirebaseCppApp-<version>.bundle" को इस्तेमाल करने से रोक दिया गया है, क्योंकि यह किसी ऐसे डेवलपर का नहीं है जिसकी पहचान की जा चुकी है."
फिर भी अनुमति दें लेबल वाले बटन पर क्लिक करें.

Unity पर वापस जाएं और Play को फिर से दबाएं.
इसके बाद, आपको पहली चेतावनी की तरह ही एक और चेतावनी दिखेगी:

खोलें को दबाएं. इससे आपका प्रोग्राम आगे बढ़ पाएगा. आपसे इस फ़ाइल के बारे में दोबारा नहीं पूछा जाएगा.
पक्का करें कि आपके प्रोजेक्ट में मान्य कॉन्फ़िगरेशन फ़ाइलें मौजूद हों और उनका इस्तेमाल किया जा रहा हो
- पक्का करें कि फ़ाइल > बिल्ड सेटिंग में, आपकी बिल्ड सेटिंग उस टारगेट (iOS या Android) के लिए सेट की गई हों जिसके लिए आपको बिल्ड करना है. ज़्यादा जानकारी के लिए, Unity Build Settings Documentation पढ़ें.
- प्रोजेक्ट की सेटिंग > आपके ऐप्लिकेशन में जाकर, Firebase कंसोल से अपने ऐप्लिकेशन (Android के लिए
google-services.jsonया iOS के लिएGoogleService-Info.plist) और बिल्ड टारगेट के लिए कॉन्फ़िगरेशन फ़ाइल डाउनलोड करें: अगर आपके पास पहले से ये फ़ाइलें हैं, तो उन्हें अपने प्रोजेक्ट से मिटा दें और उनकी जगह सबसे नए वर्शन वाली फ़ाइलें जोड़ें. साथ ही, पक्का करें कि फ़ाइलों के नाम ऊपर दिए गए नामों से मेल खाते हों और उनमें "(1)" या कोई अन्य संख्या न जुड़ी हो. - अगर कंसोल में
Assets/StreamingAssets/में मौजूद फ़ाइलों के बारे में कोई मैसेज है, तो पक्का करें कि कंसोल में ऐसा कोई मैसेज न हो जिसमें कहा गया हो कि Unity, वहां मौजूद फ़ाइलों में बदलाव नहीं कर सका - पक्का करें कि
Assets/StreamingAssets/google-services-desktop.jsonजनरेट हो गया हो और डाउनलोड की गई कॉन्फ़िगरेशन फ़ाइल से मेल खाता हो.- अगर यह अपने-आप जनरेट नहीं होती है और
StreamingAssets/मौजूद नहीं है, तोAssetsडायरेक्ट्री में डायरेक्ट्री को मैन्युअल तरीके से बनाएं. - देखें कि Unity ने अब
google-services-desktop.jsonजनरेट किया है या नहीं.
- अगर यह अपने-आप जनरेट नहीं होती है और
पक्का करें कि हर Firebase प्रॉडक्ट और EDM4U को सिर्फ़ .unitypackage या Unity Package Manager के ज़रिए इंस्टॉल किया गया हो
Assets/फ़ोल्डर और Unity Package Manager, दोनों की जांच करें. इससे यह पक्का किया जा सकेगा कि Firebase SDK और EDM4U, सिर्फ़ एक तरीके से इंस्टॉल किए गए हों.- Google के बनाए गए कुछ प्लगिन, जैसे कि Google Play और तीसरे पक्ष के प्लगिन, EDM4U पर निर्भर हो सकते हैं. इन प्लगिन में, EDM4U को
.unitypackages या Unity Package Manager (UPM) पैकेज में शामिल किया जा सकता है. पक्का करें कि आपके प्रोजेक्ट में EDM4U की सिर्फ़ एक कॉपी हो. अगर कोई UPM पैकेज EDM4U पर निर्भर करता है, तो सिर्फ़ EDM4U के UPM वर्शन को बनाए रखना सबसे अच्छा होता है. इन्हें Google APIs for Unity के संग्रह पेज पर देखा जा सकता है.
पक्का करें कि आपके प्रोजेक्ट में मौजूद हर Firebase प्रॉडक्ट का वर्शन एक जैसा हो.
- अगर Firebase SDK टूल,
.unitypackageके ज़रिए इंस्टॉल किए गए थे, तो देखें किAssets/Firebase/Plugins/x86_64/में मौजूद सभीFirebaseCppAppलाइब्रेरी एक ही वर्शन पर हैं या नहीं. - अगर Firebase SDK टूल, Unity Package Manager (UPM) के ज़रिए इंस्टॉल किए गए थे, तो Windows > Package Manager खोलें. इसके बाद, "Firebase" खोजें और पक्का करें कि सभी Firebase पैकेज एक ही वर्शन पर हों.
- अगर आपके प्रोजेक्ट में Firebase SDK टूल के अलग-अलग वर्शन हैं, तो हमारा सुझाव है कि आप सभी Firebase SDK टूल को पूरी तरह से हटा दें. इसके बाद, सभी Firebase SDK टूल को फिर से इंस्टॉल करें. इस बार, सभी SDK टूल के वर्शन एक जैसे होने चाहिए. सबसे अच्छा तरीका यह है कि माइग्रेशन के इस सेक्शन में बताए गए तरीकों का इस्तेमाल करके, हर Firebase पैकेज को हटा दिया जाए.
रिज़ॉल्वर और टारगेट डिवाइस के बिल्ड में गड़बड़ियां
अगर आपका गेम एडिटर में काम करता है (आपके चुने गए बिल्ड टारगेट के लिए कॉन्फ़िगर किया गया है), तो इसके बाद पुष्टि करें कि External Dependency Manager for Unity (EDM4U) सही तरीके से कॉन्फ़िगर किया गया है और काम कर रहा है.
EDM4U की GitHub रिपॉज़िटरी में, इस प्रोसेस के लिए चरण-दर-चरण निर्देश वाली गाइड दी गई है. आपको आगे बढ़ने से पहले, इसे पढ़ना और इसका पालन करना चाहिए.
'सिंगल डेक्स' से जुड़ी समस्याएं और कोड छोटा करना (Cloud Firestore का इस्तेमाल करने पर ज़रूरी है)
Android ऐप्लिकेशन बनाते समय, आपको एक ही dex फ़ाइल होने की वजह से, बिल्ड फ़ेल होने की समस्या आ सकती है. अगर आपके प्रोजेक्ट को Gradle बिल्ड सिस्टम का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो गड़बड़ी का मैसेज कुछ इस तरह दिखेगा:
Cannot fit requested classes in a single dex file.
.dex फ़ाइलों का इस्तेमाल, Android ऐप्लिकेशन के लिए क्लास की परिभाषाओं और उनसे जुड़े डेटा को सेव करने के लिए किया जाता है. एक डेक्स फ़ाइल में ज़्यादा से ज़्यादा 65,536 तरीकों का रेफ़रंस दिया जा सकता है. अगर आपके प्रोजेक्ट में मौजूद सभी Android लाइब्रेरी में तरीकों की कुल संख्या इस सीमा से ज़्यादा है, तो बिल्ड नहीं हो पाएंगे.
यहां दिए गए दो चरणों को क्रम से लागू किया जा सकता है. मल्टीडेक्स की सुविधा सिर्फ़ तब चालू करें, जब कोड छोटा करने से समस्या हल न हो.
कोड छोटा करने की सुविधा चालू करना
Unity ने 2017.2 में Minification की सुविधा लॉन्च की थी. इससे इस्तेमाल न हो रहे कोड को हटाया जा सकता है. इससे एक ही dex फ़ाइल में, रेफ़र किए गए तरीकों की कुल संख्या कम हो सकती है. * यह विकल्प, Player Settings > Android > Publishing Settings > Minify में जाकर देखा जा सकता है. * Unity के अलग-अलग वर्शन में विकल्प अलग-अलग हो सकते हैं. इसलिए, Unity के आधिकारिक दस्तावेज़ देखें.
Multidex चालू करना
अगर कोड छोटा करने की सुविधा चालू करने के बाद भी, रेफ़र किए गए तरीकों की संख्या तय सीमा से ज़्यादा है, तो multidex चालू करें. Unity में ऐसा करने के कई तरीके हैं:
- अगर प्लेयर सेटिंग में जाकर कस्टम Gradle टेंप्लेट चालू किया गया है, तो
mainTemplate.gradleमें बदलाव करें. - अगर एक्सपोर्ट किए गए प्रोजेक्ट को बनाने के लिए Android Studio का इस्तेमाल किया जाता है, तो मॉड्यूल-लेवल की build.gradle फ़ाइल में बदलाव करें.
ज़्यादा जानकारी के लिए, मल्टीडेक्स के लिए उपयोगकर्ता गाइड देखें.
टारगेट डिवाइस पर रनटाइम से जुड़ी गड़बड़ियों को समझना और उन्हें ठीक करना
अगर आपका गेम एडिटर में काम करता है और इसे टारगेट डिवाइस के लिए बनाया और इंस्टॉल किया जा सकता है, लेकिन आपको रनटाइम से जुड़ी गड़बड़ियां मिलती हैं, तो डिवाइस पर जनरेट किए गए लॉग की जांच करें.
इस सेक्शन में, संभावित गड़बड़ियों के लिए अपने लॉग की जांच करने का तरीका बताया गया है. साथ ही, ऐसी गड़बड़ी के बारे में भी बताया गया है जो सिर्फ़ डिवाइस या सिम्युलेटर पर रनटाइम के दौरान होती है.
Android
सिम्युलेटर
- अपने Emulator की कंसोल में दिखाए गए लॉग की जांच करें या Logcat विंडो देखें.
डिवाइस
adb और adb logcat के बारे में जानें. साथ ही, इन्हें इस्तेमाल करने का तरीका जानें.
- आउटपुट को फ़िल्टर करने के लिए, कमांड लाइन एनवायरमेंट के अलग-अलग टूल इस्तेमाल किए जा सकते हैं. हालांकि, इसके बजाय logcat के विकल्पों को देखें.
ADB सेशन को नए सिरे से शुरू करने का आसान तरीका यह है:
adb logcat -c && adb logcat <OPTIONS>यहां
OPTIONSवे फ़्लैग हैं जिन्हें कमांड लाइन में पास करके, आउटपुट को फ़िल्टर किया जाता है.
Android Studio के ज़रिए Logcat का इस्तेमाल करना
Android Studio के ज़रिए Logcat का इस्तेमाल करते समय, खोज के अतिरिक्त टूल उपलब्ध होते हैं. इनसे खोज के बेहतर नतीजे पाना आसान हो जाता है.
iOS
लॉग की जांच करना
अगर किसी फ़िज़िकल डिवाइस पर टेस्ट किया जा रहा है, तो उसे अपने कंप्यूटर से कनेक्ट करें. Xcode में lldb की जांच करें.
Swift से जुड़ी समस्याएं
अगर आपको ऐसे गड़बड़ी लॉग मिलते हैं जिनमें Swift का ज़िक्र है, तो उनके बारे में जानने के लिए External Dependency Manager for Unity सेक्शन देखें.
आगे के चरण
अगर आपके गेम में अब भी Firebase से जुड़ी कंपाइल, बिल्ड या रन करने की समस्याएं आ रही हैं, तो Firebase SDK for Unity से जुड़ी समस्याओं वाले पेज पर जाएं और नई समस्या की शिकायत करें. इसके अलावा, ज़्यादा विकल्पों के बारे में जानने के लिए, Firebase के सहायता पेज पर जाएं.