lib_unity_purchase/Samples~/05 LocalReceiptValidation/MissingTangleClassesWarning.cs

79 lines
3.6 KiB
C#
Raw Normal View History

2024-01-29 18:49:33 +08:00
#if UNITY_EDITOR
using System;
using UnityEngine;
using UnityEditor;
namespace Samples.Purchasing.Core.LocalReceiptValidation
{
/// <summary>
/// Shows an editor warning then the AppleTangle or GooglePlayTangle classes are missing.
/// This class is for informational purposes only, see LocalReceiptValidation.cs for the relevant script accomplishing the local receipt validation.
/// </summary>
[InitializeOnLoad]
class MissingTangleClassesWarning
{
const string k_TangleClassesNamespace = "UnityEngine.Purchasing.Security";
const string k_AppleTangleClassName = "AppleTangle";
const string k_AppleStoreKitTestTangleClassName = "AppleStoreKitTestTangle";
const string k_GooglePlayTangleClassName = "GooglePlayTangle";
static readonly string k_AppleTangleClassPath = $"{k_TangleClassesNamespace}.{k_AppleTangleClassName}";
static readonly string k_AppleStoreKitTestTangleClassPath = $"{k_TangleClassesNamespace}.{k_AppleStoreKitTestTangleClassName}";
static readonly string k_GooglePlayTangleClassPath = $"{k_TangleClassesNamespace}.{k_GooglePlayTangleClassName}";
const string k_MissingTangleClassesWarningMsg = "You appear to be missing the GooglePlayTangle and AppleTangle classes. CLICK ME for instructions on how to generate them or see the README for more information.\n" +
"To generate these classes in your project, do the following:\n" +
"\t1. Get your license key from the Google Play Developer Console. (Skip this step if you do not plan on supporting the Google Play Store)\n" +
"\t\ta. Select your app from the list.\n" +
"\t\tb. Go to \"Monetization setup\" under \"Monetize\".\n" +
"\t\tc. Copy the key from the \"Licensing\" section.\n" +
"\t2. Open the obfuscation window from Services > In-App Purchasing > Receipt Validation Obfuscator.\n" +
"\t3. Paste your Google Play key. (Skip this step if you do not plan on supporting the Google Play Store)\n" +
"\t4. Obfuscate the key. (Creates GooglePlayTangle and AppleTangle classes in your project.)\n" +
"\t5. (Optional) To ensure correct revenue data, enter your key in the Analytics dashboard.\n" +
"\n" +
"See README for more information.\n";
static MissingTangleClassesWarning()
{
WarnMissingTangleClasses();
Application.logMessageReceived += OnLogMsgReceived;
}
static void OnLogMsgReceived(string condition, string stacktrace, LogType type)
{
if (LogMsgRelatedToTangleClasses(condition, type))
{
WarnMissingTangleClasses();
}
}
static void WarnMissingTangleClasses()
{
if (!HasTangleClasses())
{
Debug.LogWarning(k_MissingTangleClassesWarningMsg);
}
}
static bool HasTangleClasses()
{
var appleTangle = Type.GetType(k_AppleTangleClassPath);
var appleSKTTangle = Type.GetType(k_AppleStoreKitTestTangleClassPath);
var googlePlayTangle = Type.GetType(k_GooglePlayTangleClassPath);
return appleTangle != null && appleSKTTangle != null && googlePlayTangle != null;
}
static bool LogMsgRelatedToTangleClasses(string condition, LogType type)
{
return type == LogType.Error && (
condition.Contains(k_AppleTangleClassName) ||
condition.Contains(k_AppleStoreKitTestTangleClassName) ||
condition.Contains(k_GooglePlayTangleClassName)
);
}
}
}
#endif