Gỡ lỗi quy trình tạo, cài đặt và chạy trò chơi

Giới thiệu

Sau đây là hướng dẫn gỡ lỗi quá trình biên dịch và xây dựng cho các trò chơi Unity bằng cách sử dụng Firebase SDK cho Unity. Tài liệu này mô tả cách điều tra và giải quyết nhiều vấn đề phổ biến mà bạn có thể gặp phải trong khi định cấu hình và xây dựng trò chơi cho một nền tảng mới hoặc sau khi cập nhật. Danh sách này được sắp xếp theo thứ tự thời điểm có thể xảy ra các lỗi này trong quá trình xử lý. Hãy tham khảo ý kiến của họ theo thứ tự và tiến hành xử lý khi từng vấn đề được giải quyết.

Ngoài tài liệu này, hãy tham khảo Câu hỏi thường gặp về Firebase cho Unity để biết thêm thông tin.

Vấn đề về việc biên dịch Chế độ Play

Lớp đầu tiên của các vấn đề về bản dựng có thể xảy ra trong quá trình kiểm thử trong trình chỉnh sửa trước khi bạn cố gắng bắt đầu một bản dựng dành cho thiết bị di động. Phần này đề cập đến tất cả lỗi Firebase xảy ra trước và trong Chế độ Play.

Khi khởi động hoặc phát hiện các thay đổi đối với phần phụ thuộc, mã hoặc các thành phần khác, Unity sẽ cố gắng tạo lại dự án. Nếu dự án không thể biên dịch tại thời điểm đó, trình chỉnh sửa sẽ ghi lỗi biên dịch vào bảng điều khiển và nếu cố gắng vào Chế độ Play, bạn sẽ thấy một cửa sổ bật lên báo lỗi trong thẻ Scene của Unity với nội dung All compiler errors have to be fixed before you can enter playmode!.

Thiếu loại, lớp, phương thức và thành phần

Nhiều vấn đề Firebase xảy ra do trình chỉnh sửa và trình biên dịch không thể tìm thấy các loại, lớp, phương thức và thành phần cần thiết. Dấu hiệu thường gặp của tình trạng này là các biến thể của:

The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'

Các bước giải quyết:
  1. Nếu bạn đang sử dụng các lớp hoặc phương thức Firebase trong mã, hãy đảm bảo bạn đã cung cấp các lớp hoặc phương thức đó bằng cách sử dụng lệnh using chính xác cho các sản phẩm Firebase cụ thể cần thiết.

    1. Ví dụ trong bài viết MechaHamster: Nâng cấp cùng phiên bản Firebase:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Xác minh rằng bạn đã nhập các gói Firebase thích hợp:

    1. Để nhập các gói thích hợp, hãy làm như sau:
      1. Thêm Firebase Unity SDK dưới dạng .unitypackage hoặc
      2. Xem xét và thực hiện một trong các phương án thay thế trong các tuỳ chọn cài đặt Unity bổ sung.
    2. Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn và EDM4U:
      • Có cùng phiên bản
      • Được cài đặt dưới dạng .unitypackage độc quyền HOẶC chỉ thông qua Trình quản lý gói Unity.
  3. Nếu bạn đã nhập Firebase Unity SDK trước phiên bản "10.0.0" dưới dạng .unitypackage, thì kho lưu trữ zip Firebase Unity SDK chứa các gói hỗ trợ cả .NET 3.x và .NET 4.x. Đảm bảo rằng bạn chỉ đưa cấp độ .NET Framework tương thích vào dự án:

    1. Khả năng tương thích giữa các phiên bản Trình chỉnh sửa Unity và Cấp độ khung .NET sẽ được thảo luận trong bài viết Thêm Firebase vào dự án Unity.
    2. Nếu bạn vô tình nhập các gói Firebase ở cấp độ .NET Framework không chính xác hoặc cần chuyển từ việc sử dụng .unitypackage sang một trong các Tuỳ chọn cài đặt Unity bổ sung , thì cách đơn giản nhất là xoá mọi gói Firebase thông qua các phương thức nêu trong mục di chuyển này rồi nhập lại tất cả các gói Firebase.
  4. Kiểm tra để đảm bảo rằng trình chỉnh sửa đang tạo lại dự án và các lượt phát phản ánh trạng thái mới nhất của dự án:

    1. Theo mặc định, trình chỉnh sửa Unity được thiết lập để tạo lại bất cứ khi nào phát hiện thấy các thay đổi về thành phần hoặc cấu hình.
    2. Có thể chức năng này đã bị tắt và Trình chỉnh sửa Unity được đặt thành làm mới/biên dịch lại thủ công. Hãy kiểm tra vấn đề này và thử làm mới theo cách thủ công nếu trường hợp này xảy ra.

