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 có những thách thức khác hoặc không thấy vấn đề của mình được nêu dưới đây? Hãy nhớ xem Câu hỏi thường gặp về Firebase chính để biết thêm Câu hỏi thường gặp về Firebase hoặc dành riêng cho sản phẩm.
Khả năng tương thích .NET khi sử dụng Unity 2017.x trở lên
Firebase hỗ trợ .NET 4.x dưới dạng tùy chọn xây dựng thử nghiệm trong Unity 2017 trở lên. Plugin Firebase sử dụng các thành phần của Parse SDK để cung cấp một số lớp .NET 4.x trong các phiên bản .NET cũ hơn.
Do đó, Firebase Unity SDK phiên bản 5.4.0
trở lên cung cấp các plugin tương thích với .NET 3.x hoặc .NET 4.x trong thư mục dotnet3
và dotnet4
của Firebase Unity SDK.
Nếu bạn nhập plugin Firebase không tương thích với phiên bản .NET được bật trong dự án của mình, bạn sẽ thấy lỗi biên dịch từ một số loại trong khung .NET do Parse SDK triển khai.
Để khắc phục lỗi biên dịch, nếu bạn đang sử dụng .NET 3.x:
- Loại bỏ hoặc vô hiệu hóa các DLL sau cho tất cả các nền tảng:
-
Parse/Plugins/dotNet45/Unity.Compat.dll
-
Parse/Plugins/dotNet45/Unity.Tasks.dll
-
- Kích hoạt các DLL sau cho tất cả cá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:
- Loại bỏ hoặc vô hiệu hóa các DLL sau cho tất cả các nền tảng:
-
Parse/Plugins/Unity.Compat.dll
-
Parse/Plugins/Unity.Tasks.dll
-
- Kích hoạt các DLL sau cho tất cả cá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 plugin Firebase khác:
- Trong dự án Unity của bạn, hãy điều hướng đến Nội dung > Trình giải quyết dịch vụ Play > Trình xử lý phiên bản > Cập nhật để bật các tệp DLL chính xác cho dự án của bạn.
Biên dịch Unity 2017.1 IL2CPP trong các dự án .NET 4.x
Firebase hỗ trợ .NET 4.x dưới dạng tùy chọn xây dựng thử nghiệm trong Unity 2017 trở lên. Plugin Firebase sử dụng các thành phần của Parse SDK để cung cấp một số lớp .NET 4.x trong các phiên bản .NET cũ hơn.
Do đó, Firebase Unity SDK phiên bản 5.4.0 trở lên cung cấp các tệp DLL chuyển tiếp loại để 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. Thật không may, IL2CPP (bộ chuyển mã chuyển đổi C# thành C++) được cung cấp trong Unity 2017.1.x không xử lý chính xác các tệp DLL chuyển tiếp loại dẫn đến lỗi xây dựng giống 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ó cách giải quyết nào cho lỗi xây 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.
Mạng Unity 2017.2
Cơ sở dữ liệu thời gian thực Firebase 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 plugin Cơ sở dữ liệu thời gian thực không thành công trong trình chỉnh sửa và trên máy tính để bàn.
Không có cách giải quyết nào cho vấn đề này, vì vậy bạn phải sử dụng phiên bản Unity khác, ví dụ: phiên bản 2017.1 hoặc 2017.3.
Thiếu tệp cấu hình Android Firebase 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ụ chỉnh sửa Firebase tạo Assets/Plugins/Android/Firebase/res/values/google-services.xml
dưới dạng tài nguyên Android để được đóng gói thành một Bản dựng Android để SDK Firebase có thể sử dụng nó để khởi tạo phiên bản 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 SDK Firebase tạo thư mục Assets/Plugins/Android/Firebase
, hãy đổi tên nó thành Assets/Plugins/Android/Firebase.androidlib
. Đảm bảo nó chứa AndroidManifest.xml
, project.properties
và res/values/google-services.xml
.
Sự cố với dex đơn khi xây dựng ứng dụng Android
Trong khi xây dựng ứng dụng Android, bạn có thể gặp phải lỗi xây dựng liên quan đến việc chỉ có một tệp dex. Thông báo lỗi trông tương tự 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 có thể thực thi ( .dex
) được sử dụng để chứa một tập hợp các định nghĩa lớp và dữ liệu bổ trợ liên quan của chúng 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. Quá trình xây dựng sẽ không thành công nếu tổng số 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 đã giới thiệu 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, điều này có thể làm 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 tùy chọn này trong Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu . Các tùy chọn có thể khác nhau ở các phiên bản Unity khác nhau, 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, một tùy 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
trongPlayer Settings
được bật, hãy sửa đổimainTemplate.gradle
. - Nếu bạn sử dụng Android Studio để xây dựng 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 chi tiết trong hướng dẫn sử dụng multidex .
Hỗ trợ và giải mã 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 hóa cho tất cả các thư viện Android của nó (xem ghi chú phát hành ). Khi xây dựng ứng dụng Android bằng Firebase Unity SDK (8.0.0 trở lên), bạn có thể thấy lỗi xây 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 mới hơn của Unity thêm khối compileOptions
theo mặc định trong các tệp xây dựng lớp. Để khắc phục lỗi xây dựng này trong Unity 2017 và Unity 2018, hãy thực hiện một trong các thao tác sau:
Thêm khối
compileOptions
vào mẫu lớp 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 của bạn lên 26 trở lên.
Xem thêm Khắc phục sự cố của Android - loại bỏ lỗi xây dựng .
Sự cố khi xây dựng iOS bằng Cocoapod
Khi xây dựng cho iOS, quá trình cài đặt Cocoapod có thể không thành công do lỗi về ngôn ngữ ngôn ngữ hoặc mã hóa UTF-8. Hiện tại có một số cách khác nhau để giải quyết vấn đề này.
Từ thiết bị đầu cuối, chạy trực tiếp
pod install
và mở tệp xcworkspace kết quả.Hạ cấp phiên bản Cocoapod xuống 1.10.2. Sự cố chỉ tồn tại ở phiên bản 1.11 trở lên.
Trong
~/.bash_profile
hoặc tương đương của bạn, hãy thêmexport LANG=en_US.UTF-8
Cách cập nhật phiên bản SDK Unity Firebase
Quá trình cập nhật các phiên bản SDK Unity Firebase tùy thuộc vào cách chúng được nhập ban đầu. Dưới đây là hai phương pháp nhập thay thế:
- Nhập tệp
.unitypackage
trong thư mụcAssets/
của dự án của bạn - Nhập bằng Trình quản lý gói Unity (UPM)
- Đây là cách được khuyến nghị để quản lý các gói trong Unity 2018.4+.
- Sử dụng phương pháp này để giúp việc cập nhật phiên bản trong tương lai dễ dàng hơn và thư mục
Assets/
của bạ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 của mình. Bạn có thể sử 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 quản lý gói sang UPM (phương pháp nhập được đề xuất), nếu cần.
Nếu các gói Firebase nằm trong thư mục Assets/
, bạn có hai tùy chọn để cập nhật phiên bản SDK:
Tùy chọn 1 (được khuyến nghị) : Di chuyển sang sử dụng UPM (có sẵn trong Unity 2018.4+)
- Làm theo hướng dẫn do Firebase cung cấp để di chuyển quản lý gói sang UPM .
- Mặc dù phương pháp này yêu cầu thiết lập ban đầu nhiều hơn là tiếp tục sử dụng quy trình làm việc
.unitypackage
, nhưng nó mang lại hiệu quả dễ dàng cho các bản cập nhật phiên bản SDK tiếp theo.
Cách 2 : Tiếp tục sử dụng file
.unitypackage
để import 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 xuống firebase_unity_sdk.zip từ trang web Firebase, hãy đảm bảo rằng bạn nhập tất cả
.unitypackages
từ đúng thư mụcdotnet
.- 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 Phiên bản thời gian chạy tập lệnh trong Cài đặt trình phát và nếu nó được đặ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
Việc ghi đè các phiên bản gói đã nhập trước đó sẽ được Trình quản lý phụ thuộc bên ngoài xử lý tự động (được bao gồm tự động khi bạn nhập Firebase
.unitypackages
).Tuy nhiên, nếu và CHỈ nếu quá trình tự động này không thành công, bạn sẽ cần xóa thủ công các thư mục sau 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
-
Nếu các gói Firebase được UPM quản lý, hãy nhập phiên bản SDK mới hơn dưới dạng .tgz
. Quá trình nhập này sẽ tự động ghi đè lên phiên bản trước đó.