Catch up on highlights from Firebase at Google I/O 2023. Learn more

การแก้ไขปัญหาและคำถามที่พบบ่อยสำหรับ 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. เปิดใช้งาน DLLs ต่อไปนี้สำหรับทุกแพลตฟอร์ม:
    • 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. เปิดใช้งาน 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 ของคุณ:

    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 (วิธีการนำเข้าที่แนะนำ) หากจำเป็น