समस्या का हल करना & 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. सभी प्लैटफ़ॉर्म के लिए, इन DLL को चालू करें:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

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

  1. सभी प्लैटफ़ॉर्म के लिए, इन DLL को हटाएं या बंद करें:
    • 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.

Android ऐप्लिकेशन (.apk) के लिए, क्लास डेफ़िनिशन और उनसे जुड़े अडजंक्ट डेटा का सेट रखने के लिए, Dalvik Executable (.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 (Firebase Unity SDK 8.0.0 और इसके बाद के वर्शन) में, Android बिल्ड के लिए Java 8 की सुविधा और डी-शुगरिंग

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 Package Manager (UPM) का इस्तेमाल करके इंपोर्ट करना
    • Unity 2018.4 और इसके बाद के वर्शन में पैकेज मैनेज करने के लिए, यह तरीका अपनाने का सुझाव दिया जाता है.
    • आने वाले समय में वर्शन अपडेट करने और अपनी Assets/ डायरेक्ट्री को बेहतर बनाने के लिए, यह तरीका अपनाएं.

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