Tính năng

Phần này cung cấp hướng dẫn chi tiết về cách triển khai các mô-đun cốt lõi mà Google Play Games PC SDK cho Unity hỗ trợ:

Khởi chạy

Bạn phải khởi động SDK trước khi cố gắng sử dụng bất kỳ tính năng nào khác. Quy trình này thiết lập kết nối giữa trò chơi Unity của bạn và thời gian chạy Google Play Games trên máy tính.

Không gian tên: PlayPcSdkManaged.Initialization

Điểm truy cập: GooglePlayInitialization

Triển khai

Bạn phải truy xuất trình xử lý gọi lại dành riêng cho Unity từ PlayPcSdkFactory và truyền trình xử lý đó đến phương thức khởi tạo. Để đảm bảo tính ổn định, bạn nên bao bọc logic khởi tạo trong một trình chạy không đồng bộ an toàn để xử lý các trường hợp ngoại lệ tiềm ẩn và ngăn chặn việc khởi tạo hai lần.

using UnityEngine;
using System;
using System.Threading.Tasks;
// Import the SDK namespaces
using PlayPcSdkManaged.Initialization;
using PlayPcSdkManaged.Unity;

public class GooglePlayPCSDKInit : MonoBehaviour
{
    // Prevent double-initialization if this script is reloaded
    private static bool _isInitialized = false;

    private void Start()
    {
        // Use the "Safe Runner" pattern to fire the async method
        _ = InitializeSdkAsync();
    }

    private async Task InitializeSdkAsync()
    {
        if (_isInitialized)
        {
            Debug.LogWarning("SDK is already initialized. Skipping.");
            return;
        }

        try
        {
            Debug.Log("Initializing Google Play PC SDK...");

            // 1. Get the Unity-specific initialization handler from the factory
            var initHandler = PlayPcSdkFactory.InitializationHandler;

            // 2. Call InitializeAsync to start the connection
            var result = await GooglePlayInitialization.InitializeAsync(initHandler);

            // 3. Check the result
            if (result.IsOk)
            {
                _isInitialized = true;
                Debug.Log("SDK Initialized Successfully!");
                // You can now create BillingClient or IntegrityClient instances
            }
            else
            {
                Debug.LogError($"Initialization Failed!");
                Debug.LogError($"Error Code: {result.Code}");
                Debug.LogError($"Message: {result.ErrorMessage}");
            }
        }
        catch (Exception ex)
        {
            // Catch unexpected crashes or task failures
            Debug.LogError($"Exception during initialization: {ex.Message}");
            Debug.LogException(ex);
        }
    }
}

Tài liệu tham khảo về việc xử lý lỗi

SDK sử dụng một đối tượng Result cho tất cả kết quả API dự kiến. Bạn nên kiểm tra Result.Code để xử lý các trường hợp như lỗi mạng hoặc việc người dùng huỷ.

Lưu ý: Mặc dù bản thân các API SDK không đưa ra ngoại lệ cho lỗi logic, nhưng bạn vẫn nên bao bọc các phương thức async cấp cao nhất trong một khối try-catch. Điều này đảm bảo rằng các lỗi không mong muốn về thời gian chạy (chẳng hạn như các giá trị tham chiếu rỗng trong mã của riêng bạn hoặc lỗi lập lịch tác vụ) được ghi nhật ký chính xác trong bảng điều khiển Unity.