API Tính toàn vẹn của Play

API Tính toàn vẹn của Play bảo vệ trò chơi của bạn khỏi những tương tác có tính rủi ro và lừa đảo bằng mã thông báo kết quả về tính toàn vẹn mà bạn xác minh trên máy chủ phụ trợ.

Không gian tên: PlayPcSdkManaged.Integrity

Lớp ứng dụng: IntegrityClient

Tạo ứng dụng

Sử dụng phương thức khởi tạo để tạo IntegrityClient. Nhà máy đăng ký các lệnh gọi lại dành riêng cho Unity và loại bỏ ứng dụng khi tập lệnh bị huỷ.

using UnityEngine;
using System;
using System.Threading.Tasks;
// Required SDK Namespaces
using PlayPcSdkManaged.Integrity;
using PlayPcSdkManaged.Unity;

public class IntegrityManager : MonoBehaviour
{
    private IntegrityClient _integrityClient;

    public void SetupIntegrity()
    {
        try
        {
            // Creates the client with the required UnityIntegrityCallbacksHandler
            _integrityClient = PlayPcSdkFactory.CreateIntegrityClient();
            Debug.Log("Integrity Client created successfully.");
        }
        catch (Exception ex)
        {
            Debug.LogError($"Failed to create Integrity Client: {ex.Message}");
        }
    }

    private void OnDestroy()
    {
        // Always dispose of the client
        _integrityClient?.Dispose();
    }
}

Yêu cầu mã thông báo tính toàn vẹn

Yêu cầu mã thông báo về tính toàn vẹn là một quy trình gồm 2 bước:

  • Chuẩn bị. Khởi động dịch vụ đảm bảo tính toàn vẹn và tạo mã phiên.

  • Yêu cầu. Sử dụng mã phiên từ bước chuẩn bị để yêu cầu mã thông báo đã ký thực tế.

public async Task RequestIntegrityTokenAsync()
{
    try
    {
        // Replace with your actual Google Cloud Project Number
        long myCloudProjectNumber = 123456789;

        // ---------------------------------------------------------
        // Step 1: Prepare the Token
        // ---------------------------------------------------------
        var prepareParams = new PrepareIntegrityTokenParams
        {
            CloudProjectNumber = myCloudProjectNumber
        };

        Debug.Log("Preparing Integrity Token...");
        var prepareResult = await _integrityClient.PrepareIntegrityTokenAsync(prepareParams);

        if (!prepareResult.IsOk)
        {
            Debug.LogError($"Prepare Failed: {prepareResult.Code} - {prepareResult.ErrorMessage}");
            return;
        }

        // ---------------------------------------------------------
        // Step 2: Request the Token
        // ---------------------------------------------------------
        // You must use the RequestTokenData returned from the prepare step
        var requestParams = new RequestIntegrityTokenParams
        {
            RequestTokenData = prepareResult.Value.RequestTokenData,

            // A nonce to bind this token to a specific request or action.
            // This should be generated by your backend server.
            RequestHash = "your_secure_nonce_string"
        };

        Debug.Log("Requesting Integrity Token...");
        var tokenResult = await _integrityClient.RequestIntegrityTokenAsync(requestParams);

        if (tokenResult.IsOk)
        {
            // The TokenBytes is already a string (Base64 URL-safe web token)
            string signedToken = tokenResult.Value.TokenBytes;

            Debug.Log("Integrity Token Received. Sending to backend for verification...");

            // Send 'signedToken' to your backend server for verification
        }
        else
        {
            Debug.LogError($"Request Failed: {tokenResult.Code} - {tokenResult.ErrorMessage}");
        }
    }
    catch (Exception ex)
    {
        Debug.LogException(ex);
    }
}