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

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

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

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

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

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

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

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

  1. सभी प्लैटफ़ॉर्म के लिए, यहां दिए गए डीएलएल हटाएं या बंद करें:
    • 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. सभी प्लैटफ़ॉर्म के लिए ये डीएलएल चालू करें:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

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

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

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

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

इसलिए, Firebase Unity SDK टूल का वर्शन 5.4.0 और इसके बाद के वर्शन में, टाइप फ़ॉरवर्ड करने की सुविधा वाले DLL की सुविधा दी जाती है. इससे पार्स टाइप (उदाहरण के लिए, System.Threading.Tasks.Task को लागू करना) को .NET फ़्रेमवर्क पर पार्स किया जाता है. माफ़ करें, 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 रीयल टाइम डेटाबेस, .NET नेटवर्किंग स्टैक का इस्तेमाल करके TLS नेटवर्क कनेक्शन बनाता है. .NET 4.6 का इस्तेमाल करने पर Unity 2017.2 में TLS की सुविधा काम नहीं करती. इसकी वजह से एडिटर और डेस्कटॉप पर रीयलटाइम डेटाबेस प्लगिन काम नहीं करता.

इस समस्या को ठीक करने का कोई तरीका नहीं है. इसलिए, आपको 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 (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 के नए वर्शन, ग्रेडल बिल्ड फ़ाइलों में डिफ़ॉल्ट रूप से compileOptions ब्लॉक को जोड़ते हैं. Unity 2017 और Unity 2018 में बिल्ड की इस गड़बड़ी को ठीक करने के लिए, इनमें से कोई एक काम करें:

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

    1. बिल्ड सिस्टम के तौर पर Gradle का इस्तेमाल करें.
    2. Player Settings से कम Custom Gradle Template चालू करें.
    3. mainTemplate.gradle में ये लाइनें जोड़ें (या अगर Android Studio के लिए कोई प्रोजेक्ट एक्सपोर्ट किया जा रहा है, तो मॉड्यूल लेवल 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 यूनिटी SDK टूल के वर्शन को अपडेट करने का तरीका

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

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

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