หน้านี้นำเสนอเคล็ดลับและการแก้ปัญหาสำหรับปัญหาเฉพาะของ 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 ที่ Parse SDK นำมาใช้
หากต้องการแก้ไขข้อผิดพลาดในการคอมไพล์ หากคุณใช้ .NET 3.x:
- ลบหรือปิดใช้งาน DLLs ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- เปิดใช้งาน DLLs ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
หากต้องการแก้ไขข้อผิดพลาดในการคอมไพล์ หากคุณใช้ .NET 4.x:
- ลบหรือปิดใช้งาน DLLs ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- เปิดใช้งาน DLLs ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
หากคุณนำเข้าปลั๊กอิน Firebase อื่น:
- ในโปรเจ็กต์ Unity ของคุณ ให้ไปที่ Assets > 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 การส่งต่อประเภทซึ่งจะส่งต่อประเภทการแยกวิเคราะห์ (เช่น การใช้การแยกวิเคราะห์ของ System.Threading.Tasks.Task
) ไปยังเฟรมเวิร์ก .NET ขออภัย IL2CPP (transpiler ที่แปลง C# เป็น C++) ที่จัดส่งใน Unity 2017.1.x ไม่สามารถประมวลผล DLLs การส่งต่อประเภทได้อย่างถูกต้อง ซึ่งส่งผลให้เกิดข้อผิดพลาดในการสร้างที่มีลักษณะดังต่อไปนี้:
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
ไฟล์กำหนดค่า Firebase Android หายไปใน Unity 2020
เพื่อรองรับเวอร์ชันของ Unity ที่ไม่มีความสามารถในการปรับแต่ง Gradle build เครื่องมือตัวแก้ไข Firebase จะสร้าง Assets/Plugins/Android/Firebase/res/values/google-services.xml
เป็นทรัพยากร Android ที่จะรวมไว้ใน Android build เพื่อให้ 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 ( .dex
) ใช้เพื่อเก็บชุดคำจำกัดความของคลาสและข้อมูลเสริมที่เกี่ยวข้องสำหรับแอปพลิเคชัน Android ( .apk
) ไฟล์ dex เดียวถูกจำกัดให้อ้างอิงถึง 65,536 วิธี บิลด์จะล้มเหลวหากจำนวนวิธีทั้งหมดจากไลบรารี Android ทั้งหมดในโปรเจ็กต์ของคุณเกินขีดจำกัดนี้
Unity เปิดตัว Minification ในปี 2560.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 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
การนำเข้านี้จะเขียนทับเวอร์ชันก่อนหน้าโดยอัตโนมัติ