Lỗi thời gian chạy của Chế độ phát

Nếu trò chơi của bạn bắt đầu nhưng gặp sự cố với Firebase trong khi chạy, hãy thử các cách sau:

Đảm bảo rằng bạn phê duyệt các gói Firebase trong phần "Bảo mật và quyền riêng tư" trên Mac OS

Nếu khi khởi động trò chơi trong trình chỉnh sửa trên Mac OS, bạn thấy một hộp thoại có nội dung "Không thể mở FirebaseCppApp-<version>.bundle vì không xác minh được nhà phát triển.", bạn phải phê duyệt tệp gói cụ thể đó trong trình đơn Bảo mật và quyền riêng tư của máy Mac.

Để thực hiện việc này, hãy nhấp vào Biểu tượng Apple > System Preferences > Security & Privacy (Bảo mật và quyền riêng tư)

Trong trình đơn bảo mật, ở khoảng giữa trang, có một phần cho biết ""FirebaseCppApp-<version>.bundle" đã bị chặn sử dụng vì ứng dụng này không phải của một nhà phát triển đã xác định."

Nhấp vào nút có nhãn Vẫn cho phép.

c35166e224cce720.pngS.

Quay lại Unity rồi nhấn lại vào Play (Phát).

Sau đó, bạn sẽ thấy một cảnh báo tương tự như cảnh báo đầu tiên:

5ad9ddb0d3a52892.pngS

Nhấn Open (Mở) và chương trình của bạn sẽ có thể tiếp tục; bạn sẽ không được hỏi về tệp cụ thể này nữa.

Đảm bảo dự án của bạn chứa và đang sử dụng các tệp cấu hình hợp lệ

  1. Hãy đảm bảo chế độ cài đặt bản dựng của bạn được thiết lập cho mục tiêu mà bạn mong muốn (iOS hoặc Android) trong phần File > Build Settings (Tệp > Cài đặt bản dựng). Để thảo luận đầy đủ hơn, hãy đọc Tài liệu về cài đặt bản dựng Unity.
  2. Tải tệp cấu hình xuống cho ứng dụng của bạn (google-services.json cho Android hoặc GoogleService-Info.plist cho iOS) và mục tiêu bản dựng từ bảng điều khiển của Firebase trong phần Cài đặt dự án > Ứng dụng của bạn: Nếu bạn đã có các tệp này, hãy xóa các tệp này trong dự án và thay thế bằng phiên bản mới nhất, đảm bảo rằng các tệp được viết chính xác như hiển thị ở trên mà không có "(1)" hoặc các số khác đi kèm với tên tệp.
  3. Nếu bảng điều khiển chứa thông báo liên quan đến tệp trong Assets/StreamingAssets/, hãy đảm bảo không có thông báo nào trên bảng điều khiển cho biết Unity không thể chỉnh sửa tệp ở đó
  4. Hãy đảm bảo Assets/StreamingAssets/google-services-desktop.json được tạo và khớp với tệp cấu hình đã tải xuống.
    • Nếu thư mục này không được tạo tự động và StreamingAssets/ không tồn tại, hãy tạo thư mục trong thư mục Assets theo cách thủ công.
    • Kiểm tra xem Unity hiện đã tạo google-services-desktop.json hay chưa.

Đảm bảo rằng mọi sản phẩm Firebase và EDM4U đều được cài đặt riêng thông qua .unitypackage hoặc Trình quản lý gói Unity

  1. Kiểm tra cả thư mục Assets/ và Trình quản lý gói Unity để đảm bảo rằng Firebase SDK và EDM4U được cài đặt riêng thông qua một hoặc phương thức kia.
  2. Một số trình bổ trợ do Google phát triển (chẳng hạn như Google Play và trình bổ trợ của bên thứ ba) có thể phụ thuộc vào EDM4U. Các trình bổ trợ đó có thể bao gồm EDM4U trong gói .unitypackage hoặc gói Trình quản lý gói Unity (UPM) của chúng. Đảm bảo chỉ có một bản sao của EDM4U trong dự án của bạn. Nếu bất kỳ gói UPM nào phụ thuộc vào EDM4U, tốt nhất bạn chỉ nên giữ lại các phiên bản UPM của EDM4U. Bạn có thể tìm thấy các phiên bản UPM trên trang Google API for Unity Archive.

Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn đều có cùng một phiên bản.

  1. Nếu bạn đã cài đặt SDK Firebase thông qua .unitypackage, hãy kiểm tra xem tất cả thư viện FirebaseCppApp trong Assets/Firebase/Plugins/x86_64/ có ở cùng một phiên bản hay không.
  2. Nếu Firebase SDK được cài đặt thông qua Trình quản lý gói Unity (UPM), hãy mở Windows > Package Manager (Trình quản lý gói), tìm "Firebase" và đảm bảo tất cả các gói Firebase đều ở cùng một phiên bản.
  3. Nếu dự án của bạn chứa các phiên bản Firebase SDK khác nhau, thì bạn nên xóa hoàn toàn toàn bộ Firebase SDK trước khi cài đặt lại tất cả Firebase SDK, lần này với cùng một phiên bản. Cách gọn gàng nhất là xoá mọi gói Firebase thông qua các phương thức được đề cập trong phần di chuyển này.

