หน้านี้นำเสนอเคล็ดลับและวิธีแก้ไขปัญหาเฉพาะของ 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
-
- เปิดใช้งาน DLLs ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
หากต้องการแก้ไขข้อผิดพลาดในการคอมไพล์ หากคุณใช้ .NET 4.x:
- ลบหรือปิดใช้งาน DLL ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
-
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 ของคุณ ให้ไปที่ สินทรัพย์ > Play Services Resolver > ตัวจัดการเวอร์ชัน > อัปเดต เพื่อเปิดใช้งาน 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 Framework ขออภัย 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 Realtime Database สร้างการเชื่อมต่อเครือข่าย 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
ปัญหาเกี่ยวกับ 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 เปิดตัว 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 และการดีซูการ์สำหรับ 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 ขึ้นอยู่กับวิธีการนำเข้าครั้งแรก ต่อไปนี้คือวิธีการนำเข้าทางเลือกสองวิธี:
- การนำเข้าไฟล์
.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
-
หาก UPM จัดการแพ็กเกจ Firebase ให้นำเข้า SDK เวอร์ชันใหม่กว่าเป็น .tgz
การนำเข้านี้จะเขียนทับเวอร์ชันก่อนหน้าโดยอัตโนมัติ