एकता और फायरबेस के लिए समस्या निवारण और अक्सर पूछे जाने वाले प्रश्न

यह पृष्ठ उन एकता-विशिष्ट समस्याओं के लिए सुझाव और समस्या निवारण प्रदान करता है जिनका सामना आपको Firebase का उपयोग करते समय करना पड़ सकता है।

अन्य चुनौतियाँ हैं या आपकी समस्या नीचे उल्लिखित नहीं है? अधिक पैन-Firebase या उत्पाद-विशिष्ट FAQ के लिए मुख्य Firebase FAQ देखना सुनिश्चित करें।

एकता 2017.x और बाद में उपयोग करते समय .NET संगतता

फायरबेस यूनिटी 2017 और बाद में प्रायोगिक बिल्ड विकल्प के रूप में .NET 4.x का समर्थन करता है। फायरबेस प्लगइन्स .NET के पुराने संस्करणों में कुछ .NET 4.x कक्षाएं प्रदान करने के लिए पार्स एसडीके के घटकों का उपयोग करते हैं।

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

यदि आप एक फायरबेस प्लगइन आयात करते हैं जो आपके प्रोजेक्ट में सक्षम .NET संस्करण के साथ असंगत है, तो आप पार्स एसडीके द्वारा कार्यान्वित किए गए .NET ढांचे में कुछ प्रकार से संकलित त्रुटियां देखेंगे।

यदि आप .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. सभी प्लेटफ़ॉर्म के लिए निम्न DLL को निकालें या अक्षम करें:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. सभी प्लेटफॉर्म के लिए निम्नलिखित डीएलएल सक्षम करें:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

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

  • अपने यूनिटी प्रोजेक्ट में, अपने प्रोजेक्ट के लिए सही डीएलएल को सक्षम करने के लिए एसेट्स > प्ले सर्विसेज रिजॉल्वर > वर्जन हैंडलर > अपडेट पर नेविगेट करें।

एकता 2017.1 .NET 4.x परियोजनाओं में IL2CPP संकलन

फायरबेस यूनिटी 2017 और बाद में प्रायोगिक बिल्ड विकल्प के रूप में .NET 4.x का समर्थन करता है। फायरबेस प्लगइन्स .NET के पुराने संस्करणों में कुछ .NET 4.x कक्षाएं प्रदान करने के लिए पार्स एसडीके के घटकों का उपयोग करते हैं।

