การแก้ไขปัญหาและคำถามที่พบบ่อยสำหรับ Unity และ Firebase

หน้านี้นำเสนอเคล็ดลับและการแก้ปัญหาเฉพาะของ 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:

  1. ลบหรือปิดใช้งาน DLL ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. เปิดใช้งาน DLL ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

เพื่อแก้ไขข้อผิดพลาดในการคอมไพล์ หากคุณใช้ .NET 4.x:

  1. ลบหรือปิดใช้งาน DLL ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. เปิดใช้งาน DLL ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

หากคุณนำเข้าปลั๊กอิน Firebase อื่น:

  • ในโครงการ Unity ของคุณ ให้ไปที่ เนื้อหา > 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 การส่งต่อประเภทซึ่งส่งต่อประเภท Parse (เช่น การนำ Parse ไปใช้งาน System.Threading.Tasks.Task ) ไปยัง .NET framework ขออภัย 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

ความสามัคคี 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/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

ปัญหาเกี่ยวกับ dex เดียวขณะสร้างแอป Android

ขณะสร้างแอป Android คุณอาจพบความล้มเหลวในการสร้างที่เกี่ยวข้องกับการมีไฟล์ dex ไฟล์เดียว ข้อความแสดงข้อผิดพลาดจะคล้ายกับข้อความต่อไปนี้ หากโปรเจ็กต์ของคุณได้รับการกำหนดค่าให้ใช้ระบบ Gradle build

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 และ desugaring สำหรับ Android บิลด์ใน Unity 2017 และ Unity 2018 (Firebase Unity SDK 8.0.0 ขึ้นไป)

ในเดือนพฤษภาคมปี 2021 (Firebase BoM v28.0.0) Firebase ได้ปิดการใช้งาน desugaring สำหรับไลบรารี 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 ของคุณ:

    1. ใช้ Gradle เป็นระบบสร้าง
    2. เปิดใช้งาน Custom Gradle Template ภายใต้ Player Settings
    3. เพิ่มบรรทัดต่อไปนี้ใน 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 (วิธีการนำเข้าที่แนะนำ)