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