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

หน้านี้นำเสนอเคล็ดลับและการแก้ปัญหาเฉพาะสำหรับ Unity ที่คุณอาจพบเมื่อใช้ Firebase

หากมีความท้าทายอื่นๆ หรือไม่พบปัญหาของคุณตามที่ระบุไว้ด้านล่าง อย่าลืมตรวจสอบว่า โปรดดูคำถามที่พบบ่อยเกี่ยวกับ Firebase หลักสำหรับ Pan-Firebase เพิ่มเติมหรือ คำถามที่พบบ่อยเฉพาะผลิตภัณฑ์

รองรับ .NET เมื่อใช้ Unity 2017.x ขึ้นไป

Firebase รองรับ .NET 4.x เป็นตัวเลือกบิลด์ทดลองใน Unity 2017 และ ในภายหลัง ปลั๊กอิน Firebase ใช้คอมโพเนนต์ของ แยกวิเคราะห์ SDK เพื่อระบุ คลาส .NET 4.x ใน .NET เวอร์ชันก่อนหน้า

ดังนั้น SDK Unity Firebase เวอร์ชัน 5.4.0 ขึ้นไปจึงมีปลั๊กอินที่ ใช้ได้กับ .NET 3.x หรือ .NET 4.x ใน dotnet3 และ dotnet4 ไดเรกทอรีของ SDK Unity Firebase รายการ

หากคุณนำเข้าปลั๊กอิน Firebase ที่เข้ากันไม่ได้กับเวอร์ชัน .NET ที่เปิดใช้ในโปรเจ็กต์ของคุณ คุณจะเห็นข้อผิดพลาดคอมไพล์จากบางประเภทใน .NET ที่ใช้โดย 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 ให้ไปที่ ชิ้นงาน > ตัวแก้ไขบริการ Google Play > เครื่องจัดการเวอร์ชัน > อัปเดต เพื่อเปิดใช้ DLL ที่ถูกต้องสำหรับโปรเจ็กต์

การคอมไพล์ Unity 2017.1 IL2CPP ในโปรเจ็กต์ .NET 4.x

Firebase รองรับ .NET 4.x เป็นตัวเลือกบิลด์ทดลองใน Unity 2017 และ ในภายหลัง ปลั๊กอิน Firebase ใช้คอมโพเนนต์ของ แยกวิเคราะห์ SDK เพื่อระบุ คลาส .NET 4.x ใน .NET เวอร์ชันก่อนหน้า

ดังนั้น SDK Unity Firebase เวอร์ชัน 5.4.0 ขึ้นไปจึงจะระบุประเภท DLL สำหรับส่งต่อ ซึ่งส่งต่อประเภทการแยกวิเคราะห์ (เช่น การแยกวิเคราะห์ System.Threading.Tasks.Task) ไปยังเฟรมเวิร์ก .NET ขออภัย 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

การสร้างเครือข่าย Unity 2017.2

Firebase Realtime Database สร้างการเชื่อมต่อเครือข่าย TLS โดยใช้เครือข่าย .NET สแต็ก ฟังก์ชัน TLS ไม่ทำงานใน Unity 2017.2 เมื่อใช้ .NET 4.6 ซึ่งทำให้ ปลั๊กอิน Realtime Database ไม่สำเร็จในตัวแก้ไขและบนเดสก์ท็อป

ปัญหานี้ไม่มีวิธีแก้ปัญหาเบื้องต้น คุณจึงต้องใช้ เวอร์ชันอื่นของ เช่น Unity เวอร์ชัน 2017.1 หรือ 2017.3

ไม่มีไฟล์การกำหนดค่า Android ของ Firebase ใน Unity 2020

เพื่อรองรับ Unity เวอร์ชันที่ไม่มีสิทธิ์ ปรับแต่งบิลด์ของ Gradle โดยเครื่องมือแก้ไข Firebase จะสร้าง Assets/Plugins/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

ปัญหาเกี่ยวกับ 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 เปิดตัวการลดขนาด ในปี 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 ขึ้นอยู่กับเวอร์ชัน ที่มีการนำเข้าในตอนแรก นี่คือวิธีการนำเข้าที่เป็นทางเลือก 2 วิธี:

  • กำลังนำเข้า .unitypackage ไฟล์ภายใต้ไดเรกทอรี Assets/ ของโปรเจ็กต์
  • กำลังนำเข้าโดยใช้ ตัวจัดการแพ็กเกจ Unity (UPM)
    • วิธีนี้เป็นวิธีที่แนะนำในการจัดการแพ็กเกจใน Unity 2018.4 ขึ้นไป
    • ใช้วิธีนี้เพื่อให้การอัปเดตเวอร์ชันในอนาคตง่ายขึ้นและAssets/ เครื่องมือล้างไดเรกทอรี

ในโปรเจ็กต์ Unity คุณควรใช้วิธีการนำเข้าเพียงวิธีเดียวในการจัดการ แพ็กเกจ Firebase วิธีการด้านล่างนี้ไม่เพียงแค่ใช้ในการอัปเดต ของแพ็กเกจ แต่หากจำเป็น ให้ย้ายข้อมูลแพ็กเกจ UPM (วิธีการนำเข้าที่แนะนำ)