Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Khắc phục sự cố và câu hỏi thường gặp dành cho Unity và Firebase

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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.

Có những thách thức khác hoặc không thấy vấn đề của bạn được nêu bên dưới? Hãy nhớ xem Câu hỏi thường gặp về Firebase chính để biết thêm về Câu hỏi thường gặp về pan-Firebase hoặc dành cho sản phẩm cụ thể.

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. Các 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 trước đó.

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 dotnet3dotnet4 của Firebase Unity SDK.

Nếu bạn nhập một 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 được Parse SDK triển khai.

Để giải quyết lỗi biên dịch, nếu bạn đang sử dụng .NET 3.x:

  1. Xóa hoặc tắ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
  2. Bật các tệp DLL sau cho tất cả các nền tảng:
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

Để giải quyết lỗi biên dịch, nếu bạn đang sử dụng .NET 4.x:

  1. Xóa hoặc tắ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
  2. Bật các tệp 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, điều hướng đến Nội dung > Trình phân giải 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. Các 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 trước đó.

Do đó, Firebase Unity SDK phiên bản 5.4.0 trở lên cung cấp các DLL chuyển tiếp kiểu chuyển tiếp các kiểu Phân tích cú pháp (ví dụ: việc triển khai Phân tích cú pháp của System.Threading.Tasks.Task ) tới khung công tác .NET. Thật không may, IL2CPP (một trình chuyển đổi 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 tệp DLL chuyển tiếp loại dẫn đến lỗi bản 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 không có giải pháp thay thế 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 với IL2CPP.

Mạng Unity 2017.2

Cơ sở dữ liệu thời gian thực của 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 bị lỗi trong trình chỉnh sửa và trên máy tính để bàn.

Không có giải pháp thay thế 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 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ụ biên tập 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 chạy phiên bản FirebaseApp mặc định.

Trong Unity 2020, tất cả tài nguyên Android phải nằm trong 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 rằng nó chứa AndroidManifest.xml , project.propertiesres/values/google-services.xml .

Sự cố với một dex trong 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 có một tệp dex duy nhất. Thông báo lỗi trông tương tự như sau, nếu dự án của bạn được 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 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ả 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 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 của Unity) để loại bỏ mã không sử dụng, 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> Thu nhỏ . Các tùy chọn có thể khác nhau trong các phiên bản Unity khác nhau, vì vậy hãy tham khảo tài liệu Unity chính thức.

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 trong Player Settings Trình phát được bật, hãy sửa đổi mainTemplate.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 thông tin chi tiết trong hướng dẫn sử dụng multidex .

Hỗ trợ Java 8 và gỡ lỗi 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 gỡ lỗi cho tất cả các thư viện Android của nó (xem ghi chú phát hành ). Khi tạo ứng dụng Android với Firebase Unity SDK (8.0.0 trở lên), bạn có thể gặp 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 Unity mới hơn 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 thực hiện một trong các thao tác sau:

  • Thêm khối compileOptions vào mẫu gradle của bạn:

    1. Sử dụng Gradle làm hệ thống xây dựng.
    2. Bật Custom Gradle Template trong Player Settings Trình phát.
    3. Thêm các dòng sau vào mainTemplate.gradle (hoặc build.gradle cấp mô-đun nếu xuất dự án cho Android Studio):

      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
      
  • Ngoài ra, hãy tăng minSdkVersion cho dự án Android của bạn lên 26 hoặc cao hơn.

Xem thêm Khắc phục sự cố Android - gỡ lỗi bản dựng .

Sự cố khi xây dựng cho iOS với Cocoapods

Khi xây dựng cho iOS, cài đặt Cocoapod có thể không thành công với lỗi về ngôn ngữ địa phươ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 pod install trực tiếp và mở tệp xcworkspace kết quả.

  • Hạ cấp phiên bản Cocoapods xuống 1.10.2. Sự cố chỉ tồn tại trong phiên bản 1.11 và mới hơn.

  • Trong ~/.bash_profile của bạn hoặc tương đương, thêm export LANG=en_US.UTF-8

Cách cập nhật phiên bản của Firebase Unity SDKs

Quá trình cập nhật các phiên bản của Firebase Unity SDK 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ục Assets/ dự án của bạn
  • Nhập bằng Trình quản lý gói thống nhất (UPM)
    • Đây là cách được đề xuất để quản lý các gói trong Unity 2018.4+.
    • Sử dụng phương pháp này để cập nhật phiên bản trong tương lai dễ dàng hơn và Assets/ thư mục của bạn sạch hơn.

Trong dự án Unity của mình, bạn chỉ nên sử dụng một phương pháp nhập để quản lý tất cả các gói Firebase của mình. Các hướng dẫn bên dưới có thể được sử dụng để không chỉ cập nhật phiên bản của từng gói riêng lẻ mà còn để di chuyển quản lý gói sang UPM (phương pháp nhập được khuyến nghị), nếu cần.