Trang này cung cấp các mẹo và cách khắc phục sự cố cho các vấn đề dành riêng cho Unity mà bạn có thể gặp phải khi sử dụng Firebase.
Bạn có gặp khó khăn khác hoặc không thấy vấn đề của mình được nêu dưới đây? Hãy nhớ kiểm tra xem phần Câu hỏi thường gặp chính về Firebase để biết thêm về pan-Firebase hoặc Câu hỏi thường gặp theo sản phẩm cụ thể.
Khả năng tương thích với .NET khi sử dụng Unity 2017.x trở lên
Firebase hỗ trợ .NET 4.x dưới dạng tuỳ chọn bản dựng thử nghiệm trong Unity 2017 và sau. Trình bổ trợ Firebase sử dụng các thành phần của Phân tích cú pháp SDK để cung cấp một số Các lớp .NET 4.x trong các phiên bản .NET trước đây.
Do đó, SDK Firebase Unity phiên bản 5.4.0
trở lên cung cấp các trình bổ trợ
tương thích với .NET 3.x hoặc .NET 4.x trong dotnet3
và dotnet4
của các thư mục của SDK Firebase Unity.
Nếu bạn nhập một trình bổ trợ Firebase không tương thích với phiên bản .NET bật trong dự án, bạn sẽ thấy lỗi biên dịch từ một số loại trong Khung .NET do SDK Phân tích cú pháp triển khai.
Để khắc phục lỗi biên dịch, nếu bạn đang sử dụng .NET 3.x:
- Xoá hoặc vô hiệu hoá các tệp DLL sau đây cho tất cả nền tảng:
Parse/Plugins/dotNet45/Unity.Compat.dll
Parse/Plugins/dotNet45/Unity.Tasks.dll
- Bật các DLL sau cho tất cả nền tảng:
Parse/Plugins/Unity.Compat.dll
Parse/Plugins/Unity.Tasks.dll
Để khắc phục lỗi biên dịch, nếu bạn đang dùng .NET 4.x:
- Xoá hoặc vô hiệu hoá các tệp DLL sau đây cho tất cả nền tảng:
Parse/Plugins/Unity.Compat.dll
Parse/Plugins/Unity.Tasks.dll
- Bật các DLL sau cho tất cả nền tảng:
Parse/Plugins/dotNet45/Unity.Compat.dll
Parse/Plugins/dotNet45/Unity.Tasks.dll
Nếu bạn nhập một trình bổ trợ Firebase khác:
- Trong dự án Unity, hãy chuyển đến Thành phần > Trình phân giải các dịch vụ của Google Play > Trình xử lý phiên bản > Cập nhật để bật đúng DLL cho dự án của bạn.
Biên dịch IL2CPP của Unity 2017.1 trong các dự án .NET 4.x
Firebase hỗ trợ .NET 4.x dưới dạng tuỳ chọn bản dựng thử nghiệm trong Unity 2017 và sau. Trình bổ trợ Firebase sử dụng các thành phần của Phân tích cú pháp SDK để cung cấp một số Các lớp .NET 4.x trong các phiên bản .NET trước đây.
Do đó, SDK Firebase Unity phiên bản 5.4.0 trở lên cung cấp kiểu
chuyển tiếp các DLL chuyển tiếp các loại Phân tích cú pháp (ví dụ: triển khai Phân tích cú pháp của
System.Threading.Tasks.Task
) sang khung .NET. Rất tiếc, IL2CPP
(một trình chuyển đổi chuyển đổi C# thành C++) được vận chuyển trong Unity 2017.1.x
không xử lý chính xác DLL chuyển tiếp loại, dẫn đến lỗi bản dựng
tương tự như sau:
Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>
Hiện chưa có giải pháp nào cho các lỗi bản dựng .NET 4.x IL2CPP trong Unity 2017.1, vì vậy, bạn phải nâng cấp lên Unity 2017.2 trở lên để sử dụng .NET 4.x trong các dự án được biên dịch bằng IL2CPP.
Kết nối mạng trong Unity 2017.2
Firebase Realtime Database tạo kết nối mạng TLS bằng mạng .NET ngăn xếp. Chức năng TLS bị hỏng trong Unity 2017.2 khi sử dụng .NET 4.6 gây ra trình bổ trợ Realtime Database sẽ không hoạt động trong trình chỉnh sửa và trên máy tính.
Không có cách nào để giải quyết vấn đề này, vì vậy, bạn phải sử dụng phiên bản khác của Unity, ví dụ: phiên bản 2017.1 hoặc 2017.3.
Thiếu tệp cấu hình Android của Firebase trong Unity 2020
Để hỗ trợ các phiên bản Unity không có khả năng
tuỳ chỉnh bản dựng Gradle, công cụ trình chỉnh sửa Firebase sẽ tạo
Assets/Plugins/Android/Firebase/res/values/google-services.xml
dành cho thiết bị Android
tài nguyên sẽ được đóng gói vào bản dựng Android để Firebase SDK có thể sử dụng
để khởi chạy phiên bản FirebaseApp mặc định.
Trong Unity 2020, tất cả các tài nguyên Android đều phải nằm trong thư mục có phần tử
Hậu tố .androidlib
. Nếu dự án của bạn đang sử dụng Firebase SDK tạo ra một
Assets/Plugins/Android/Firebase
thư mục, đổi tên thư mục này thành
Assets/Plugins/Android/Firebase.androidlib
. Hãy đảm bảo tệp này có chứa
AndroidManifest.xml
, project.properties
và
res/values/google-services.xml
.
Vấn đề với một tệp dex khi tạo ứng dụng Android
Trong khi tạo ứng dụng Android, bạn có thể gặp lỗi bản dựng liên quan đến việc phải một tệp dex. Thông báo lỗi trông giống như sau, nếu dự á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 có thể thực thi (.dex
) được sử dụng để lưu một tập hợp các định nghĩa lớp
và dữ liệu bổ trợ liên quan cho các ứng dụng Android (.apk
). Một tệp dex đơn
được 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ố
số lượng phương thức từ tất cả thư viện Android trong dự án của bạn đã vượt quá giới hạn này.
Unity đã ra mắt tính năng Minification vào năm 2017.2, 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 sử dụng, giúp giảm tổng số lượng mã trong một tệp dex nào. Bạn có thể tìm thấy lựa chọn này trong Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm kích thước. Bạn có thể chọn khác nhau ở các phiên bản Unity khác nhau, vì vậy hãy tham chiếu đến Unity chính thức tài liệu.
Nếu số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, thì có một lựa chọn khác là
để bật multidex
. Có nhiều cách để đạt được điều này trong Unity:
- Nếu
Custom Gradle Template
dướiPlayer Settings
được bật, sửa đổimainTemplate.gradle
. - Nếu bạn sử 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ể xem thêm thông tin chi tiết trong hướng dẫn sử dụng multidex.
Hỗ trợ và đơn giản hoá Java 8 cho các bản dựng Android trong Unity 2017 và Unity 2018 (Firebase Unity SDK 8.0.0 trở lên)
Vào tháng 5 năm 2021 (Firebase BoM v28.0.0), Firebase đã tắt tính năng đơn giản hoá cho tất cả thư viện Android (xem ghi chú phát hành). Khi tạo ứng dụng Android bằng Firebase Unity SDK (8.0.0 trở lên), bạn có thể thấy lỗi bản dựng sau:
> Error while dexing.
The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle
Thay đổi này chỉ ảnh hưởng đến các bản dựng Android trong Unity 2017 và Unity 2018. Các phiên bản Unity mới hơn sẽ thêm khối compileOptions
theo mặc định trong các tệp bản dựng Gradle.
Để khắc phục lỗi bản dựng này trong Unity 2017 và Unity 2018, hãy làm theo một trong những cách sau:
Thêm khối
compileOptions
vào mẫu gradle của bạn:- Sử dụng
Gradle
làm hệ thống xây dựng. - Bật
Custom Gradle Template
trongPlayer Settings
. Thêm các dòng sau vào
mainTemplate.gradle
(hoặc cấp mô-đunbuild.gradle
nếu xuất dự án cho Android Studio):android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } }
- Sử dụng
Ngoài ra, hãy tăng minSdkVersion cho dự án Android lên phiên bản 26 trở lên.
Hãy xem thêm bài viết Khắc phục sự cố trên Android – lỗi đơn giản hoá của bản dựng.
Vấn đề khi xây dựng ứng dụng cho iOS bằng Cocoapods
Khi xây dựng cho iOS, quá trình cài đặt Cocoapod có thể không thành công kèm theo lỗi về ngôn ngữ bản địa hoặc bộ mã hoá UTF-8. Hiện tại, có nhiều cách để giải quyết vấn đề.
Trên cửa sổ dòng lệnh, hãy chạy trực tiếp
pod install
và mở kết quả xcworkspace.Hạ cấp phiên bản Cocoapods xuống 1.10.2. Vấn đề này chỉ tồn tại trong 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 Firebase Unity SDK
Quy trình cập nhật các phiên bản của Firebase Unity SDK phụ thuộc vào cách chúng được nhập ban đầu. Sau đây là hai phương thức nhập thay thế:
- Đang nhập
.unitypackage
tệp trong thư mụcAssets/
của dự án - Nhập bằng cách sử dụng
Trình quản lý gói Unity
(UPM)
- Đây là cách được đề xuất để quản lý các gói trong Unity 2018.4 trở lên.
- Hãy dùng phương thức này để cập nhật phiên bản trong tương lai dễ dàng hơn và
Assets/
trình dọn dẹp thư mục.
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ả Firebase. Bạn có thể sử dụng các hướng dẫn dưới đây để không chỉ cập nhật phiên bản của từng gói riêng lẻ, nhưng cũng có thể dùng để di chuyển gói nếu cần quản lý cho UPM (phương pháp nhập được đề xuất).