Newer
Older
CGTrack / Assets / Oculus / Platform / Samples / EntitlementCheck / EntitlementCheck.cs
using System;
using UnityEngine;
using Oculus.Platform;
using Oculus.Platform.Models;

namespace Oculus.Platform.Samples.EntitlementCheck
{
  public class EntitlementCheck : MonoBehaviour
  {
    // Implements a default behavior for entitlement check failures by simply exiting the app.
    // Set to false if the app wants to provide custom logic to handle entitlement check failures.
    // For example, the app can instead display a modal dialog to the user and exit gracefully.
    public bool exitAppOnFailure = true;

    // The app can optionally subscribe to these events to do custom entitlement check logic.
    public static event Action UserFailedEntitlementCheck;
    public static event Action UserPassedEntitlementCheck;

    void Start()
    {
      try
      {
        // Init the Oculust Platform SDK and send an entitlement check request.
        if (!Oculus.Platform.Core.IsInitialized())
        {
          Oculus.Platform.Core.Initialize();
        }

        Entitlements.IsUserEntitledToApplication().OnComplete(EntitlementCheckCallback);
      }
      catch
      {
        // Treat any potential initialization exceptions as an entitlement check failure.
        HandleEntitlementCheckResult(false);
      }
    }

    // Called when the Oculus Platform completes the async entitlement check request and a result is available.
    void EntitlementCheckCallback(Message msg)
    {
      // If the user passed the entitlement check, msg.IsError will be false.
      // If the user failed the entitlement check, msg.IsError will be true.
      HandleEntitlementCheckResult(msg.IsError == false);
    }

    void HandleEntitlementCheckResult(bool result)
    {
      if (result) // User passed entitlement check
      {
        Debug.Log("Oculus user entitlement check successful.");

        try
        {
          // Raise the user passed entitlement check event if the app subscribed a handler to it.
          if (UserPassedEntitlementCheck != null)
          {
            UserPassedEntitlementCheck();
          }
        }
        catch
        {
          // Suppressing any exceptions to avoid potential exceptions in the app-provided event handler.
          Debug.LogError("Suppressed exception in app-provided UserPassedEntitlementCheck() event handler.");
        }
      }
      else // User failed entitlement check
      {
        try
        {
          // Raise the user failed entitlement check event if the app subscribed a handler to it.
          if (UserFailedEntitlementCheck != null)
          {
            UserFailedEntitlementCheck();
          }
        }
        catch
        {
          // Suppressing any exceptions to avoid potential exceptions in the app-provided event handler.
          // Ensures the default entitlement check behavior will still execute, if enabled.
          Debug.LogError("Suppressed exception in app-provided UserFailedEntitlementCheck() event handler.");
        }

        if (exitAppOnFailure)
        {
          // Implements a default behavior for an entitlement check failure -- log the failure and exit the app.
          Debug.LogError("Oculus user entitlement check failed. Exiting now.");
#if UNITY_EDITOR
          UnityEditor.EditorApplication.isPlaying = false;
#else
          UnityEngine.Application.Quit();
#endif
        }
        else
        {
          Debug.LogError("Oculus user entitlement check failed.");
        }
      }
    }
  }
}