AnalyticsAdapter.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System.Collections.Generic;
  2. using Unity.Services.Analytics;
  3. namespace UnityEngine.Purchasing
  4. {
  5. class AnalyticsAdapter : IAnalyticsAdapter
  6. {
  7. IAnalyticsService m_Analytics;
  8. public AnalyticsAdapter(IAnalyticsService analytics)
  9. {
  10. m_Analytics = analytics;
  11. }
  12. public void SendTransactionEvent(Product product)
  13. {
  14. var unifiedReceipt = JsonUtility.FromJson<UnifiedReceipt>(product.receipt);
  15. var analyticsReceipt = unifiedReceipt.ToReceiptAndSignature();
  16. var txParams = BuildTransactionParameters(product, unifiedReceipt, analyticsReceipt);
  17. m_Analytics.Transaction(txParams);
  18. }
  19. TransactionParameters BuildTransactionParameters(Product product,
  20. UnifiedReceipt unifiedReceipt, AnalyticsTransactionReceipt analyticsReceipt)
  21. {
  22. return new TransactionParameters
  23. {
  24. ProductID = product.definition.storeSpecificId,
  25. TransactionName = product.metadata.localizedTitle,
  26. TransactionID = unifiedReceipt.TransactionID,
  27. TransactionType = TransactionType.PURCHASE,
  28. TransactionReceipt = analyticsReceipt.transactionReceipt,
  29. TransactionReceiptSignature = analyticsReceipt.transactionReceiptSignature,
  30. TransactionServer = analyticsReceipt.transactionServer,
  31. ProductsReceived = GenerateItemReceivedForPurchase(product),
  32. ProductsSpent = GenerateRealCurrencySpentOnPurchase(product)
  33. };
  34. }
  35. public void SendTransactionFailedEvent(Product product, PurchaseFailureReason reason)
  36. {
  37. var transactionFailedParameters = BuildTransactionFailedParameters(product, reason);
  38. m_Analytics.TransactionFailed(transactionFailedParameters);
  39. }
  40. TransactionFailedParameters BuildTransactionFailedParameters(Product product,
  41. PurchaseFailureReason reason)
  42. {
  43. return new TransactionFailedParameters
  44. {
  45. ProductID = product.definition.storeSpecificId,
  46. TransactionName = product.metadata.localizedTitle,
  47. TransactionType = TransactionType.PURCHASE,
  48. ProductsReceived = GenerateItemReceivedForPurchase(product),
  49. ProductsSpent = GenerateRealCurrencySpentOnPurchase(product),
  50. FailureReason = reason.ToString()
  51. };
  52. }
  53. Unity.Services.Analytics.Product GenerateItemReceivedForPurchase(Product product)
  54. {
  55. return new Unity.Services.Analytics.Product
  56. {
  57. Items = new List<Item>
  58. {
  59. new Item
  60. {
  61. ItemName = product.definition.id,
  62. ItemType = product.definition.type.ToString(),
  63. ItemAmount = 1
  64. }
  65. }
  66. };
  67. }
  68. Unity.Services.Analytics.Product GenerateRealCurrencySpentOnPurchase(Product product)
  69. {
  70. return new Unity.Services.Analytics.Product
  71. {
  72. RealCurrency = new RealCurrency
  73. {
  74. RealCurrencyType = product.metadata.isoCurrencyCode,
  75. RealCurrencyAmount = ExtractRealCurrencyAmount(product)
  76. }
  77. };
  78. }
  79. long ExtractRealCurrencyAmount(Product product)
  80. {
  81. return m_Analytics.ConvertCurrencyToMinorUnits(product.metadata.isoCurrencyCode,
  82. (double)product.metadata.localizedPrice);
  83. }
  84. }
  85. }