פתרון בעיות & שאלות נפוצות עבור Unity ו-Firebase

דף זה מציע טיפים ופתרון בעיות עבור בעיות ספציפיות ל-Unity שאתה עלול להיתקל בהן בעת ​​השימוש ב-Firebase.

יש לך אתגרים אחרים או שאתה לא רואה את הבעיה שלך מתוארת למטה? הקפד לעיין בשאלות הנפוצות הראשיות של Firebase לקבלת שאלות נפוצות נוספות על פאן-Firebase או ספציפיות למוצר.

תאימות .NET בעת שימוש ב-Unity 2017.x ואילך

Firebase תומך ב-.NET 4.x כאפשרות בנייה ניסיונית ב-Unity 2017 ואילך. יישומי פלאגין של Firebase משתמשים ברכיבים של Parse SDK כדי לספק כמה מחלקות .NET 4.x בגרסאות קודמות של .NET.

לכן, Firebase Unity SDK גרסה 5.4.0 ואילך מספקים תוספים התואמים ל-.NET 3.x או .NET 4.x בספריות dotnet3 ו- dotnet4 של Firebase Unity SDK.

אם אתה מייבא פלאגין של 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:

  • בפרויקט Unity שלך, נווט אל Assets > Play Services Resolver > Version Handler > Update כדי להפעיל את קובצי ה-DLL הנכונים עבור הפרויקט שלך.

קומפילציה של Unity 2017.1 IL2CPP בפרויקטים של .NET 4.x

Firebase תומך ב-.NET 4.x כאפשרות בנייה ניסיונית ב-Unity 2017 ואילך. יישומי פלאגין של Firebase משתמשים ברכיבים של Parse SDK כדי לספק כמה מחלקות .NET 4.x בגרסאות קודמות של .NET.

