समस्या का हल करना & Unity और Firebase के बारे में अक्सर पूछे जाने वाले सवाल

इस पेज पर, Unity से जुड़ी उन समस्याओं के बारे में सलाह और उन्हें हल करने का तरीका बताया गया है जो Firebase का इस्तेमाल करते समय आपको आ सकती हैं.

क्या आपके पास अन्य चुनौतियां हैं या क्या आपको नीचे दी गई अपनी समस्या नहीं दिख रही है? Firebase के बारे में अक्सर पूछे जाने वाले सवालों के जवाब पाने के लिए, Firebase के बारे में अक्सर पूछे जाने वाले मुख्य सवाल देखें.

Unity 2017.x और उसके बाद के वर्शन का इस्तेमाल करते समय, .NET के साथ काम करने की सुविधा

Firebase, Unity 2017 और इसके बाद के वर्शन में, एक्सपेरिमेंट के तौर पर उपलब्ध बिल्ड के विकल्प के तौर पर .NET 4.x के साथ काम करता है. Firebase प्लग इन, .NET के पुराने वर्शन में कुछ .NET 4.x क्लास उपलब्ध कराने के लिए, Parse SDK टूल के कॉम्पोनेंट का इस्तेमाल करते हैं.

इसलिए, Firebase Unity SDK टूल के वर्शन 5.4.0 और उसके बाद के वर्शन में ऐसे प्लग इन उपलब्ध होते हैं जो Firebase Unity SDK टूल की dotnet3 और dotnet4 डायरेक्ट्री में मौजूद .NET 3.x या .NET 4.x के साथ काम करते हैं.

अगर आपने कोई ऐसा Firebase प्लग इन इंपोर्ट किया है जो आपके प्रोजेक्ट में चालू .NET वर्शन के साथ काम नहीं करता है, तो आपको .NET फ़्रेमवर्क में कुछ टाइप की गड़बड़ियां दिखेंगी. ये गड़बड़ियां, Parse SDK की मदद से लागू की गई हैं.

अगर .NET 3.x का इस्तेमाल किया जा रहा है, तो कंपाइल करने से जुड़ी गड़बड़ी को ठीक करने के लिए:

  1. सभी प्लैटफ़ॉर्म के लिए, इन DLL को हटाएं या बंद करें:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. सभी प्लैटफ़ॉर्म के लिए ये डीएलएल चालू करें:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

अगर .NET 4.x का इस्तेमाल किया जा रहा है, तो कंपाइलेशन की गड़बड़ी को ठीक करने के लिए:

  1. सभी प्लैटफ़ॉर्म के लिए, यहां दिए गए डीएलएल हटाएं या बंद करें:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. सभी प्लैटफ़ॉर्म के लिए, इन DLL को चालू करें:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

अगर कोई दूसरा Firebase प्लग इन इंपोर्ट किया जाता है, तो:

  • अपने प्रोजेक्ट के लिए सही DLL चालू करने के लिए, अपने यूनिटी प्रोजेक्ट में ऐसेट > Play Services रिज़ॉल्वर > वर्शन हैंडलर > अपडेट करें पर जाएं.

.NET 4.x प्रोजेक्ट में Unity 2017.1 IL2CPP कंपाइलेशन

Firebase, Unity 2017 और इसके बाद के वर्शन में, एक्सपेरिमेंट के तौर पर उपलब्ध बिल्ड के विकल्प के तौर पर .NET 4.x के साथ काम करता है. Firebase प्लग इन, .NET के पुराने वर्शन में कुछ .NET 4.x क्लास उपलब्ध कराने के लिए, Parse SDK टूल के कॉम्पोनेंट का इस्तेमाल करते हैं.

इसलिए, Firebase Unity SDK टूल का 5.4.0 और उसके बाद के वर्शन, टाइप फ़ॉरवर्ड करने वाली डीडीएल उपलब्ध कराता है. ये डीडीएल, .NET फ़्रेमवर्क पर Parse टाइप (उदाहरण के लिए, System.Threading.Tasks.Task को Parse करने का तरीका) को फ़ॉरवर्ड करते हैं. माफ़ करें, Unity 2017.1.x में भेजा गया IL2CPP, C# को C++ में बदलने वाला ट्रांसपिलर है. यह DLL को फ़ॉरवर्ड करने वाले टाइप को सही तरीके से प्रोसेस नहीं करता है. इस वजह से, डीएलएल को सही तरीके से फ़ॉरवर्ड नहीं किया जा सकता. इसकी वजह से, यहां बताई गई गड़बड़ियां पैदा होती हैं:

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

