פתרון בעיות & שאלות נפוצות על 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 להעברת סוגי DLL שמעבירים סוגי ניתוח (למשל, ניתוח של System.Threading.Tasks.Task) ל-framework של .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 לאריזה של גרסת Android build, כך ש-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

במהלך ה-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 > הגדרות פרסום > Minify. האפשרויות עשויות להשתנות בגרסאות שונות של 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), מערכת 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 לתבנית GRid:

    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 – כשיש כשלים ב-desugaring של גרסאות 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 (שיטת הייבוא המומלצת).