সততা খেলুন

আপনার ব্যাকএন্ড সার্ভারে যাচাই করা একটি ইন্টিগ্রিটি রায় টোকেনের মাধ্যমে প্লে ইন্টিগ্রিটি এপিআই আপনার গেমটিকে ঝুঁকিপূর্ণ এবং প্রতারণামূলক ইন্টারঅ্যাকশন থেকে রক্ষা করে।

নেমস্পেস: PlayPcSdkManaged.Integrity

ক্লায়েন্ট ক্লাস: IntegrityClient

ক্লায়েন্ট তৈরি করুন

IntegrityClient তৈরি করতে ফ্যাক্টরি ব্যবহার করুন। ফ্যাক্টরি ইউনিটি-নির্দিষ্ট কলব্যাক নিবন্ধন করে এবং স্ক্রিপ্টটি নষ্ট হয়ে গেলে ক্লায়েন্টকে নিষ্পত্তি করে।

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();
    }
}

একটি অখণ্ডতা টোকেনের অনুরোধ করুন

একটি ইন্টিগ্রিটি টোকেন অনুরোধ করা একটি দুই-পদক্ষেপের প্রক্রিয়া:

  • প্রস্তুত করুন। ইন্টিগ্রিটি সার্ভিসকে উষ্ণ করে এবং একটি সেশন আইডি তৈরি করে।

  • অনুরোধ। প্রস্তুতির ধাপ থেকে সেশন আইডি ব্যবহার করে প্রকৃত স্বাক্ষরিত টোকেনটি অনুরোধ করে।

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);
    }
}