בדף הזה מופיעים טיפים ודרכים לפתרון בעיות ספציפיות ל-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:
- מסירים או משביתים את קובצי ה-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
אם מייבאים פלאגין 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:- משתמשים ב-
Gradle
כמערכת build. - מפעילים את
Custom Gradle Template
בקטעPlayer Settings
. מוסיפים את השורות הבאות לקובץ
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 (שיטת הייבוא המומלצת).