शुरुआती जानकारी
यहां 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 को
.unitypackage
s के तौर पर जोड़ें या - Unity को इंस्टॉल करने के अन्य विकल्प में जाकर, कोई एक विकल्प आज़माएं.
- Firebase Unity SDK को
- पक्का करें कि आपके प्रोजेक्ट और EDM4U में मौजूद हर Firebase प्रॉडक्ट:
- एक ही वर्शन पर हों
- इन्हें सिर्फ़
.unitypackage
s के तौर पर या सिर्फ़ Unity Package Manager के ज़रिए इंस्टॉल किया गया हो.
- सही पैकेज इंपोर्ट करने के लिए, इनमें से कोई एक तरीका अपनाएं:
अगर आपने Firebase Unity SDK के "10.0.0" से पहले के वर्शन को
.unitypackage
s के तौर पर इंपोर्ट किया है, तो Firebase Unity SDK के ज़िप संग्रह में .NET 3.x और .NET 4.x, दोनों के लिए पैकेज शामिल होते हैं. पक्का करें कि आपने अपने प्रोजेक्ट में, सिर्फ़ .NET Framework के साथ काम करने वाला लेवल शामिल किया हो:- यूनिटी एडिटर और .NET फ़्रेमवर्क के वर्शन के बीच काम करने की सुविधा के बारे में, अपने यूनिटी प्रोजेक्ट में Firebase जोड़ना लेख में बताया गया है.
- अगर आपने गलती से Firebase पैकेज को .NET Framework के गलत लेवल पर इंपोर्ट कर लिया है या आपको
.unitypackage
s का इस्तेमाल करने के बजाय, Unity को इंस्टॉल करने के अन्य विकल्पों में से किसी एक का इस्तेमाल करना है, तो सबसे सही तरीका यह है कि माइग्रेशन के इस सेक्शन में बताए गए तरीकों का इस्तेमाल करके, हर Firebase पैकेज को हटा दें. इसके बाद, सभी Firebase पैकेज को फिर से इंपोर्ट करें.
देखें कि आपका एडिटर, प्रोजेक्ट को फिर से बना रहा हो. साथ ही, गेम खेलने की कोशिश करने पर, प्रोजेक्ट की मौजूदा स्थिति दिख रही हो:
- डिफ़ॉल्ट रूप से, Unity एडिटर को इस तरह सेट किया जाता है कि जब भी ऐसेट या कॉन्फ़िगरेशन में बदलाव का पता चले, तो वह फिर से बनाए.
- ऐसा हो सकता है कि इस सुविधा को बंद कर दिया गया हो और Unity Editor को मैन्युअल रीफ़्रेश/फिर से कंपाइल करें पर सेट किया गया हो. इसकी जांच करें. अगर ऐसा है, तो मैन्युअल तरीके से रीफ़्रेश करने की कोशिश करें.
Play Mode में रनटाइम से जुड़ी गड़बड़ियां
अगर आपका गेम शुरू हो जाता है, लेकिन चलते समय Firebase से जुड़ी समस्याएं आती हैं, तो यह तरीका आज़माएं:
पक्का करें कि आपने Mac OS पर "Security & Privacy" में जाकर, Firebase बंडलों को अनुमति दी हो
अगर Mac OS पर एडिटर में गेम शुरू करते समय, आपको एक डायलॉग दिखता है. इसमें लिखा होता है, "FirebaseCppApp-<version>.bundle को खोला नहीं जा सकता, क्योंकि डेवलपर की पुष्टि नहीं की जा सकी.", तो आपको Mac के Security & Privacy मेन्यू में जाकर, उस बंडल फ़ाइल को अनुमति देनी होगी.
इसके लिए, Apple आइकॉन > System Preferences > Security & Privacy पर क्लिक करें
सुरक्षा मेन्यू में, पेज पर नीचे की ओर, एक सेक्शन होता है. इसमें लिखा होता है कि ""FirebaseCppApp-<version>.bundle" को इस्तेमाल करने से रोक दिया गया है, क्योंकि यह किसी ऐसे डेवलपर का नहीं है जिसकी पहचान की जा चुकी है."
किसी भी तरह से अनुमति दें लेबल वाले बटन पर क्लिक करें.
Unity पर वापस जाएं और चलाएं को फिर से दबाएं.
इसके बाद, आपको पहली चेतावनी की तरह ही एक और चेतावनी दिखेगी:
खोलें को दबाएं. इसके बाद, आपका प्रोग्राम आगे बढ़ पाएगा. आपसे इस फ़ाइल के बारे में दोबारा नहीं पूछा जाएगा.
पक्का करें कि आपके प्रोजेक्ट में मान्य कॉन्फ़िगरेशन फ़ाइलें मौजूद हों और उनका इस्तेमाल किया जा रहा हो
- पक्का करें कि फ़ाइल > बिल्ड सेटिंग में, आपकी बिल्ड सेटिंग उस टारगेट (iOS या Android) के लिए सेट हों जिसके लिए आपको बिल्ड करना है. ज़्यादा जानकारी के लिए, Unity Build Settings का दस्तावेज़ पढ़ें.
- अपनी ऐप्लिकेशन के लिए कॉन्फ़िगरेशन फ़ाइल (Android के लिए
google-services.json
या iOS के लिएGoogleService-Info.plist
) और बिल्ड टारगेट डाउनलोड करें. इसके लिए, Firebase कंसोल में प्रोजेक्ट सेटिंग > आपके ऐप्लिकेशन पर जाएं: अगर आपके पास पहले से ये फ़ाइलें हैं, तो अपने प्रोजेक्ट में जाकर इन्हें मिटाएं और इनकी जगह सबसे नया वर्शन इस्तेमाल करें. साथ ही, पक्का करें कि फ़ाइलों के नाम ऊपर दिखाए गए नामों से मेल खाते हों और उनमें "(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 को
.unitypackage
s या 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 के सहायता पेज पर जाएं.