לפיכך, Firebase Unity SDK גרסה 5.4.0 ואילך מספק DLL להעברת סוגים המעבירים סוגי Parse (לדוגמה, יישום Parse של System.Threading.Tasks.Task ) למסגרת NET. למרבה הצער, IL2CPP (טרנספילר הממיר C# ל-C++) הנשלח ב-Unity 2017.1.x אינו מעבד כראוי קובצי DLL של העברת סוגים, מה שמביא לשגיאות בנייה הדומות לשגיאות הבאות:

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

כרגע אין פתרון זמין עבור שגיאות בנייה של .NET 4.x IL2CPP ב-Unity 2017.1, לכן עליך לשדרג ל-Unity 2017.2 ואילך כדי להשתמש ב-.NET 4.x בפרויקטים המורכבים עם IL2CPP.

Unity 2017.2 נטוורקינג

Firebase Realtime Database יוצר חיבורי רשת TLS באמצעות מחסנית הרשת .NET. פונקציונליות ה-TLS שבורה ב-Unity 2017.2 בעת שימוש ב-.NET 4.6, מה שגורם לפלאגין Realtime Database להיכשל בעורכים ובשולחן העבודה.

אין פתרון לבעיה זו, לכן עליך להשתמש בגרסה אחרת של Unity, למשל גרסה 2017.1 או 2017.3.

חסר קובץ תצורה של Firebase Android ב-Unity 2020

על מנת לתמוך בגרסאות של Unity שאין להן את היכולת להתאים אישית את בניית Gradle, כלי העורך של Firebase מייצר Assets/Plugins/Android/Firebase/res/values/google-services.xml כמשאב אנדרואיד שייארוז ב- Android build, כך ש-Firebase SDK יכול להשתמש בו כדי לאתחל את מופע ברירת המחדל של FirebaseApp.

ב-Unity 2020, כל משאבי Android חייבים להיות בספריות עם סיומת .androidlib . אם הפרויקט שלך משתמש ב-SDK של Firebase שיוצר ספריית Assets/Plugins/Android/Firebase , שנה את שמו ל- Assets/Plugins/Android/Firebase.androidlib . ודא שהוא מכיל AndroidManifest.xml , project.properties ו- res/values/google-services.xml .

בעיה בדקס יחיד בזמן בניית אפליקציית אנדרואיד

בזמן בניית אפליקציית אנדרואיד, אתה עלול להיתקל בכשל בנייה הקשור ליצירת קובץ dex יחיד. הודעת השגיאה נראית דומה להלן, אם הפרוייקט שלך מוגדר להשתמש במערכת הבנייה Gradle.

Cannot fit requested classes in a single dex file.

קבצי Dalvik ניתנים להפעלה ( .dex ) משמשים כדי להחזיק קבוצה של הגדרות מחלקות ונתוני התוספת המשויכים להן עבור יישומי אנדרואיד ( .apk ). קובץ dex בודד מוגבל להתייחסות ל-65,536 שיטות. הבנייה תיכשל אם המספר הכולל של השיטות מכל ספריות האנדרואיד בפרויקט שלך חורג מהמגבלה הזו.

Unity הציגה Minification בשנת 2017.2, המשתמשת ב-Proguard (או בכלים אחרים בכמה גרסאות של Unity) כדי להסיר קוד שאינו בשימוש, מה שיכול להפחית את המספר הכולל של שיטות הפניות בקובץ dex יחיד. ניתן למצוא את האפשרות בהגדרות נגן > אנדרואיד > הגדרות פרסום > צמצום . האפשרויות עשויות להיות שונות בגרסה שונה של Unity אז עיין בתיעוד הרשמי של Unity.

אם מספר השיטות המוזכרות עדיין חורג מהמגבלה, אפשרות נוספת היא להפעיל multidex . ישנן מספר דרכים להשיג זאת ב-Unity:

  • אם Custom Gradle Template תחת Player Settings מופעלת, שנה את mainTemplate.gradle .
  • אם אתה משתמש ב-Android Studio כדי לבנות את הפרויקט המיוצא, שנה את קובץ build.gradle ברמת המודול.

פרטים נוספים ניתן למצוא במדריך למשתמש של multidex .

תמיכה ב-Java 8 ומניעת סוכר עבור Android ב-Unity 2017 ו-Unity 2018 (Firebase Unity SDK 8.0.0 ומעלה)

במאי 2021 (Firebase BoM v28.0.0), Firebase השביתה ביטול סוכר עבור כל ספריות האנדרואיד שלה (ראה הערת שחרור ). בעת בניית אפליקציית Android עם Firebase Unity SDK (8.0.0 ומעלה), ייתכן שתראה את שגיאת הבנייה הבאה:

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

שינוי זה משפיע על רכיבי Android ב-Unity 2017 ו-Unity 2018 בלבד. גרסאות חדשות יותר של Unity מוסיפות את בלוק compileOptions כברירת מחדל בקבצי בניית Gradle. כדי לתקן שגיאת בנייה זו ב-Unity 2017 ו-Unity 2018, בצע אחת מהפעולות הבאות:

  • הוסף בלוק compileOptions לתבנית הדרגה שלך:

    1. השתמש Gradle כמערכת הבנייה.
    2. הפעל Custom Gradle Template תחת Player Settings .
    3. הוסף את השורות הבאות ל- mainTemplate.gradle (או ברמת המודול build.gradle אם מייצאים פרויקט עבור Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • לחלופין, הגדל את minSdkVersion עבור פרויקט האנדרואיד שלך ל-26 ומעלה.

ראה גם פתרון בעיות ב-Android - מניעת תקלות בנייה .

בעיות בעת בנייה עבור iOS עם Cocoapods

בעת בנייה עבור 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 תלוי באופן שבו הם יובאו בהתחלה. להלן שתי שיטות הייבוא ​​החלופיות:

  • ייבוא ​​קובצי .unitypackage תחת ספריית Assets/ של הפרויקט שלך
  • ייבוא ​​באמצעות Unity Package Manager (UPM)
    • זו הדרך המומלצת לניהול חבילות ב-Unity 2018.4+.
    • השתמש בשיטה זו כדי להקל על עדכוני גרסאות עתידיים ולנקות את Assets/ ספריות שלך.

בפרויקט Unity שלך, עליך להשתמש רק בשיטת ייבוא ​​אחת כדי לנהל את כל חבילות Firebase שלך. ההוראות שלהלן יכולות לשמש לא רק כדי לעדכן את הגרסה של חבילות בודדות, אלא גם, במידת הצורך, כדי להעביר את ניהול החבילות ל-UPM (שיטת הייבוא ​​המומלצת).