फ़िलहाल, Unity 2017.1 में .NET 4.x IL2CPP के लिए, गड़बड़ी को ठीक करने का कोई तरीका उपलब्ध नहीं है. इसलिए, IL2CPP के साथ कॉम्पाइल किए गए प्रोजेक्ट में .NET 4.x का इस्तेमाल करने के लिए, आपको Unity 2017.2 या इसके बाद के वर्शन पर अपग्रेड करना होगा.

Unity 2017.2 नेटवर्किंग

Firebase Realtime Database, .NET नेटवर्किंग स्टैक का इस्तेमाल करके टीएलएस नेटवर्क कनेक्शन बनाता है. .NET 4.6 का इस्तेमाल करने पर Unity 2017.2 में TLS की सुविधा काम नहीं करती. इसकी वजह से एडिटर और डेस्कटॉप पर Realtime Database प्लगिन काम नहीं कर पाता.

इस समस्या को ठीक करने का कोई तरीका नहीं है. इसलिए, आपको Unity के किसी दूसरे वर्शन का इस्तेमाल करना चाहिए, जैसे कि 2017.1 या 2017.3.

Unity 2020 में Firebase Android कॉन्फ़िगरेशन फ़ाइल मौजूद नहीं है

Unity के ऐसे वर्शन के साथ काम करने के लिए जिनमें Gradle बिल्ड को पसंद के मुताबिक बनाने की सुविधा नहीं है, Firebase एडिटर टूल Assets/Plugins/Android/Firebase/res/values/google-services.xml को Android बिल्ड में पैकेज किए जाने वाले Android संसाधन के रूप में जनरेट करता है. इससे Firebase SDK टूल, डिफ़ॉल्ट FirebaseApp इंस्टेंस को शुरू करने के लिए इसका इस्तेमाल कर सकता है.

Unity 2020 में, सभी Android संसाधनों को .androidlib सफ़िक्स वाली डायरेक्ट्री में होना चाहिए. अगर आपका प्रोजेक्ट किसी ऐसे Firebase SDK टूल का इस्तेमाल कर रहा है जो Assets/Plugins/Android/Firebase डायरेक्ट्री जनरेट करता है, तो उसका नाम बदलकर Assets/Plugins/Android/Firebase.androidlib कर दें. पक्का करें कि इसमें AndroidManifest.xml, project.properties, और res/values/google-services.xml शामिल हों.

Android ऐप्लिकेशन बनाते समय, सिंगल डेक्स से जुड़ी समस्या

Android ऐप्लिकेशन बनाते समय, आपको एक ही dex फ़ाइल होने की वजह से, ऐप्लिकेशन बनाने में समस्या आ सकती है. अगर आपका प्रोजेक्ट, Gradle बिल्ड सिस्टम का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो गड़बड़ी का मैसेज कुछ ऐसा दिखेगा.

Cannot fit requested classes in a single dex file.

(.dex) फ़ाइलों का इस्तेमाल Android ऐप्लिकेशन (.apk) के लिए क्लास की परिभाषाओं के सेट और उनसे जुड़े सहायक डेटा को होल्ड करने के लिए किया जाता है. एक dex फ़ाइल में 65,536 मेथड ही शामिल किए जा सकते हैं. अगर आपके प्रोजेक्ट में मौजूद सभी Android लाइब्रेरी के तरीकों की कुल संख्या इस सीमा से ज़्यादा है, तो बिल्ड नहीं हो पाएगा.

Unity ने 2017.2 में छोटा करना सुविधा शुरू की थी. यह सुविधा, इस्तेमाल न किए गए कोड को हटाने के लिए Proguard (या Unity के कुछ वर्शन में अन्य टूल) का इस्तेमाल करती है. इससे किसी एक dex फ़ाइल में रेफ़रंस किए गए तरीकों की कुल संख्या कम हो सकती है. यह विकल्प प्लेयर सेटिंग > Android > प्रकाशन सेटिंग > छोटा करें में मिल सकता है. Unity के अलग-अलग वर्शन में ये विकल्प अलग-अलग हो सकते हैं. इसलिए, Unity के आधिकारिक दस्तावेज़ देखें.

अगर रेफ़रंस वाले तरीकों की संख्या अब भी तय सीमा से ज़्यादा है, तो multidex को चालू करने का दूसरा विकल्प भी है. Unity में ऐसा करने के कई तरीके हैं:

  • अगर Player Settings से कम Custom Gradle Template चालू है, तो mainTemplate.gradle में बदलाव करें.
  • अगर एक्सपोर्ट किए गए प्रोजेक्ट को बनाने के लिए Android Studio का इस्तेमाल किया जाता है, तो मॉड्यूल-लेवल build.gradle फ़ाइल में बदलाव करें.

