การแก้ไขปัญหา & คำถามที่พบบ่อยสำหรับ 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 ที่ Parse SDK นำมาใช้

หากต้องการแก้ไขข้อผิดพลาดในการคอมไพล์ หากคุณใช้ .NET 3.x:

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

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