Giới thiệu
Sau đây là hướng dẫn gỡ lỗi quy trình biên dịch và tạo cho các trò chơi Unity bằ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 đề thường gặp hơn mà bạn có thể gặp phải trong khi định cấu hình và tạo 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ác lỗi này có thể xảy ra trong quy trình. Hãy tham khảo ý kiến của họ theo thứ tự và tiếp tục 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ề quá trình biên dịch Chế độ phát
Vấn đề đầu tiên về bản dựng có thể xảy ra trong khi kiểm thử trong trình chỉnh sửa trước khi bạn thử bắt đầu một bản dựng di động. Phần này đề cập đến tất cả các lỗi Firebase xảy ra trước và trong Chế độ phát.
Khi Unity khởi động hoặc phát hiện các thay đổi đối với các 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 vào thời điểm đó, trình chỉnh sửa sẽ ghi lại các lỗi biên dịch vào bảng điều khiển và nếu bạn cố gắng chuyển sang Chế độ phát, bạn sẽ nhận được một cửa sổ bật lên lỗi trong thẻ Scene (Cảnh) của Unity có nội dung All compiler errors have to be fixed before you can enter playmode!
.
Gỡ lỗi các vấn đề về quá trình biên dịch liên quan đến Firebase
Thiếu các loại, lớp, phương thức và thành viên
Nhiều vấn đề về Firebase xảy ra do trình chỉnh sửa và trình biên dịch không tìm thấy các loại, lớp, phương thức và thành phần cần thiết. Các triệu chứng thường gặp của tình trạng này là các biến thể của những triệu chứng sau:
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:
Khi bạn đang sử dụng các lớp hoặc phương thức Firebase trong mã, hãy đảm bảo rằng bạn đang cung cấp các lớp hoặc phương thức đó bằng cách có chỉ thị
using
chính xác cho các sản phẩm Firebase cụ thể cần thiết.Xác minh rằng bạn đã nhập các gói Firebase phù hợp:
- Để nhập các gói phù hợp, hãy làm theo một trong hai cách sau:
- Thêm Firebase Unity SDK dưới dạng
.unitypackage
s hoặc - Xem xét và thực hiện một trong các lựa chọn thay thế trong phần Các lựa chọn cài đặt Unity bổ sung.
- Thêm Firebase Unity SDK dưới dạng
- Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn và EDM4U:
- Đang ở cùng một phiên bản
- Được cài đặt dưới dạng
.unitypackage
s độc quyền HOẶC độc quyền thông qua Trình quản lý gói Unity.
- Để nhập các gói phù hợp, hãy làm theo một trong hai cách sau:
Nếu bạn đã nhập Firebase Unity SDK trước phiên bản "10.0.0" dưới dạng
.unitypackage
, thì tệp lưu trữ zip Firebase Unity SDK sẽ chứa các gói hỗ trợ cả .NET 3.x và .NET 4.x. Đảm bảo rằng bạn chỉ thêm cấp độ .NET Framework tương thích vào dự án của mình:- Khả năng tương thích giữa các phiên bản của Trình chỉnh sửa Unity và Cấp độ .NET Framework được đề cập trong bài viết Thêm Firebase vào dự án Unity.
- 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 Lựa 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 được đề cập trong phần di chuyển này, sau đó nhập lại tất cả các gói Firebase.
Kiểm tra để đảm bảo trình chỉnh sửa đang tạo lại dự án và các lần bạn thử phát đều phản ánh trạng thái mới nhất của dự án:
- 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 thay đổi về tài sản hoặc cấu hình.
- Có thể chức năng này đã bị tắt và Unity Editor được đặt thành làm mới/biên dịch lại theo cách 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 đúng là như vậy.
Lỗi thời gian chạy ở Chế độ phát
Nếu trò chơi của bạn khởi động nhưng gặp vấn đề với Firebase trong khi chạy, hãy thử những 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 hệ điều hành Mac
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", thì 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 Mac.
Để làm như vậy, hãy nhấp vào Biểu tượng Apple > Tuỳ chọn hệ thống > 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ì 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 Cho phép dù sao.
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:
Nhấn vào 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 lại về tệp cụ thể này.
Đả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ệ
- Đảm bảo rằng chế độ cài đặt bản dựng được đặt cho mục tiêu mà bạn muốn (iOS hoặc Android) trong File > Build Settings (Tệp > Cài đặt bản dựng). Để biết thêm thông tin, hãy đọc Tài liệu về chế độ cài đặt bản dựng của Unity.
- Tải tệp cấu hình xuống cho ứng dụng của bạn (
google-services.json
cho Android hoặcGoogleService-Info.plist
cho iOS) và tạo mục tiêu từ bảng điều khiển Firebase trong Project Settings > Your Apps (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 xoá chúng trong dự án và thay thế bằng phiên bản mới nhất, đảm bảo rằng bạn viết chính xác tên tệp như hiển thị ở trên mà không có "(1)" hoặc các số khác được đính kèm vào tên tệp. - Nếu bảng điều khiển có thông báo liên quan đến các 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 các tệp ở đó - Đả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à không tồn tại, hãy tạo thư mục theo cách thủ công trong thư mục
Assets
.StreamingAssets/
- Kiểm tra xem Unity đã tạo
google-services-desktop.json
hay chưa.
- Nếu thư mục này không được tạo tự động và không tồn tại, hãy tạo thư mục theo cách thủ công trong thư mục
Đảm bảo rằng mọi sản phẩm của Firebase và EDM4U đều được cài đặt riêng thông qua .unitypackage
hoặc Unity Package Manager
- Kiểm tra cả thư mục
Assets/
và Unity Package Manager để đảm bảo rằng Firebase SDK và EDM4U được cài đặt bằng một trong hai phương thức này. - 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ợ 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
.unitypackage
hoặc các gói Trình quản lý gói Unity (UPM). Đảm bảo dự án của bạn chỉ có một bản sao EDM4U. Nếu có bất kỳ gói UPM nào phụ thuộc vào EDM4U, thì tốt nhất bạn chỉ nên giữ các phiên bản UPM của EDM4U. Bạn có thể tìm thấy các phiên bản này trên trang Lưu trữ Google API cho Unity.
Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn đều ở cùng một phiên bản.
- Nếu bạn đã cài đặt Firebase SDK thông qua
.unitypackage
, hãy kiểm tra xem tất cả các thư việnFirebaseCppApp
trongAssets/Firebase/Plugins/x86_64/
có cùng phiên bản hay không. - Nếu bạn đã cài đặt SDK Firebase thông qua Trình quản lý gói Unity (UPM), hãy mở Windows > Trình quản lý gói, tìm kiếm "Firebase" và đảm bảo tất cả các gói Firebase đều ở cùng một phiên bản.
- Nếu dự án của bạn chứa nhiều phiên bản SDK Firebase, bạn nên xoá hoàn toàn tất cả SDK Firebase trước khi cài đặt lại tất cả SDK Firebase, lần này là với cùng một phiên bản. Cách đơn giản 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 của 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), hãy xác minh rằng Trình quản lý phần phụ thuộc bên ngoài cho Unity (EDM4U) được định cấu hình và hoạt động đúng cách.
Kho lưu trữ EDM4U trên GitHub có 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.
Vấn đề về "Single Dex" và việc giảm thiểu (Bắt buộc nếu dùng Cloud Firestore)
Trong khi tạo ứng dụng Android, bạn có thể gặp phải 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
được dùng để lưu trữ một tập hợp các định nghĩa lớp và dữ liệu bổ trợ được liên kết cho các ứng dụng Android. Một tệp dex chỉ được phép 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ả các thư viện Android trong dự án của bạn vượt quá giới hạn này.
Bạn có thể áp dụng tuần tự 2 bước sau; chỉ bật multidex nếu việc giảm thiểu không giải quyết được vấn đề.
Bật tính năng rút gọn
Unity đã giới thiệu tính năng Giảm thiểu trong phiên bản 2017.2 để loại bỏ mã không dùng đến. Nhờ đó, bạn 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 lựa chọn này trong phần Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu). * Các lựa chọn có thể khác nhau trong 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.
Bật Multidex
Nếu sau khi bật tính năng rút gọn, 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 để thực hiện việc này trong Unity:
- Nếu bạn bật Custom Gradle Template (Mẫu Gradle tuỳ chỉnh) trong phần Player Settings (Cài đặt trình phát), hãy sửa đổi
mainTemplate.gradle
. - Nếu bạn 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ể tìm 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 của 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 và có thể được tạo và cài đặt vào thiết bị mục tiêu, nhưng bạn gặp phải 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 trình bày chi tiết cách điều tra nhật ký để 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 adb và adb logcat 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 đầu ra, nhưng hãy cân nhắc việc xem xét các lựa chọn của logcat.
Cách đơn giản để bắt đầu một phiên ADB mà không có dữ liệu nào 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 các công cụ tìm kiếm bổ sung giúp tạo các lượt tìm kiếm hiệu quả một cách đơn giản hơn.
iOS
Kiểm tra nhật ký
Nếu đ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.
Vấn đề về Swift
Nếu bạn gặp 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 cho Unity liên quan đến các nhật ký lỗi đó.
Các bước tiếp theo
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 tìm hiểu trang về các vấn đề của Firebase SDK cho Unity và cân nhắc việc báo cáo một 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.