หน้านี้นำเสนอเคล็ดลับและการแก้ปัญหาเฉพาะสำหรับ Unity ที่คุณอาจพบเมื่อใช้ Firebase
หากมีความท้าทายอื่นๆ หรือไม่พบปัญหาของคุณตามที่ระบุไว้ด้านล่าง อย่าลืมตรวจสอบว่า โปรดดูคำถามที่พบบ่อยเกี่ยวกับ Firebase หลักสำหรับ Pan-Firebase เพิ่มเติมหรือ คำถามที่พบบ่อยเฉพาะผลิตภัณฑ์
รองรับ .NET เมื่อใช้ Unity 2017.x ขึ้นไป
Firebase รองรับ .NET 4.x เป็นตัวเลือกบิลด์ทดลองใน Unity 2017 และ ในภายหลัง ปลั๊กอิน Firebase ใช้คอมโพเนนต์ของ แยกวิเคราะห์ SDK เพื่อระบุ คลาส .NET 4.x ใน .NET เวอร์ชันก่อนหน้า
ดังนั้น SDK Unity Firebase เวอร์ชัน 5.4.0
ขึ้นไปจึงมีปลั๊กอินที่
ใช้ได้กับ .NET 3.x หรือ .NET 4.x ใน dotnet3
และ dotnet4
ไดเรกทอรีของ SDK Unity Firebase รายการ
หากคุณนำเข้าปลั๊กอิน 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 ใช้คอมโพเนนต์ของ แยกวิเคราะห์ SDK เพื่อระบุ คลาส .NET 4.x ใน .NET เวอร์ชันก่อนหน้า
ดังนั้น SDK Unity Firebase เวอร์ชัน 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 Realtime Database สร้างการเชื่อมต่อเครือข่าย TLS โดยใช้เครือข่าย .NET สแต็ก ฟังก์ชัน TLS ไม่ทำงานใน Unity 2017.2 เมื่อใช้ .NET 4.6 ซึ่งทำให้ ปลั๊กอิน Realtime Database ไม่สำเร็จในตัวแก้ไขและบนเดสก์ท็อป
ปัญหานี้ไม่มีวิธีแก้ปัญหาเบื้องต้น คุณจึงต้องใช้ เวอร์ชันอื่นของ เช่น Unity เวอร์ชัน 2017.1 หรือ 2017.3
ไม่มีไฟล์การกำหนดค่า Android ของ Firebase ใน Unity 2020
เพื่อรองรับ Unity เวอร์ชันที่ไม่มีสิทธิ์
ปรับแต่งบิลด์ของ Gradle โดยเครื่องมือแก้ไข Firebase จะสร้าง
Assets/Plugins/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
ปัญหาเกี่ยวกับ 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
(UPM)
- วิธีนี้เป็นวิธีที่แนะนำในการจัดการแพ็กเกจใน Unity 2018.4 ขึ้นไป
- ใช้วิธีนี้เพื่อให้การอัปเดตเวอร์ชันในอนาคตง่ายขึ้นและ
Assets/
เครื่องมือล้างไดเรกทอรี
ในโปรเจ็กต์ Unity คุณควรใช้วิธีการนำเข้าเพียงวิธีเดียวในการจัดการ แพ็กเกจ Firebase วิธีการด้านล่างนี้ไม่เพียงแค่ใช้ในการอัปเดต ของแพ็กเกจ แต่หากจำเป็น ให้ย้ายข้อมูลแพ็กเกจ UPM (วิธีการนำเข้าที่แนะนำ)