Trang này cung cấp các mẹo và thông tin khắc phục sự cố đối với những vấn đề cụ thể về Unity mà bạn có thể gặp phải khi sử dụng Firebase.
Bạn gặp phải những thách thức khác hoặc không thấy vấn đề của mình được nêu bên dưới? Hãy nhớ xem Câu hỏi thường gặp chính về Firebase để biết thêm câu hỏi thường gặp chung về Firebase hoặc câu hỏi thường gặp dành riêng cho sản phẩm.
Vấn đề với dex đơn khi tạo ứng dụng Android
Trong khi tạo ứng dụng Android, bạn có thể gặp phải lỗi bản dựng liên quan đến việc có một tệp dex duy nhất. Thông báo lỗi có dạng như sau, nếu dự án của bạn được định cấu hình để sử dụng hệ thống xây dựng Gradle.
Cannot fit requested classes in a single dex file.
Các tệp Dalvik Executable (.dex
) được dùng để lưu trữ một tập hợp các định nghĩa lớp và dữ liệu bổ trợ liên kết của các định nghĩa đó cho các ứng dụng Android (.apk
). Một tệp dex duy nhất bị giới hạn tham chiếu đến 65.536 phương thức. Quá trình tạo sẽ không thành công nếu tổng số phương thức từ tất cả các thư viện Android trong dự án của bạn vượt quá giới hạn này.
Unity đã giới thiệu tính năng Giảm thiểu trong phiên bản 2017.2. Tính năng này sử dụng Proguard (hoặc các công cụ khác trong một số phiên bản Unity) để loại bỏ mã không dùng đến, nhờ đó có thể giảm tổng số phương thức được tham chiếu trong một tệp dex. Bạn có thể tìm thấy lựa chọn này trong phần Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu). Các lựa chọn có thể khác nhau trong các phiên bản Unity, vì vậy, hãy tham khảo tài liệu chính thức của Unity.
Nếu số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, bạn có thể bật multidex
. Có nhiều cách để thực hiện việc này trong Unity:
- Nếu
Custom Gradle Template
trongPlayer Settings
được bật, hãy sửa đổimainTemplate.gradle
. - Nếu bạn dùng Android Studio để tạo dự án đã xuất, hãy sửa đổi tệp
build.gradle
ở cấp mô-đun.
Bạn có thể tìm thêm thông tin chi tiết trong hướng dẫn sử dụng multidex.
Các vấn đề khi tạo cho Android với minSdkVersion 23
Khi tạo cho Android, nếu bạn nhắm đến minSdkVersion
23, thì quá trình này có thể không thành công ở bước tạo tệp dex, thường là trong tác vụ Gradle ":launcher:mergeExtDexDebug", trong đó sẽ có thông báo "Failed to transform" (Không chuyển đổi được) một trong các thư viện Android. Nguyên nhân là do một lỗi trong công cụ dex mặc định trong Android SDK mà hầu hết các trình chỉnh sửa Unity đều sử dụng và có thể khắc phục theo một số cách:
- Đặt
minSdkVersion
thành 24. - Bật tính năng giảm thiểu Android trong Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu)
- Chỉ định một phiên bản khác của công cụ dex bằng cách thêm phiên bản này vào tệp
settingsTemplate.gradle
:
buildscript {
repositories {
mavenLocal()
maven { url 'https://maven.google.com' }
mavenCentral()
}
dependencies {
classpath 'com.android.tools:r8:8.3.37'
}
}
Vấn đề khi tạo cho iOS bằng Cocoapods
Khi tạo cho iOS, quá trình cài đặt Cocoapod có thể không thành công do lỗi về ngôn ngữ hoặc phương thức mã hoá UTF-8. Hiện có một số cách để giải quyết vấn đề này.
Từ cửa sổ dòng lệnh, hãy chạy trực tiếp
pod install
và mở tệp xcworkspace kết quả.Hạ cấp phiên bản Cocoapods xuống 1.10.2. Vấn đề này chỉ xảy ra ở phiên bản 1.11 trở lên.
Trong
~/.bash_profile
hoặc tương đương, hãy thêmexport LANG=en_US.UTF-8
Cách cập nhật phiên bản của Firebase Unity SDK
Quy trình cập nhật phiên bản của Firebase Unity SDK phụ thuộc vào cách bạn nhập các SDK này ban đầu. Sau đây là 2 phương thức nhập thay thế:
- Nhập tệp
.unitypackage
trong thư mụcAssets/
của dự án - Nhập bằng Unity Package Manager (UPM)
- Đây là cách nên dùng để quản lý các gói trong Unity 2018.4 trở lên.
- Sử dụng phương thức này để giúp việc cập nhật phiên bản trong tương lai trở nên dễ dàng hơn và trình dọn dẹp thư mục
Assets/
của bạn.
Trong dự án Unity, bạn chỉ nên sử dụng một phương thức nhập để quản lý tất cả các gói Firebase. Bạn có thể dùng hướng dẫn bên dưới không chỉ để cập nhật phiên bản của từng gói mà còn để di chuyển hoạt động quản lý gói sang UPM (phương thức nhập được đề xuất) nếu cần.
Các gói được nhập dưới dạng tệp .unitypackage
vào thư mục Assets/
Nếu các gói Firebase nằm trong thư mục Assets/
, bạn có hai lựa chọn để cập nhật phiên bản SDK:
Lựa chọn 1 (nên dùng): Di chuyển để sử dụng UPM (có trong Unity 2018.4 trở lên)
- Làm theo hướng dẫn của Firebase để di chuyển hoạt động quản lý gói sang UPM.
- Mặc dù phương thức này đòi hỏi nhiều bước thiết lập ban đầu hơn so với việc tiếp tục sử dụng quy trình
.unitypackage
, nhưng phương thức này sẽ mang lại lợi ích về sự dễ dàng khi cập nhật phiên bản SDK sau này.
Cách 2: Tiếp tục sử dụng các tệp
.unitypackage
để nhập các tệp đó vào thư mụcAssets/
Nhập từng gói cho phiên bản đã cập nhật.
Nếu bạn tải firebase_unity_sdk.zip xuống từ trang web Firebase, hãy đảm bảo rằng bạn nhập tất cả
.unitypackages
từ thư mụcdotnet
chính xác.- Nếu bạn đang sử dụng Unity 2019 trở lên, hãy nhập từ thư mục
dotnet4
. - Nếu không, hãy chọn Scripting Runtime Version (Phiên bản thời gian chạy tập lệnh) trong Player Settings (Cài đặt trình phát) và nếu bạn đặt thành ".NET 3.x", hãy nhập từ thư mục
dotnet3
.
- Nếu bạn đang sử dụng Unity 2019 trở lên, hãy nhập từ thư mục
Trình quản lý phần phụ thuộc bên ngoài sẽ tự động xử lý việc ghi đè các phiên bản gói đã nhập trước đó (Trình quản lý này sẽ tự động được đưa vào khi bạn nhập Firebase
.unitypackages
).Tuy nhiên, nếu và CHỈ khi quy trình tự động này không thành công, bạn sẽ cần xoá các thư mục sau theo cách thủ công rồi thử lại bước nhập ở trên.
Assets/Editor Default Resources/Firebase
Assets/ExternalDependencyManager
Assets/Firebase
Assets/Parse
Assets/Plugins/iOS/Firebase
Các gói do UPM quản lý
Nếu các gói Firebase do UPM quản lý, hãy nhập phiên bản SDK mới hơn dưới dạng .tgz
.
Thao tác nhập này sẽ tự động ghi đè phiên bản trước.