หน้านี้นำเสนอเคล็ดลับและการแก้ปัญหาเฉพาะของ Unity ที่คุณอาจพบเมื่อใช้ Firebase
มีความท้าทายอื่น ๆ หรือไม่เห็นปัญหาของคุณด้านล่างหรือไม่ อย่าลืมดูคำถามที่พบบ่อยเกี่ยวกับ Firebase เพื่อดูคำถามที่พบบ่อยเกี่ยว กับ pan-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 framework ที่ 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 ของคุณ ให้ไปที่ เนื้อหา > 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 framework ขออภัย 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
ความสามัคคี 2017.2 เครือข่าย
ฐานข้อมูลเรียลไทม์ของ Firebase สร้างการเชื่อมต่อเครือข่าย TLS โดยใช้สแต็กเครือข่าย .NET ฟังก์ชัน TLS ใช้งานไม่ได้ใน Unity 2017.2 เมื่อใช้ .NET 4.6 ทำให้ปลั๊กอิน Realtime Database ล้มเหลวในตัวแก้ไขและบนเดสก์ท็อป
ไม่มีวิธีแก้ปัญหาสำหรับปัญหานี้ ดังนั้นคุณต้องใช้ Unity เวอร์ชันอื่น เช่น เวอร์ชัน 2017.1 หรือ 2017.3
ไฟล์กำหนดค่า Firebase Android หายไปใน Unity 2020
เพื่อสนับสนุนเวอร์ชันของ Unity ที่ไม่มีความสามารถในการปรับแต่ง Gradle build เครื่องมือแก้ไข Firebase จะสร้าง Assets/Plugins/Android/Firebase/res/values/google-services.xml
/Android/Firebase/res/values/google-services.xml เป็นทรัพยากร Android ที่จะบรรจุลงใน บิลด์ 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
ขณะสร้างแอป Android คุณอาจพบความล้มเหลวในการสร้างที่เกี่ยวข้องกับการมีไฟล์ dex ไฟล์เดียว ข้อความแสดงข้อผิดพลาดจะคล้ายกับข้อความต่อไปนี้ หากโปรเจ็กต์ของคุณได้รับการกำหนดค่าให้ใช้ระบบ Gradle build
Cannot fit requested classes in a single dex file.
ไฟล์ Dalvik Executable ( .dex
) ใช้เพื่อเก็บชุดคำจำกัดความของคลาสและข้อมูลเสริมที่เกี่ยวข้องสำหรับแอปพลิเคชัน Android ( .apk
) ไฟล์ dex ไฟล์เดียวถูกจำกัดให้อ้างอิงถึง 65,536 เมธอด บิลด์จะล้มเหลวหากจำนวนเมธอดทั้งหมดจากไลบรารี 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 และ desugaring สำหรับ Android บิลด์ใน Unity 2017 และ Unity 2018 (Firebase Unity SDK 8.0.0 ขึ้นไป)
ในเดือนพฤษภาคมปี 2021 (Firebase BoM v28.0.0) Firebase ได้ปิดการใช้งาน desugaring สำหรับไลบรารี Android ทั้งหมด (ดู บันทึกประจำรุ่น ) เมื่อสร้างแอป 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 build ในการแก้ไขข้อผิดพลาดของบิลด์นี้ใน Unity 2017 และ Unity 2018 ให้เลือกทำอย่างใดอย่างหนึ่งต่อไปนี้:
เพิ่มบล็อก
compileOptions
ให้กับเทมเพลต gradle ของคุณ:- ใช้
Gradle
เป็นระบบสร้าง - เปิดใช้งาน
Custom Gradle Template
ภายใต้Player Settings
เพิ่มบรรทัดต่อไปนี้ใน
mainTemplate.gradle
(หรือระดับโมดูลbuild.gradle
หากส่งออกโครงการสำหรับ Android Studio):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- ใช้
หรือเพิ่ม minSdkVersion สำหรับโครงการ Android ของคุณเป็น 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 (วิธีการนำเข้าที่แนะนำ)
หากแพ็คเกจ Firebase อยู่ในไดเรกทอรี Assets/
คุณมีสองตัวเลือกในการอัปเดตเวอร์ชัน SDK:
ตัวเลือก 1 (แนะนำ) : โยกย้ายไปใช้ UPM (มีให้ใน Unity 2018.4+)
- ทำตาม คำแนะนำของ Firebase เพื่อย้ายการจัดการแพ็คเกจไปยัง UPM
- แม้ว่าวิธีนี้ต้องการการตั้งค่าเริ่มต้นมากกว่าการใช้เวิร์กโฟลว์
.unitypackage
แต่ก็ให้ผลดีกับการอัปเดตเวอร์ชัน SDK ที่ตามมาอย่างง่ายดาย
ตัวเลือกที่ 2 : ใช้ไฟล์
.unitypackage
ต่อไปเพื่อนำเข้าไปยังไดเรกทอรีAssets/
นำเข้า แต่ละแพ็คเกจ สำหรับเวอร์ชันที่อัปเดต
หากคุณดาวน์โหลด firebase_unity_sdk.zip จากเว็บไซต์ Firebase ตรวจสอบให้แน่ใจว่าคุณนำเข้า
.unitypackages
ทั้งหมดจากโฟลเดอร์dotnet
ที่ถูกต้อง- หากคุณใช้ Unity 2019 หรือใหม่กว่า ให้นำเข้าจากโฟลเดอร์
dotnet4
- มิฉะนั้น เลือก Scripting Runtime Version ใน Player Settings และหากตั้งค่าเป็น ".NET 3.x" ให้นำเข้าจากโฟลเดอร์
dotnet3
- หากคุณใช้ Unity 2019 หรือใหม่กว่า ให้นำเข้าจากโฟลเดอร์
การเขียนทับเวอร์ชันแพ็คเกจที่นำเข้าก่อนหน้านี้ควรได้รับการจัดการโดยอัตโนมัติโดย External Dependency Manager (ซึ่งจะถูกรวมไว้โดยอัตโนมัติเมื่อคุณนำเข้า Firebase
.unitypackages
)อย่างไรก็ตาม หากกระบวนการอัตโนมัตินี้ล้มเหลว และเพียงเท่านั้น คุณจะต้องลบโฟลเดอร์ต่อไปนี้ด้วยตนเอง แล้วลองทำตามขั้นตอนการนำเข้าด้านบนใหม่อีกครั้ง
-
Assets/Editor Default Resources/Firebase
-
Assets/ExternalDependencyManager
-
Assets/Firebase
-
Assets/Parse
-
Assets/Plugins/iOS/Firebase
-
หากแพ็คเกจ Firebase ได้รับการจัดการโดย UPM ให้ นำเข้า SDK เวอร์ชันใหม่กว่าเป็น .tgz
การนำเข้านี้จะเขียนทับเวอร์ชันก่อนหน้าโดยอัตโนมัติ