หน้านี้นำเสนอเคล็ดลับและการแก้ปัญหาเฉพาะสำหรับ Unity ที่คุณอาจพบเมื่อใช้ Firebase
หากมีความท้าทายอื่นๆ หรือไม่พบปัญหาของคุณตามที่ระบุไว้ด้านล่าง อย่าลืมดูคำถามที่พบบ่อยเกี่ยวกับ Firebase หลักสำหรับคำถามที่พบบ่อยอื่นๆ เกี่ยวกับ 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 ที่ 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 ให้ไปที่ชิ้นงาน > ตัวแปลค่าบริการ Google Play > ตัวแฮนเดิลเวอร์ชัน > อัปเดต เพื่อเปิดใช้ 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 สำหรับส่งต่อประเภทซึ่งส่งต่อประเภทการแยกวิเคราะห์ (เช่น การใช้การแยกวิเคราะห์ของ System.Threading.Tasks.Task
) ไปยังเฟรมเวิร์ก .NET น่าเสียดายที่ 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
การสร้างเครือข่าย Unity 2017.2
ฐานข้อมูลเรียลไทม์ของ Firebase สร้างการเชื่อมต่อเครือข่าย TLS โดยใช้สแต็กเครือข่าย .NET ฟังก์ชัน TLS ใช้งานไม่ได้ใน Unity 2017.2 เมื่อใช้ .NET 4.6 ทำให้ปลั๊กอิน Realtime Database ไม่ทำงานในเครื่องมือแก้ไขและบนเดสก์ท็อป
ปัญหานี้ไม่มีวิธีแก้ปัญหาเบื้องต้น คุณจึงต้องใช้ Unity เวอร์ชันอื่น เช่น เวอร์ชัน 2017.1 หรือ 2017.3
ไม่มีไฟล์การกำหนดค่า Android ของ Firebase ใน 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
ปัญหาเกี่ยวกับ Single 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 สำหรับ Android บิลด์ใน Unity 2017 และ Unity 2018 (Firebase Unity SDK 8.0.0 ขึ้นไป)
ในเดือนพฤษภาคม 2021 (Firebase BoM v28.0.0) Firebase ได้ปิดใช้การนำน้ำตาลออกสำหรับไลบรารี 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 - การลดความซ้ำซ้อนของบิลด์
ปัญหาขณะสร้างแอปสำหรับ 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 (วิธีนำเข้าที่แนะนำ) ได้อีกด้วย หากจำเป็น