Lỗi bản dựng trình phân giải và thiết bị mục tiêu

Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa (được định cấu hình cho mục tiêu bản dựng phù hợp mà bạn chọn), tiếp theo, hãy xác minh rằng Trình quản lý phần phụ thuộc bên ngoài dành cho Unity (EDM4U) được định cấu hình và hoạt động đúng cách.

Kho lưu trữ EDM4U GitHub chứa hướng dẫn từng bước cho phần này của quy trình mà bạn nên xem xét và làm theo trước khi tiếp tục.

Các vấn đề và giảm thiểu về "Single Dex" (Bắt buộc nếu sử dụng Cloud Firestore)

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 .dex dùng để lưu trữ một tập hợp các định nghĩa về lớp và dữ liệu bổ trợ liên quan cho các ứng dụng Android. Một tệp dex chỉ được tham chiếu đến 65.536 phương thức; các bản 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.

Hai bước sau đây có thể được áp dụng tuần tự; chỉ bật multidex nếu việc rút gọn không giải quyết được vấn đề.

Bật tính năng giảm kích thước

Unity ra mắt tính năng Minification (Rút gọn) vào năm 2017.2 để loại bỏ mã không dùng đến. Đ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 tuỳ 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. * Các tuỳ 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.

Bật Multidex

Nếu sau khi bật tính năng giảm kích thước, số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, thì bạn có thể bật multidex. Có nhiều cách để đạt được điều này trong Unity:

  • Nếu Mẫu Gradle tuỳ chỉnh trong phần Player Settings (Cài đặt trình phát) đang 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ể xem thêm thông tin chi tiết trong hướng dẫn sử dụng Multidex.

Tìm hiểu và khắc phục lỗi thời gian chạy trên thiết bị mục tiêu

Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa cũng như có thể xây dựng và cài đặt cho thiết bị mục tiêu, nhưng bạn gặp lỗi thời gian chạy, hãy kiểm tra và điều tra nhật ký được tạo trên thiết bị.

Phần này giải thích chi tiết cách kiểm tra nhật ký của bạn để tìm các lỗi có thể xảy ra và một lỗi chỉ xảy ra trong thời gian chạy trên thiết bị hoặc trình mô phỏng.

Android

Trình mô phỏng

  • Kiểm tra nhật ký xuất hiện trong bảng điều khiển của Trình mô phỏng hoặc xem cửa sổ Logcat.

Thiết bị

Làm quen với adblogcat adb cũng như cách sử dụng chúng.

  • Mặc dù bạn có thể sử dụng nhiều công cụ của môi trường dòng lệnh để lọc kết quả đầu ra, nhưng hãy cân nhắc xem xét các tuỳ chọn của logcat.
  • Một cách đơn giản để bắt đầu phiên ADB bằng phương tiện chặn sạch là:

    adb logcat -c && adb logcat <OPTIONS>
    

    trong đó OPTIONS là bất kỳ cờ nào bạn truyền dòng lệnh để lọc đầu ra.

Sử dụng Logcat thông qua Android Studio

Khi sử dụng Logcat thông qua Android Studio, bạn có thể dùng thêm các công cụ tìm kiếm khác để đơn giản hoá việc tạo các kết quả tìm kiếm hiệu quả.

iOS

Kiểm tra nhật ký

Nếu bạn đang chạy một thiết bị thực, hãy gắn thiết bị đó vào máy tính. Kiểm tra lldb trong Xcode.

Các vấn đề về Swift

Nếu bạn gặp phải nhật ký lỗi đề cập đến swift, hãy tham khảo phần Trình quản lý phần phụ thuộc bên ngoài dành cho Unity về các lỗi đó.

Các bước khác

Nếu trò chơi của bạn vẫn gặp vấn đề về việc biên dịch, tạo hoặc chạy liên quan đến Firebase, hãy kiểm tra trang vấn đề về SDK Firebase cho Unity và cân nhắc báo cáo vấn đề mới. Ngoài ra, hãy tham khảo trang hỗ trợ của Firebase để tìm hiểu về các lựa chọn khác.