इसलिए, फायरबेस यूनिटी एसडीके संस्करण 5.4.0 और बाद में टाइप अग्रेषण डीएलएल प्रदान करता है जो पार्स प्रकारों को आगे बढ़ाता है (उदाहरण के लिए, System.Threading.Tasks.Task का पार्स कार्यान्वयन) .NET ढांचे में। दुर्भाग्य से, IL2CPP (एक ट्रांसपिलर जो C# को C++ में कनवर्ट करता है) जिसे यूनिटी 2017.1.x में शिप किया जाता है, सही प्रकार से DLL को अग्रेषित करने की प्रक्रिया नहीं करता है जिसके परिणामस्वरूप निम्न के समान बिल्ड त्रुटियां होती हैं:

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

यूनिटी 2017.1 में .NET 4.x IL2CPP बिल्ड त्रुटियों के लिए वर्तमान में कोई समाधान उपलब्ध नहीं है, इसलिए आपको IL2CPP के साथ संकलित परियोजनाओं में .NET 4.x का उपयोग करने के लिए यूनिटी 2017.2 या बाद के संस्करण में अपग्रेड करना होगा।

एकता 2017.2 नेटवर्किंग

Firebase रीयलटाइम डेटाबेस .NET नेटवर्किंग स्टैक का उपयोग करके TLS नेटवर्क कनेक्शन बनाता है। टीएलएस कार्यक्षमता यूनिटी 2017.2 में टूट गई है जब .NET 4.6 का उपयोग करते हुए संपादकों और डेस्कटॉप पर रीयलटाइम डेटाबेस प्लगइन विफल हो जाता है।

इस समस्या का कोई समाधान नहीं है, इसलिए आपको एकता के भिन्न संस्करण का उपयोग करना चाहिए, उदाहरण के लिए 2017.1 या 2017.3 संस्करण।

Unity 2020 . में गुम Firebase Android कॉन्फ़िग फ़ाइल

एकता के उन संस्करणों का समर्थन करने के लिए जिनमें ग्रैडल बिल्ड को अनुकूलित करने की क्षमता नहीं है, फायरबेस संपादक टूल Assets/Plugins/Android/Firebase/res/values/google-services.xml को एक एंड्रॉइड संसाधन के रूप में एक में पैक करने के लिए उत्पन्न करता है। एंड्रॉइड बिल्ड, ताकि फ़ायरबेस एसडीके डिफ़ॉल्ट फ़ायरबेस ऐप इंस्टेंस को प्रारंभ करने के लिए इसका उपयोग कर सके।

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

एंड्रॉइड ऐप बनाते समय सिंगल डेक्स के साथ एक समस्या

एंड्रॉइड ऐप का निर्माण करते समय, आपको एकल डेक्स फ़ाइल होने से संबंधित बिल्ड विफलता का सामना करना पड़ सकता है। यदि आपका प्रोजेक्ट ग्रैडल बिल्ड सिस्टम का उपयोग करने के लिए कॉन्फ़िगर किया गया है, तो त्रुटि संदेश निम्न के जैसा दिखता है।

Cannot fit requested classes in a single dex file.

Dalvik Executable ( .dex ) फाइलों का उपयोग एंड्रॉइड एप्लिकेशन ( .apk ) के लिए क्लास डेफिनिशन और उनके संबंधित सहायक डेटा के एक सेट को रखने के लिए किया जाता है। एक एकल डेक्स फ़ाइल 65,536 विधियों के संदर्भ तक सीमित है। यदि आपके प्रोजेक्ट में सभी Android लाइब्रेरी से विधियों की कुल संख्या इस सीमा से अधिक है, तो बिल्ड विफल हो जाएगा।

यूनिटी ने 2017 में मिनिफिकेशन की शुरुआत की, जो अप्रयुक्त कोड को हटाने के लिए प्रोगार्ड (या यूनिटी के कुछ संस्करणों में अन्य टूल्स) का उपयोग करता है, जो एक एकल डीएक्स फ़ाइल में संदर्भित विधियों की कुल संख्या को कम कर सकता है। विकल्प प्लेयर सेटिंग्स > एंड्रॉइड > प्रकाशन सेटिंग्स > छोटा करें में पाया जा सकता है। एकता के विभिन्न संस्करणों में विकल्प भिन्न हो सकते हैं इसलिए आधिकारिक एकता दस्तावेज़ देखें।

यदि संदर्भित विधियों की संख्या अभी भी सीमा से अधिक है, तो दूसरा विकल्प multidex को सक्षम करना है। एकता में इसे प्राप्त करने के कई तरीके हैं:

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

अधिक विवरण मल्टीडेक्स उपयोगकर्ता मार्गदर्शिका में पाया जा सकता है।

जावा 8 सपोर्ट और एंड्रॉइड के लिए डिसुगरिंग यूनिटी 2017 और यूनिटी 2018 में बनाता है (फायरबेस यूनिटी एसडीके 8.0.0 और उच्चतर)

मई 2021 (Firebase BoM v28.0.0) में, Firebase ने अपने सभी Android पुस्तकालयों के लिए डिसगरिंग को अक्षम कर दिया ( रिलीज़ नोट देखें)। फायरबेस यूनिटी एसडीके (8.0.0 और उच्चतर) के साथ एक एंड्रॉइड ऐप बनाते समय, आपको निम्न बिल्ड त्रुटि दिखाई दे सकती है:

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

यह परिवर्तन केवल यूनिटी 2017 और यूनिटी 2018 में Android बिल्ड को प्रभावित करता है। यूनिटी के नए संस्करण ग्रैडल बिल्ड फाइलों में डिफ़ॉल्ट रूप से compileOptions ब्लॉक जोड़ते हैं। यूनिटी 2017 और यूनिटी 2018 में इस बिल्ड त्रुटि को ठीक करने के लिए, निम्न में से कोई एक कार्य करें:

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

    1. बिल्ड सिस्टम के रूप में Gradle का उपयोग करें।
    2. Player Settings के तहत Custom Gradle Template सक्षम करें।
    3. निम्नलिखित पंक्तियों को mainTemplate.gradle में जोड़ें (या मॉड्यूल स्तर build.gradle यदि Android Studio के लिए कोई प्रोजेक्ट निर्यात कर रहा है):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • वैकल्पिक रूप से, अपने Android प्रोजेक्ट के लिए minSdkVersion को 26 या उससे अधिक तक बढ़ाएँ।

Android समस्या निवारण भी देखें - बिल्ड विफलताओं को कम करना।

Cocoapods के साथ iOS के लिए निर्माण करते समय समस्याएं

IOS के लिए निर्माण करते समय, भाषा स्थान, या UTF-8 एन्कोडिंग के बारे में त्रुटि के साथ Cocoapod स्थापना विफल हो सकती है। इस मुद्दे को हल करने के लिए वर्तमान में कई अलग-अलग तरीके हैं।

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

  • Cocoapods के संस्करण को 1.10.2 पर डाउनग्रेड करें। समस्या केवल संस्करण 1.11 और नए में मौजूद है।

  • अपने ~/.bash_profile या समकक्ष में, export LANG=en_US.UTF-8

फायरबेस यूनिटी एसडीके के संस्करण को कैसे अपडेट करें

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

  • आपके प्रोजेक्ट की Assets/ निर्देशिका के अंतर्गत .unitypackage फ़ाइलें आयात करना
  • यूनिटी पैकेज मैनेजर (UPM) का उपयोग करके आयात करना
    • यह एकता 2018.4+ में पैकेज प्रबंधित करने का अनुशंसित तरीका है।
    • भविष्य के संस्करण अपडेट को आसान बनाने के लिए और अपने Assets/ निर्देशिका को क्लीनर बनाने के लिए इस पद्धति का उपयोग करें।

अपने यूनिटी प्रोजेक्ट में, आपको अपने सभी फायरबेस पैकेजों को प्रबंधित करने के लिए केवल एक आयात विधि का उपयोग करना चाहिए। नीचे दिए गए निर्देशों का उपयोग न केवल अलग-अलग पैकेजों के संस्करण को अद्यतन करने के लिए किया जा सकता है, बल्कि यदि आवश्यक हो, तो पैकेज प्रबंधन को UPM (अनुशंसित आयात विधि) में स्थानांतरित करने के लिए भी किया जा सकता है।