Play Integrity

Play Integrity API, आपके गेम को जोखिम भरे और धोखाधड़ी वाले इंटरैक्शन से बचाता है. इसके लिए, वह इंटिग्रिटी के नतीजे वाला टोकन जनरेट करता है. इस टोकन की पुष्टि, बैकएंड सर्वर पर की जाती है.

नेमस्पेस: PlayPcSdkManaged.Integrity

क्लाइंट क्लास: IntegrityClient

क्लाइंट बनाना

IntegrityClient बनाने के लिए, फ़ैक्ट्री का इस्तेमाल करें. फ़ैक्ट्री, Unity के लिए खास तौर पर बनाए गए कॉलबैक रजिस्टर करती है. साथ ही, स्क्रिप्ट के बंद होने पर क्लाइंट को हटा देती है.

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