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

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

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

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

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

לכן, ערכת ה-SDK Firebase Unity מגרסה 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 הנכונים לפרויקט.

הידור IL2CPP ב-Unity 2017.1 בפרויקטים של ‎.NET 4.x

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

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

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

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

Networking ב-Unity 2017.2

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

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

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

כדי לתמוך בגרסאות של Unity שאין להן אפשרות להתאים אישית את ה-build של Gradle, כלי העריכה של Firebase יוצר את Assets/Plugins/Android/Firebase/res/values/google-services.xml כמשאב Android שאפשר לארוז ב-build של 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.

בעיה ב-Single dex בזמן פיתוח אפליקציה ל-Android

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

Cannot fit requested classes in a single dex file.

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

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

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

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

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

תמיכה ב-Java 8 והסרת סוכרים עבור Android גרסאות build ב-Unity 2017 וב-Unity 2018 (Firebase Unity SDK 8.0.0 ואילך)

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

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

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

  • מוסיפים בלוק compileOptions לתבנית gradle:

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

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

כדאי לעיין גם במאמר פתרון בעיות ב-Android - הסרה של כשלים ב-build אם מפסיקים.

בעיות בזמן ה-build ל-iOS באמצעות Cocoapods

כשמפתחים ל-iOS, התקנת Cocoapod עשויה להיכשל עם שגיאה לגבי לוקאל השפה או קידוד UTF-8. יש כרגע כמה דרכים שונות לעקוף את הבעיה.

  • מריצים את pod install ישירות מהטרמינל ופותחים את קובץ ה-xcworkspace שנוצר.

  • שדרוג לאחור של גרסת Cocoapods ל-1.10.2. הבעיה קיימת רק בגרסה 1.11 ואילך.

  • בשדה ~/.bash_profile או בערך דומה, יש להוסיף את export LANG=en_US.UTF-8

איך מעדכנים את הגרסה של ערכות ה-SDK של Firebase Unity

תהליך העדכון של הגרסאות של Firebase Unity SDK תלוי באופן שבו הן יובאו במקור. אלה שתי שיטות הייבוא החלופיות:

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

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