AndroidNativePromoAdapter.cs 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #if UNITY_ANDROID
  2. using System;
  3. using System.Collections.Generic;
  4. namespace UnityEngine.Monetization
  5. {
  6. public class AndroidNativePromoAdapter : INativePromoAdapter
  7. {
  8. public PromoMetadata metadata { get; }
  9. private AndroidJavaObject nativeAdapter;
  10. public AndroidNativePromoAdapter(PromoAdPlacementContent placementContent)
  11. {
  12. var operations = placementContent.placementContentOperations as AndroidPromoAdOperations;
  13. if (operations != null)
  14. {
  15. this.nativeAdapter = operations.nativeAdapter;
  16. }
  17. this.metadata = placementContent.metadata;
  18. }
  19. public void OnShown()
  20. {
  21. OnShown(PromoShowType.Full);
  22. }
  23. public void OnShown(PromoShowType type)
  24. {
  25. AndroidJavaObject nativeShowType = createNativeShowType(type);
  26. nativeAdapter.Call("onShown", nativeShowType);
  27. }
  28. public void OnClosed()
  29. {
  30. nativeAdapter.Call("onClosed");
  31. }
  32. public void OnClicked()
  33. {
  34. nativeAdapter.Call("onClicked");
  35. }
  36. internal static AndroidJavaObject getJavaTransactionDetails(TransactionDetails details)
  37. {
  38. AndroidJavaObject builder = new AndroidJavaClass("com.unity3d.services.purchasing.core.TransactionDetails").CallStatic<AndroidJavaObject>("newBuilder");
  39. builder.Call<AndroidJavaObject>("withProductId", details.productId);
  40. builder.Call<AndroidJavaObject>("withTransactionId", details.transactionId);
  41. builder.Call<AndroidJavaObject>("withPrice", (double)details.price);
  42. builder.Call<AndroidJavaObject>("withReceipt", details.receipt);
  43. builder.Call<AndroidJavaObject>("withCurrency", details.currency);
  44. if (details.extras != null)
  45. {
  46. foreach (KeyValuePair<string, object> entry in details.extras)
  47. {
  48. builder.Call<AndroidJavaObject>("putExtra", entry.Key, entry.Value);
  49. }
  50. }
  51. return builder.Call<AndroidJavaObject>("build");
  52. }
  53. internal static AndroidJavaObject getJavaTransactionErrorDetails(TransactionErrorDetails details)
  54. {
  55. var transactionErrorIndex = (int)details.transactionError;
  56. var transactionErrorClass = new AndroidJavaClass("com.unity3d.services.purchasing.core.TransactionError");
  57. var transactionErrorValues = transactionErrorClass.CallStatic<AndroidJavaObject>("values");
  58. var transactionError = new AndroidJavaClass("java.lang.reflect.Array").CallStatic<AndroidJavaObject>("get", transactionErrorValues, transactionErrorIndex);
  59. var storeIndex = (int)details.store;
  60. var storeClass = new AndroidJavaClass("com.unity3d.services.purchasing.core.Store");
  61. var storeValues = storeClass.CallStatic<AndroidJavaObject>("values");
  62. var store = new AndroidJavaClass("java.lang.reflect.Array").CallStatic<AndroidJavaObject>("get", storeValues, storeIndex);
  63. var builder = new AndroidJavaClass("com.unity3d.services.purchasing.core.TransactionErrorDetails").CallStatic<AndroidJavaObject>("newBuilder");
  64. builder.Call<AndroidJavaObject>("withTransactionError", transactionError);
  65. builder.Call<AndroidJavaObject>("withExceptionMessage", details.exceptionMessage);
  66. builder.Call<AndroidJavaObject>("withStore", store);
  67. builder.Call<AndroidJavaObject>("withStoreSpecificErrorCode", details.storeSpecificErrorCode);
  68. if (details.extras != null)
  69. {
  70. foreach (KeyValuePair<string, object> entry in details.extras)
  71. {
  72. builder.Call<AndroidJavaObject>("putExtra", entry.Key, entry.Value);
  73. }
  74. }
  75. return builder.Call<AndroidJavaObject>("build");
  76. }
  77. private AndroidJavaObject createNativeShowType(PromoShowType type)
  78. {
  79. var index = (int)type;
  80. var enumClass = new AndroidJavaClass("com.unity3d.services.monetization.placementcontent.purchasing.NativePromoShowType");
  81. var values = enumClass.CallStatic<AndroidJavaObject>("values");
  82. return new AndroidJavaClass("java.lang.reflect.Array").CallStatic<AndroidJavaObject>("get", values, index);
  83. }
  84. }
  85. }
  86. #endif