समस्या निवारण एवं amp; यूनिटी और फायरबेस के लिए अक्सर पूछे जाने वाले प्रश्न

यह पृष्ठ यूनिटी-विशिष्ट समस्याओं के लिए युक्तियाँ और समस्या निवारण प्रदान करता है जिनका सामना आप फायरबेस का उपयोग करते समय कर सकते हैं।

क्या आपके पास अन्य चुनौतियाँ हैं या आपको नीचे दी गई अपनी समस्या दिखाई नहीं देती? अधिक पैन-फ़ायरबेस या उत्पाद-विशिष्ट 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. सभी प्लेटफ़ॉर्म के लिए निम्नलिखित 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

यदि आप कोई अन्य फायरबेस प्लगइन आयात करते हैं:

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

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

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

इसलिए, फायरबेस यूनिटी एसडीके संस्करण 5.4.0 और बाद में प्रकार अग्रेषण डीएलएल प्रदान करता है जो पार्स प्रकारों को अग्रेषित करता है (उदाहरण के लिए, System.Threading.Tasks.Task का पार्स कार्यान्वयन) .NET ढांचे के लिए। दुर्भाग्यवश, यूनिटी 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>

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

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

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

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

यूनिटी 2020 में फायरबेस एंड्रॉइड कॉन्फिग फ़ाइल गुम है

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

यूनिटी 2020 में, सभी एंड्रॉइड संसाधनों को .androidlib प्रत्यय वाली निर्देशिकाओं में होना चाहिए। यदि आपका प्रोजेक्ट फायरबेस एसडीके का उपयोग कर रहा है जो 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

कोकोपोड्स के साथ iOS के लिए निर्माण करते समय समस्याएँ

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

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

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

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

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

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

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

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