123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using Unity.Services.Core.Editor.OrganizationHandler;
- using UnityEngine;
- using static UnityEditor.Purchasing.UnityPurchasingEditor;
-
- namespace UnityEditor.Purchasing
- {
- /// <summary>
- /// Unity IAP Client-Side Receipt Validation obfuscation window.
- /// </summary>
- /// <remarks>
- /// Collects certificate details for supported stores.
- /// Generates .cs file in Assets/, used by Unity IAP Receipt Validation.
- /// </remarks>
- internal class ObfuscatorWindow : RichEditorWindow
- {
- // Localize me
- private const string kLabelTitle = "Receipt Validation Obfuscator";
-
- private const string kLabelGenerateGoogle = "Obfuscate Google Play License Key";
-
- private const string kLabelGoogleKey = "Google Play Public License Key";
- private const string kPublicKeyPlaceholder = "--Paste Public Key Here--";
-
- private const string kLabelGoogleInstructions =
- "Follow these four steps to set up receipt validation for Google Play.";
-
- private const string kLabelGooglePlayDeveloperConsoleInstructions =
- "1. Get your license key from the Google Play Developer Console:";
-
- private const string kLabelGooglePlayDeveloperConsoleLink = "\tOpen Google Play Developer Console";
- private const string kGooglePlayDevConsoleURL = "https://play.google.com/apps/publish/";
-
- private const string kLabelGooglePlayDeveloperConsoleSteps =
- "\ta. Select your app from the list\n" +
- "\tb. Go to \"Monetization setup\" under \"Monetize\"\n" +
- "\tc. Copy the key from the \"Licensing\" section";
-
- private const string kLabelGooglePasteKeyInstructions = "2. Paste the key here:";
-
- private const string kObfuscateKeyInstructions =
- "3. Obfuscate the key. (Creates Tangle classes in your project.)";
-
- private const string kDashboardInstructions =
- "4. To ensure correct revenue data, enter your key in the Analytics dashboard.";
-
- private const string kLabelDashboardLink = "\tOpen Analytics Dashboard";
-
- private GUIStyle m_ErrorStyle;
- private string m_GoogleError;
- private string m_AppleError;
-
- /// <summary>
- /// The current Google Play Public Key, in string
- /// </summary>
- string m_GooglePlayPublicKey = kPublicKeyPlaceholder;
-
- #if !ENABLE_EDITOR_GAME_SERVICES
- [MenuItem(IapMenuConsts.MenuItemRoot + "/Receipt Validation Obfuscator...", false, 200)]
- static void Init()
- {
- // Get existing open window or if none, make a new one:
- var window = (ObfuscatorWindow)GetWindow(typeof(ObfuscatorWindow));
- window.titleContent.text = kLabelTitle;
- window.minSize = new Vector2(340, 180);
- window.Show();
-
- GenericEditorMenuItemClickEventSenderHelpers.SendIapMenuOpenObfuscatorEvent();
- GameServicesEventSenderHelpers.SendTopMenuReceiptValidationObfuscatorEvent();
- }
- #endif
-
- private ObfuscatorWindow()
- {
- }
-
- void OnGUI()
- {
- if (m_ErrorStyle == null)
- {
- m_ErrorStyle = new GUIStyle();
- m_ErrorStyle.normal.textColor = Color.red;
- }
-
- // Apple error message, if any
- if (!string.IsNullOrEmpty(m_AppleError))
- {
- GUILayout.Label(m_AppleError, m_ErrorStyle);
- }
-
- // Google Play
- GUILayout.Label(kLabelGoogleKey, EditorStyles.boldLabel);
- GUILayout.Label(kLabelGoogleInstructions);
- GUILayout.Space(5);
-
- GUILayout.Label(kLabelGooglePlayDeveloperConsoleInstructions);
- GUILink(kLabelGooglePlayDeveloperConsoleLink, kGooglePlayDevConsoleURL);
-
- GUILayout.Label(kLabelGooglePlayDeveloperConsoleSteps);
- GUILayout.Label(kLabelGooglePasteKeyInstructions);
- m_GooglePlayPublicKey = EditorGUILayout.TextArea(
- m_GooglePlayPublicKey,
- GUILayout.MinHeight(20),
- GUILayout.MaxHeight(50));
-
- GUILayout.Label(kObfuscateKeyInstructions);
- if (!string.IsNullOrEmpty(m_GoogleError))
- {
- GUILayout.Label(m_GoogleError, m_ErrorStyle);
- }
-
- if (GUILayout.Button(kLabelGenerateGoogle))
- {
- ObfuscateSecrets(includeGoogle: true);
- }
-
- GUILayout.Label(kDashboardInstructions);
-
- GUILink(kLabelDashboardLink, GetFormattedDashboardUrl());
- }
-
- static string GetFormattedDashboardUrl()
- {
- return $"https://dashboard.unity3d.com/organizations/{OrganizationProvider.Organization.Key}/projects/{CloudProjectSettings.projectId}/analytics/v2/dashboards/revenue";
- }
-
- void ObfuscateSecrets(bool includeGoogle)
- {
- ObfuscationGenerator.ObfuscateSecrets(includeGoogle: includeGoogle,
- appleError: ref m_AppleError, googleError: ref m_GoogleError,
- googlePlayPublicKey: m_GooglePlayPublicKey);
- }
- }
- }
|