פתרון בעיות & שאלות נפוצות על 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 של ה-SDK של Firebase Unity.

אם מייבאים פלאגין של 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 להעברת טיפים, שמעבירות את סוגי הניתוח (לדוגמה, הטמעת הניתוח של 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 באמצעות סטאק הרשתות של ‎ .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.

בעיה עם dex יחיד במהלך פיתוח אפליקציה ל-Android

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

Cannot fit requested classes in a single dex file.

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

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

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

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

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

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

במאי 2021 (גרסה 28.0.0 של Firebase BoM), השבתנו את הסרת הסוכר מכל הספריות של Android ב-Firebase (ראו הערה לגבי הגרסה). כשמפתחים אפליקציה ל-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 ל-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 SDKs

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

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

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