หน้านี้มีเคล็ดลับและการแก้ปัญหาเฉพาะสำหรับ Unity ซึ่งคุณอาจพบเมื่อใช้ Firebase
หากพบปัญหาอื่นๆ หรือไม่พบปัญหาที่ระบุไว้ด้านล่าง อย่าลืมอ่านคําถามที่พบบ่อยหลักของ Firebase เพื่อดูคําถามที่พบบ่อยเกี่ยวกับ Firebase ทั้งหมดหรือเฉพาะผลิตภัณฑ์
ปัญหาเกี่ยวกับ 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
ปัญหาเมื่อสร้างแอปสำหรับ Android ที่มี minSdkVersion 23
เมื่อสร้างแอปสำหรับ Android หากคุณกำหนดเป้าหมายเป็น minSdkVersion
23 การสร้างอาจไม่สำเร็จในขั้นตอนการจัดทําไฟล์ Dex ซึ่งโดยปกติแล้วจะอยู่ในงาน Gradle ':launcher:mergeExtDexDebug' ซึ่งจะระบุว่า "เปลี่ยนรูปแบบไม่สําเร็จ" ไลบรารี Android รายการใดรายการหนึ่ง ปัญหานี้เกิดจากข้อบกพร่องในเครื่องมือ dex เริ่มต้นใน Android SDK ที่ใช้โดยเครื่องมือแก้ไข Unity ส่วนใหญ่ และสามารถแก้ไขได้หลายวิธีดังนี้
- ตั้งค่า
minSdkVersion
เป็น 24 - เปิดการทำให้ไฟล์เล็กลงสำหรับ Android ในการตั้งค่าโปรแกรมเล่น > Android > การตั้งค่าการเผยแพร่ > การทำให้ไฟล์เล็กลง
- ระบุเครื่องมือ dex เวอร์ชันอื่นโดยเพิ่มข้อมูลต่อไปนี้ลงในไฟล์
settingsTemplate.gradle
buildscript {
repositories {
mavenLocal()
maven { url 'https://maven.google.com' }
mavenCentral()
}
dependencies {
classpath 'com.android.tools:r8:8.3.37'
}
}
ปัญหาเมื่อสร้างสำหรับ 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 Package Manager (UPM)
- วิธีนี้เป็นวิธีที่แนะนำในการจัดการแพ็กเกจใน Unity 2018.4 ขึ้นไป
- ใช้วิธีนี้เพื่อให้การอัปเดตเวอร์ชันในอนาคตง่ายขึ้นและ
Assets/
ไดเรกทอรีของคุณสะอาดขึ้น
ในโปรเจ็กต์ Unity คุณควรใช้วิธีการนําเข้าเพียงวิธีเดียวเพื่อจัดการแพ็กเกจ Firebase ทั้งหมด วิธีการด้านล่างไม่เพียงใช้เพื่ออัปเดตเวอร์ชันของแพ็กเกจแต่ละรายการเท่านั้น แต่ยังใช้เพื่อย้ายข้อมูลการจัดการแพ็กเกจไปยัง UPM (วิธีการนําเข้าที่แนะนํา) ได้หากจําเป็น
แพ็กเกจที่นำเข้าเป็นไฟล์ .unitypackage
ไปยังไดเรกทอรี Assets/
หากแพ็กเกจ Firebase อยู่ในไดเรกทอรี Assets/
คุณจะมี 2 ตัวเลือกในการอัปเดตเวอร์ชัน SDK ดังนี้
ตัวเลือกที่ 1 (แนะนำ): ย้ายข้อมูลไปใช้ UPM (ใช้ได้ใน Unity 2018.4 ขึ้นไป)
- ทำตามวิธีการย้ายข้อมูลการจัดการแพ็กเกจจาก Firebase ไปยัง UPM
- แม้ว่าวิธีนี้จะต้องตั้งค่าครั้งแรกมากกว่าการใช้เวิร์กโฟลว์
.unitypackage
ต่อไป แต่วิธีนี้จะช่วยให้อัปเดต SDK เวอร์ชันต่อๆ ไปได้ง่าย
ตัวเลือกที่ 2: ใช้ไฟล์
.unitypackage
เพื่อนำเข้าไฟล์ไปยังไดเรกทอรีAssets/
ต่อไปนําเข้าแต่ละแพ็กเกจสําหรับเวอร์ชันที่อัปเดต
หากคุณดาวน์โหลด firebase_unity_sdk.zip จากเว็บไซต์ Firebase ให้ตรวจสอบว่าคุณนําเข้า
.unitypackages
ทั้งหมดจากโฟลเดอร์dotnet
ที่ถูกต้อง- หากคุณใช้ Unity 2019 ขึ้นไป ให้นำเข้าจากโฟลเดอร์
dotnet4
- หรือเลือกเวอร์ชันรันไทม์สคริปต์ในการตั้งค่าโปรแกรมเล่น และหากตั้งค่าเป็น ".NET 3.x" ให้นำเข้าจากโฟลเดอร์
dotnet3
- หากคุณใช้ Unity 2019 ขึ้นไป ให้นำเข้าจากโฟลเดอร์
เครื่องมือจัดการทรัพยากรภายนอก (ซึ่งรวมอยู่โดยอัตโนมัติเมื่อคุณนําเข้า Firebase
.unitypackages
) ควรจัดการการเขียนทับเวอร์ชันแพ็กเกจที่นําเข้าก่อนหน้านี้โดยอัตโนมัติอย่างไรก็ตาม หากกระบวนการอัตโนมัตินี้ดำเนินการไม่สำเร็จ คุณจะต้องลบโฟลเดอร์ต่อไปนี้ด้วยตนเอง แล้วลองทำตามขั้นตอนการนำเข้าข้างต้นอีกครั้ง
Assets/Editor Default Resources/Firebase
Assets/ExternalDependencyManager
Assets/Firebase
Assets/Parse
Assets/Plugins/iOS/Firebase
แพ็กเกจที่จัดการโดย UPM
หาก UPM จัดการแพ็กเกจ Firebase ให้นําเข้า SDK เวอร์ชันใหม่เป็น .tgz
การนําเข้านี้จะเขียนทับเวอร์ชันก่อนหน้าโดยอัตโนมัติ