Nessuna descrizione
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MissingTangleClassesWarning.cs 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #if UNITY_EDITOR
  2. using System;
  3. using UnityEngine;
  4. using UnityEditor;
  5. namespace Samples.Purchasing.Core.LocalReceiptValidation
  6. {
  7. /// <summary>
  8. /// Shows an editor warning then the AppleTangle or GooglePlayTangle classes are missing.
  9. /// This class is for informational purposes only, see LocalReceiptValidation.cs for the relevant script accomplishing the local receipt validation.
  10. /// </summary>
  11. [InitializeOnLoad]
  12. class MissingTangleClassesWarning
  13. {
  14. const string k_TangleClassesNamespace = "UnityEngine.Purchasing.Security";
  15. const string k_AppleTangleClassName = "AppleTangle";
  16. const string k_AppleStoreKitTestTangleClassName = "AppleStoreKitTestTangle";
  17. const string k_GooglePlayTangleClassName = "GooglePlayTangle";
  18. static readonly string k_AppleTangleClassPath = $"{k_TangleClassesNamespace}.{k_AppleTangleClassName}";
  19. static readonly string k_AppleStoreKitTestTangleClassPath = $"{k_TangleClassesNamespace}.{k_AppleStoreKitTestTangleClassName}";
  20. static readonly string k_GooglePlayTangleClassPath = $"{k_TangleClassesNamespace}.{k_GooglePlayTangleClassName}";
  21. 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" +
  22. "To generate these classes in your project, do the following:\n" +
  23. "\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" +
  24. "\t\ta. Select your app from the list.\n" +
  25. "\t\tb. Go to \"Monetization setup\" under \"Monetize\".\n" +
  26. "\t\tc. Copy the key from the \"Licensing\" section.\n" +
  27. "\t2. Open the obfuscation window from Services > In-App Purchasing > Receipt Validation Obfuscator.\n" +
  28. "\t3. Paste your Google Play key. (Skip this step if you do not plan on supporting the Google Play Store)\n" +
  29. "\t4. Obfuscate the key. (Creates GooglePlayTangle and AppleTangle classes in your project.)\n" +
  30. "\t5. (Optional) To ensure correct revenue data, enter your key in the Analytics dashboard.\n" +
  31. "\n" +
  32. "See README for more information.\n";
  33. static MissingTangleClassesWarning()
  34. {
  35. WarnMissingTangleClasses();
  36. Application.logMessageReceived += OnLogMsgReceived;
  37. }
  38. static void OnLogMsgReceived(string condition, string stacktrace, LogType type)
  39. {
  40. if (LogMsgRelatedToTangleClasses(condition, type))
  41. {
  42. WarnMissingTangleClasses();
  43. }
  44. }
  45. static void WarnMissingTangleClasses()
  46. {
  47. if (!HasTangleClasses())
  48. {
  49. Debug.LogWarning(k_MissingTangleClassesWarningMsg);
  50. }
  51. }
  52. static bool HasTangleClasses()
  53. {
  54. var appleTangle = Type.GetType(k_AppleTangleClassPath);
  55. var appleSKTTangle = Type.GetType(k_AppleStoreKitTestTangleClassPath);
  56. var googlePlayTangle = Type.GetType(k_GooglePlayTangleClassPath);
  57. return appleTangle != null && appleSKTTangle != null && googlePlayTangle != null;
  58. }
  59. static bool LogMsgRelatedToTangleClasses(string condition, LogType type)
  60. {
  61. return type == LogType.Error && (
  62. condition.Contains(k_AppleTangleClassName) ||
  63. condition.Contains(k_AppleStoreKitTestTangleClassName) ||
  64. condition.Contains(k_GooglePlayTangleClassName)
  65. );
  66. }
  67. }
  68. }
  69. #endif