ज़्यादा जानकारी के लिए, मल्टीडेक्स की उपयोगकर्ता गाइड देखें.

Unity 2017 और Unity 2018 में Android बिल्ड के लिए, Java 8 की सुविधा और डी-शुगरिंग (Firebase Unity SDK 8.0.0 और इसके बाद के वर्शन)

Firebase ने मई 2021 में (Firebase BoM v28.0.0), अपनी सभी Android लाइब्रेरी के लिए, डी-शुगर करने की सुविधा बंद कर दी है (रिलीज़ नोट देखें). Firebase Unity SDK (8.0.0 और इसके बाद के वर्शन) का इस्तेमाल करके Android ऐप्लिकेशन बनाते समय, आपको बिल्ड से जुड़ी यह गड़बड़ी दिख सकती है:

> Error while dexing.
 The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle

इस बदलाव का असर, सिर्फ़ Unity 2017 और Unity 2018 में मौजूद Android बिल्ड पर पड़ेगा. Unity के नए वर्शन, gradle बिल्ड फ़ाइलों में डिफ़ॉल्ट रूप से compileOptions ब्लॉक जोड़ते हैं. Unity 2017 और Unity 2018 में, इस बिल्ड से जुड़ी गड़बड़ी को ठीक करने के लिए, इनमें से कोई एक तरीका अपनाएं:

  • अपने Gradle टेंप्लेट में compileOptions ब्लॉक जोड़ें:

    1. Gradle को बिल्ड सिस्टम के तौर पर इस्तेमाल करें.
    2. Player Settings से कम Custom Gradle Template चालू करें.
    3. Android Studio के लिए प्रोजेक्ट एक्सपोर्ट करने पर, mainTemplate.gradle (या मॉड्यूल लेवल build.gradle) में ये लाइनें जोड़ें:

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • इसके अलावा, अपने Android प्रोजेक्ट के लिए minSdkVersion को 26 या उसके बाद के वर्शन पर सेट करें.

Android से जुड़ी समस्या हल करना - डी-शुगरिंग के दौरान बिल्ड में होने वाली गड़बड़ियां लेख भी पढ़ें.

Cocoapods की मदद से iOS के लिए ऐप्लिकेशन बनाते समय आने वाली समस्याएं

iOS के लिए बिल्ड करते समय, Cocoapod इंस्टॉल नहीं हो सकता. ऐसा, भाषा की लोकल या UTF-8 कोड में बदलने की गड़बड़ी की वजह से हो सकता है. फ़िलहाल, इस समस्या को हल करने के कई तरीके हैं.

  • टर्मिनल में, सीधे pod install चलाएं और इससे बनी xcworkspace फ़ाइल खोलें.

  • Cocoapods के वर्शन को 1.10.2 पर डाउनग्रेड करें. यह समस्या सिर्फ़ 1.11 और इसके बाद के वर्शन में मौजूद है.

  • अपने ~/.bash_profile या इसके बराबर की किसी वैल्यू में, export LANG=en_US.UTF-8 जोड़ें

Firebase Unity SDK टूल के वर्शन को अपडेट करने का तरीका

Firebase Unity SDK टूल के वर्शन अपडेट करने की प्रोसेस इस बात पर निर्भर करती है कि उन्हें शुरू में कैसे इंपोर्ट किया गया था. डेटा इंपोर्ट करने के दो अन्य तरीके यहां दिए गए हैं:

  • अपने प्रोजेक्ट की Assets/ डायरेक्ट्री में .unitypackage फ़ाइलें इंपोर्ट करना
  • Unity पैकेज मैनेजर (यूपीएम) का इस्तेमाल करके इंपोर्ट करना
    • Unity 2018.4 और इसके बाद के वर्शन में पैकेज मैनेज करने के लिए, यह तरीका अपनाने का सुझाव दिया जाता है.
    • इस तरीके का इस्तेमाल करके, आने वाले समय में वर्शन को आसानी से अपडेट किया जा सकता है. साथ ही, आपकी Assets/ डायरेक्ट्री भी साफ़-सुथरी बनी रहेगी.

अपने सभी Firebase पैकेज को मैनेज करने के लिए, आपको अपने यूनिटी प्रोजेक्ट में सिर्फ़ एक इंपोर्ट तरीके का इस्तेमाल करना चाहिए. नीचे दिए गए निर्देशों का इस्तेमाल, अलग-अलग पैकेज के वर्शन को अपडेट करने के साथ-साथ, ज़रूरत पड़ने पर पैकेज मैनेजमेंट को UPM (इंपोर्ट करने का सुझाया गया तरीका) पर माइग्रेट करने के लिए भी किया जा सकता है.