VSAttribution.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System;
  2. using UnityEngine.Analytics;
  3. #if UNITY_6000_0_OR_NEWER
  4. namespace UnityEditor.VSAttribution.HotReload
  5. {
  6. internal static class VSAttribution
  7. {
  8. const int k_VersionId = 4;
  9. const int k_MaxEventsPerHour = 10;
  10. const int k_MaxNumberOfElements = 1000;
  11. const string k_VendorKey = "unity.vsp-attribution";
  12. const string k_EventName = "vspAttribution";
  13. [Serializable]
  14. private class VSAttributionData : IAnalytic.IData {
  15. public string actionName;
  16. public string partnerName;
  17. public string customerUid;
  18. public string extra;
  19. }
  20. [AnalyticInfo(k_EventName, k_VendorKey, k_VersionId, k_MaxEventsPerHour, k_MaxNumberOfElements)]
  21. class VSAttributionAnalytics : IAnalytic {
  22. private VSAttributionData m_Data;
  23. private VSAttributionAnalytics(
  24. string actionName,
  25. string partnerName,
  26. string customerUid,
  27. string extra
  28. ) {
  29. this.m_Data = new VSAttributionData {
  30. actionName = actionName,
  31. partnerName = partnerName,
  32. customerUid = customerUid,
  33. extra = extra
  34. };
  35. }
  36. public bool TryGatherData(out IAnalytic.IData data, out Exception error) {
  37. data = this.m_Data;
  38. error = null;
  39. return this.m_Data != null;
  40. }
  41. public static AnalyticsResult SendEvent(
  42. string actionName,
  43. string partnerName,
  44. string customerUid,
  45. string extra
  46. ) {
  47. return EditorAnalytics.SendAnalytic(new VSAttributionAnalytics(actionName,
  48. partnerName,
  49. customerUid,
  50. extra
  51. ));
  52. }
  53. }
  54. /// <summary>
  55. /// Registers and attempts to send a Verified Solutions Attribution event.
  56. /// </summary>
  57. /// <param name="actionName">Name of the action, identifying a place this event was called from.</param>
  58. /// <param name="partnerName">Identifiable Verified Solutions Partner's name.</param>
  59. /// <param name="customerUid">Unique identifier of the customer using Partner's Verified Solution.</param>
  60. public static AnalyticsResult SendAttributionEvent(string actionName, string partnerName, string customerUid)
  61. {
  62. try
  63. {
  64. return VSAttributionAnalytics.SendEvent(actionName, partnerName, customerUid, "{}");
  65. }
  66. catch
  67. {
  68. // Fail silently
  69. return AnalyticsResult.AnalyticsDisabled;
  70. }
  71. }
  72. }
  73. }
  74. #else
  75. namespace UnityEditor.VSAttribution.HotReload
  76. {
  77. internal static class VSAttribution
  78. {
  79. const int k_VersionId = 4;
  80. const int k_MaxEventsPerHour = 10;
  81. const int k_MaxNumberOfElements = 1000;
  82. const string k_VendorKey = "unity.vsp-attribution";
  83. const string k_EventName = "vspAttribution";
  84. static bool RegisterEvent()
  85. {
  86. AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour,
  87. k_MaxNumberOfElements, k_VendorKey, k_VersionId);
  88. var isResultOk = result == AnalyticsResult.Ok;
  89. return isResultOk;
  90. }
  91. [Serializable]
  92. struct VSAttributionData
  93. {
  94. public string actionName;
  95. public string partnerName;
  96. public string customerUid;
  97. public string extra;
  98. }
  99. /// <summary>
  100. /// Registers and attempts to send a Verified Solutions Attribution event.
  101. /// </summary>
  102. /// <param name="actionName">Name of the action, identifying a place this event was called from.</param>
  103. /// <param name="partnerName">Identifiable Verified Solutions Partner's name.</param>
  104. /// <param name="customerUid">Unique identifier of the customer using Partner's Verified Solution.</param>
  105. public static AnalyticsResult SendAttributionEvent(string actionName, string partnerName, string customerUid)
  106. {
  107. try
  108. {
  109. // Are Editor Analytics enabled ? (Preferences)
  110. if (!EditorAnalytics.enabled)
  111. return AnalyticsResult.AnalyticsDisabled;
  112. if (!RegisterEvent())
  113. return AnalyticsResult.InvalidData;
  114. // Create an expected data object
  115. var eventData = new VSAttributionData
  116. {
  117. actionName = actionName,
  118. partnerName = partnerName,
  119. customerUid = customerUid,
  120. extra = "{}"
  121. };
  122. return EditorAnalytics.SendEventWithLimit(k_EventName, eventData, k_VersionId);
  123. }
  124. catch
  125. {
  126. // Fail silently
  127. return AnalyticsResult.AnalyticsDisabled;
  128. }
  129. }
  130. }
  131. }
  132. #endif