यह पृष्ठ यूनिटी-विशिष्ट समस्याओं के लिए युक्तियाँ और समस्या निवारण प्रदान करता है जिनका सामना आप फायरबेस का उपयोग करते समय कर सकते हैं।
क्या आपके पास अन्य चुनौतियाँ हैं या आपको नीचे दी गई अपनी समस्या दिखाई नहीं देती? अधिक पैन-फ़ायरबेस या उत्पाद-विशिष्ट 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 का उपयोग कर रहे हैं:
- सभी प्लेटफ़ॉर्म के लिए निम्नलिखित DLL को हटाएँ या अक्षम करें:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- सभी प्लेटफ़ॉर्म के लिए निम्नलिखित DLL सक्षम करें:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
यदि आप .NET 4.x का उपयोग कर रहे हैं, तो संकलन त्रुटि को हल करने के लिए:
- सभी प्लेटफ़ॉर्म के लिए निम्नलिखित DLL को हटाएँ या अक्षम करें:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- सभी प्लेटफ़ॉर्म के लिए निम्नलिखित 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
ब्लॉक जोड़ें:- बिल्ड सिस्टम के रूप में
Gradle
उपयोग करें। -
Player Settings
के अंतर्गतCustom Gradle Template
सक्षम करें। निम्नलिखित पंक्तियों को
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/
निर्देशिका को साफ-सुथरा बनाने के लिए इस पद्धति का उपयोग करें।
अपने यूनिटी प्रोजेक्ट में, आपको अपने सभी फायरबेस पैकेजों को प्रबंधित करने के लिए केवल एक आयात विधि का उपयोग करना चाहिए। नीचे दिए गए निर्देशों का उपयोग न केवल व्यक्तिगत पैकेजों के संस्करण को अद्यतन करने के लिए किया जा सकता है, बल्कि यदि आवश्यक हो, तो पैकेज प्रबंधन को यूपीएम (अनुशंसित आयात विधि) में स्थानांतरित करने के लिए भी किया जा सकता है।
यदि फायरबेस पैकेज Assets/
निर्देशिका में हैं, तो आपके पास एसडीके संस्करण को अपडेट करने के लिए दो विकल्प हैं:
विकल्प 1 (अनुशंसित) : यूपीएम का उपयोग करने के लिए माइग्रेट करें (यूनिटी 2018.4+ में उपलब्ध)
- पैकेज प्रबंधन को यूपीएम में स्थानांतरित करने के लिए फायरबेस द्वारा दिए गए निर्देशों का पालन करें।
- हालाँकि इस विधि के लिए
.unitypackage
वर्कफ़्लो का उपयोग जारी रखने की तुलना में अधिक प्रारंभिक सेटअप की आवश्यकता होती है, यह बाद के SDK संस्करण अपडेट में आसानी से लाभ देता है।
विकल्प 2 :
Assets/
निर्देशिका में आयात करने के लिए.unitypackage
फ़ाइलों का उपयोग जारी रखेंअद्यतन संस्करण के लिए प्रत्येक पैकेज को आयात करें।
यदि आप Firebase वेबसाइट से firebase_unity_sdk.zip डाउनलोड करते हैं, तो सुनिश्चित करें कि आप सभी
.unitypackages
सहीdotnet
फ़ोल्डर से आयात करते हैं।- यदि आप यूनिटी 2019 या उसके बाद का उपयोग कर रहे हैं, तो
dotnet4
फ़ोल्डर से आयात करें। - अन्यथा, प्लेयर सेटिंग्स में स्क्रिप्टिंग रनटाइम संस्करण का चयन करें, और यदि यह ".NET 3.x" पर सेट है, तो
dotnet3
फ़ोल्डर से आयात करें।
- यदि आप यूनिटी 2019 या उसके बाद का उपयोग कर रहे हैं, तो
पहले आयातित पैकेज संस्करणों की ओवरराइटिंग को बाहरी निर्भरता प्रबंधक द्वारा स्वचालित रूप से नियंत्रित किया जाना चाहिए (जो आपके द्वारा Firebase
.unitypackages
आयात करते समय स्वचालित रूप से शामिल होता है)।हालाँकि, यदि और केवल यदि यह स्वचालित प्रक्रिया विफल हो जाती है, तो आपको निम्नलिखित फ़ोल्डरों को मैन्युअल रूप से हटाना होगा और फिर उपरोक्त आयात चरण को फिर से आज़माना होगा।
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
यदि फायरबेस पैकेज यूपीएम द्वारा प्रबंधित किए जाते हैं, तो नए एसडीके संस्करण को .tgz
के रूप में आयात करें । यह आयात स्वचालित रूप से पिछले संस्करण को अधिलेखित कर देगा.