Usage

Theming Options Explained:

Decide which values will be used as triggers (e.g., "spending_amount," "time_played," "level," etc.). You can use any variable you choose. In the web app, when creating a survey, select the trigger parameters and their values, such as level = 3 and time_played = 15 (minutes).

Implement a call whenever you want to update the value of a trigger and possibly display a survey.

using PlaytestingGames.InAppSurvey;

// Call CheckForSurvey
var triggerFields = new List<Trigger> {
    new TriggerField("level", "4"); // field
    new TriggerField("playedTime", "15"); // field
    new TriggerEvent("NEW_ROUND"); // event
    // ...
};


InAppSurvey.CheckForSurvey(triggers, inAppSurveyCallbackHandler)


// Implement InAppSurvey.Callback - Optional in case you want custom logic 
private InAppSurveyCallbackHandler inAppSurveyCallbackHandler = new InAppSurveyCallbackHandler();

public class InAppSurveyCallbackHandler : InAppSurvey.Callback
{
    public void OnNotAvailable()
    {
        // do something if needed
        Debug.Log("InAppSurvey.Callback --> OnNotAvailable");
    }

    public void OnReadyToShow()
    {
        // consider to pause the game if needed
        Debug.Log("InAppSurvey.Callback --> OnReadyToShow");
    }

    public void OnDismissed()
    {
        // user dismissed the survey
        Debug.Log("InAppSurvey.Callback --> OnDismissed");
    }

    public void OnCompleted()
    {
        // user completed the survey
        Debug.Log("InAppSurvey.Callback --> OnCompleted ");
    }
}


// To test the implementation you can call: on your Start function
InitInAppSurvey(() => {
  var triggerFields = new List<Trigger> {
	    new TriggerField("level", "4"); // field
	    new TriggerField("playedTime", "15"); // field
	    new TriggerEvent("NEW_ROUND"); // event
	    // ...
	};

	CheckForSurvey(triggers, inAppSurveyCallbackHandler)

});

Complete Example:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using PlaytestingGames.InAppSurvey;

public class ExampleUsage : MonoBehaviour
{
    public static Button getSurveyButton;

    private InAppSurveyCallbackHandler inAppSurveyCallbackHandler = new InAppSurveyCallbackHandler();

    void Start()
    {
        Debug.Log("...STARTING GAME...");

        InitInAppSurvey(() => {
            CheckForSurvey();
        });
    }

    void Update()
    {
    
    }


    private void InitInAppSurvey(Action onSuccess)
    {
        
        var access = new Access(
            "sdasdasdnsda2",
            "5xz4ixz4jdxg2omzd4o1dtbtyynavpbh",
            "demo_player_id_unity_1234",
            "2.0",
            true
        );

        // Helper Function
        public static Color HexToColor(string hex)
        {
            // Remove the '#' character if present
            if (hex.StartsWith("#"))
            {
                hex = hex.Substring(1);
            }

            // Ensure the hex string is the correct length
            if (hex.Length != 6 && hex.Length != 8)
            {
                Debug.LogError("Invalid hex string length.");
                return Color.white;
            }

            // Parse the hex string
            byte r = byte.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
            byte g = byte.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
            byte b = byte.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
            byte a = 255; // Default to fully opaque

            if (hex.Length == 8)
            {
                a = byte.Parse(hex.Substring(6, 2), System.Globalization.NumberStyles.HexNumber);
            }

            // Convert the bytes to a Color object
            return new Color32(r, g, b, a);
        }

        var theme = new Theme(
            new Theme.Dialog(
                Color.white, // [DIALOG] Background Color
                Color.black, // [QUESTION] question text color
                Color.black, // [SUBTITLE] subtitle text color
                Color.black, // [CLOSE_MODAL_ICON] Color of the Close button
                "Choose one to continue", // [SINGLE_CHOOSE_SUBTITLE] Choose one subtitle text
                "Choose one or more choices to continue", // [MULTI_CHOOSE_SUBTITLE] Multiple subtitle text
                "Fonts/Roboto-Light SDF", // [FONT_PATH] Font path for TextMeshPro saved on Scripts/PlaytestingGames/InAppSurvey/Resource/Fonts folder
                Theme.Dialog.Position.BOTTOM // or .CENTER
            ),
            new Theme.NextButton(
                HexToColor("#a8dab5"), // [NEXT_BUTTON] button background
                HexToColor("#FFFFFF"), // [NEXT_BUTTON] onClick button background
                HexToColor("#d9dadc"), // [NEXT_BUTTON] disabled button background
                Color.black, // [NEXT_BUTTON] disabled button.text 
                Color.black, // [NEXT_BUTTON] text color
                Color.black // [NEXT_BUTTON] onCLick text color
            ),
            new Theme.Choice(
                HexToColor("#f2f3f3"), // [CHOICE] background
                HexToColor("#c8e4e4"), // [CHOICE] onClick background
                Color.black, // [CHOICE] text color
                Color.black // [CHOICE] onClick text color
            ),
            new Theme.Slider(
                Color.green, // [SLIDER] Fill Color
                HexToColor("#f2f3f3"), // [SLIDER] UnFilled Color
                Color.black, // SLIDER] Handle Background Color
                Color.white // [SLIDER] Handle text Color
            )
        );

        InAppSurvey.Initialize(access, theme, (bool success) => {
            if (success) onSuccess();
        });
    } 

    private void CheckForSurvey()
    {   
        var triggerFields = new List<Trigger> {
            new TriggerField("LEVEL", "900"),
            // new TriggerField("EARNED_COINS", "2400"),
            // new TriggerEvent("NEW_ROUND")
        };

        

        InAppSurvey.CheckForSurvey(triggerFields, inAppSurveyCallbackHandler);
    }

   
}

public class InAppSurveyCallbackHandler : InAppSurvey.Callback
{
    public void OnNotAvailable()
    {
        // do something if needed
        Debug.Log("InAppSurvey.Callback --> OnNotAvailable");
    }

    public void OnReadyToShow()
    {
        // consider to pause the game if needed
        Debug.Log("InAppSurvey.Callback --> OnReadyToShow");
    }

    public void OnDismissed()
    {
        // user dismissed the survey
        Debug.Log("InAppSurvey.Callback --> OnDismissed");
    }

    public void OnCompleted()
    {
        // user completed the survey
        Debug.Log("InAppSurvey.Callback --> OnCompleted");
    }
}