หน้านี้มีเคล็ดลับและการแก้ปัญหาเฉพาะสำหรับ Unity ซึ่งคุณอาจพบเมื่อใช้ Firebase
หากพบปัญหาอื่นๆ หรือไม่พบปัญหาที่ระบุไว้ด้านล่าง อย่าลืมอ่านคําถามที่พบบ่อยหลักของ Firebase เพื่อดูคําถามที่พบบ่อยเกี่ยวกับ Firebase ทั้งหมดหรือเฉพาะผลิตภัณฑ์
ความเข้ากันได้กับ .NET เมื่อใช้ Unity 2017.x ขึ้นไป
Firebase รองรับ .NET 4.x เป็นตัวเลือกบิลด์เวอร์ชันทดลองใน 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 ให้ไปที่ เนื้อหา > Play Services Resolver > ตัวแฮนเดิลเวอร์ชัน > อัปเดต เพื่อเปิดใช้ DLL ที่ถูกต้องสำหรับโปรเจ็กต์
การคอมไพล์ IL2CPP ของ Unity 2017.1 ในโปรเจ็กต์ .NET 4.x
Firebase รองรับ .NET 4.x เป็นตัวเลือกบิลด์เวอร์ชันทดลองใน Unity 2017 ขึ้นไป ปลั๊กอิน Firebase ใช้คอมโพเนนต์ของ Parse SDK เพื่อให้บริการคลาส .NET 4.x บางคลาสใน .NET เวอร์ชันเก่า
ดังนั้น Firebase Unity SDK เวอร์ชัน 5.4.0 ขึ้นไปจึงมี DLL ที่ส่งต่อประเภท ซึ่งส่งต่อประเภทของ Parse (เช่น การใช้งาน System.Threading.Tasks.Task
ของ Parse) ไปยังเฟรมเวิร์ก .NET ขออภัย IL2CPP (Transpiler ที่แปลง 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
เครือข่ายของ 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
เครื่องมือแก้ไข Firebase จะสร้าง Assets/Plugins/Android/Firebase/res/values/google-services.xml
เป็นทรัพยากร Android เพื่อบรรจุลงในบิลด์ Android เพื่อให้ Firebase SDK ใช้เพื่อเริ่มต้นอินสแตนซ์ FirebaseApp เริ่มต้นได้ เพื่อรองรับ Unity เวอร์ชันที่ปรับแต่งบิลด์ Gradle ไม่ได้
ใน 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
Cannot fit requested classes in a single dex file.
ไฟล์ Dalvik Executable (.dex
) ใช้เก็บชุดคำจำกัดความของคลาสและข้อมูลเสริมที่เกี่ยวข้องสำหรับแอปพลิเคชัน Android (.apk
) ไฟล์ dex ไฟล์เดียวจำกัดการอ้างอิงถึงเมธอดได้ 65,536 รายการ บิลด์จะดำเนินการไม่สำเร็จหากจํานวนเมธอดทั้งหมดจากไลบรารี 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 และการกรอง Sugar ออกสําหรับบิลด์ Android ใน Unity 2017 และ Unity 2018 (Firebase Unity SDK 8.0.0 ขึ้นไป)
ในเดือนพฤษภาคม 2021 (Firebase BoM v28.0.0) Firebase ได้ปิดใช้การกรอง Sugar ออกจากไลบรารี 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
หากต้องการแก้ไขข้อผิดพลาดในการบิลด์นี้ใน 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 - การสร้างที่ดึง Sugar ออกไม่สำเร็จ
ปัญหาเมื่อสร้างสำหรับ 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 จะขึ้นอยู่กับวิธีนําเข้าครั้งแรก วิธีการนําเข้าอีก 2 วิธีมีดังนี้
- การนําเข้าไฟล์
.unitypackage
ในไดเรกทอรีAssets/
ของโปรเจ็กต์ - การนําเข้าโดยใช้ Unity Package Manager (UPM)
- วิธีนี้เป็นวิธีที่แนะนำในการจัดการแพ็กเกจใน Unity 2018.4 ขึ้นไป
- ใช้วิธีนี้เพื่อให้การอัปเดตเวอร์ชันในอนาคตง่ายขึ้นและ
Assets/
ไดเรกทอรีของคุณสะอาดขึ้น
ในโปรเจ็กต์ Unity คุณควรใช้วิธีการนําเข้าเพียงวิธีเดียวเพื่อจัดการแพ็กเกจ Firebase ทั้งหมด วิธีการด้านล่างไม่เพียงใช้เพื่ออัปเดตเวอร์ชันของแพ็กเกจแต่ละรายการเท่านั้น แต่ยังใช้เพื่อย้ายข้อมูลการจัดการแพ็กเกจไปยัง UPM (วิธีการนําเข้าที่แนะนํา) ได้หากจําเป็น