Trang này cung cấp các mẹo và cách khắc phục sự cố dành riêng cho Unity mà bạn có thể gặp phải khi sử dụng Firebase.
Bạn gặp phải vấn đề 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ác câu hỏi thường gặp chính về Firebase để biết thêm câu hỏi thường gặp về Firebase nói chung hoặc về từng sản phẩm.
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 trở lên. Trình bổ trợ Firebase sử dụng các thành phần của SDK phân tích cú pháp để cung cấp một số lớp .NET 4.x trong các phiên bản .NET cũ.
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 thư mục dotnet3
và dotnet4
của SDK Firebase Unity.
Nếu nhập một trình bổ trợ Firebase không tương thích với phiên bản .NET được 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 Parse triển khai.
Để giải quyết lỗi biên dịch, nếu bạn đang sử dụng .NET 3.x:
- Xoá hoặc tắ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
- Bật 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
Để khắc phục lỗi biên dịch, nếu bạn đang sử dụng .NET 4.x:
- Xoá hoặc tắt các DLL sau 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 Assets (Tài sản) > Play Services Resolver (Trình phân giải các dịch vụ của Play) > Version Handler (Trình xử lý phiên bản) > Update (Cập nhật) để bật các DLL chính xác cho dự á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 trở lên. Trình bổ trợ Firebase sử dụng các thành phần của SDK phân tích cú pháp để cung cấp một số lớp .NET 4.x trong các phiên bản .NET cũ.
Do đó, SDK Firebase Unity phiên bản 5.4.0 trở lên cung cấp các DLL chuyển tiếp kiểu sẽ chuyển tiếp các kiểu Phân tích cú pháp (ví dụ: triển khai Phân tích cú pháp System.Threading.Tasks.Task
) sang khung .NET. Rất tiếc, IL2CPP (một trình chuyển đổi mã nguồn chuyển đổi C# sang C++) được vận chuyển trong Unity 2017.1.x không xử lý chính xác cá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 tại, không có giải pháp nào cho 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 cách sử dụng ngăn xếp mạng .NET. Chức năng TLS bị hỏng trong Unity 2017.2 khi sử dụng .NET 4.6 khiến trình bổ trợ Realtime Database không hoạt động được trong trình chỉnh sửa và trên máy tính.
Không có giải pháp nào cho vấn đề này, vì vậy, bạn phải sử dụng một phiên bản Unity khác, chẳng hạn như phiên bản 2017.1 hoặc 2017.3.
Thiếu tệp cấu hình Firebase Android trong Unity 2020
Để hỗ trợ các phiên bản Unity không có khả năng tùy 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ưới dạng tài nguyên Android để đóng gói vào bản dựng Android, nhờ đó SDK Firebase có thể sử dụng tài nguyên này để khởi chạy thực thể FirebaseApp mặc định.
Trong Unity 2020, tất cả tài nguyên Android phải nằm trong các thư mục có hậu tố .androidlib
. Nếu dự án của bạn đang sử dụng một SDK Firebase tạo thư mục Assets/Plugins/Android/Firebase
, hãy đổi tên thư mục đó thành Assets/Plugins/Android/Firebase.androidlib
. Đảm bảo tệp này chứa AndroidManifest.xml
, project.properties
và res/values/google-services.xml
.
Vấn đề về tệp dex đơn 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 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 thực thi (.dex
) được dùng để lưu giữ 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 duy nhất được giới hạn tham chiếu đến 65.536 phương thức. Không tạo được bản dự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 đã ra mắt tính năng rút gọn 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 tuỳ chọn này trong phần Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt phát hành > Rút gọn). Các tuỳ chọn có thể khác nhau giữa 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 sử dụng Android Studio để tạo bản dựng 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ợ Java 8 và đơn giản hoá cho các bản dựng Android trong Unity 2017 và Unity 2018 (SDK Unity Firebase 8.0.0 trở lên)
Vào tháng 5 năm 2021 (BoM Firebase phiên bản 28.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 SDK Firebase Unity (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:- 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 26 trở lên.
Xem thêm phần Khắc phục sự cố trên Android – đơn giản hoá các lỗi bản dựng.
Vấn đề khi tạo bản dựng 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 mã hoá UTF-8. Hiện có một số cách để giải quyết vấn đề này.
Từ dòng lệnh, hãy chạy trực tiếp
pod install
và mở tệp xcworkspace thu được.Hạ cấp phiên bản Cocoapods xuống 1.10.2. Vấn đề này chỉ xảy ra 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 SDK Firebase cho Unity
Quy trình cập nhật phiên bản SDK Firebase cho Unity phụ thuộc vào cách bạn nhập các phiên bản đó ban đầu. Sau đây là hai 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 Trình quản lý gói Unity (UPM)
- Đây là cách nên dùng để quản lý các gói trong Unity 2018.4 trở lên.
- Hãy sử dụng phương thức này để việc cập nhật các phiên bản trong tương lai trở nên dễ dàng hơn và thư mục
Assets/
của bạn trở nên sạch hơ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. Hướng dẫn bên dưới không chỉ giúp bạn cập nhật phiên bản của từng gói mà còn giúp bạn di chuyển tính năng quản lý gói sang UPM (phương thức nhập được đề xuất) nếu cần.