説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

AndroidBanner.cs 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #if UNITY_ANDROID
  2. using System;
  3. namespace UnityEngine.Advertisements.Platform.Android
  4. {
  5. internal class AndroidBanner : AndroidJavaProxy, INativeBanner
  6. {
  7. private IBanner m_Banner;
  8. private AndroidJavaClass m_BannersClass;
  9. private AndroidJavaObject m_CurrentActivity;
  10. private BannerBundle m_BannerBundle;
  11. private BannerLoadOptions m_BannerLoadOptions;
  12. private BannerOptions m_BannerShowOptions;
  13. public bool IsLoaded => m_BannerBundle != null;
  14. private bool m_ListenerIsSet;
  15. public AndroidBanner() : base("com.unity3d.services.banners.IUnityBannerListener") {}
  16. public void SetupBanner(IBanner banner)
  17. {
  18. m_Banner = banner;
  19. m_BannersClass = new AndroidJavaClass("com.unity3d.services.banners.UnityBanners");
  20. m_CurrentActivity = AndroidPlatform.GetCurrentAndroidActivity();
  21. m_BannerBundle = null;
  22. }
  23. public void Load(string placementId, BannerLoadOptions loadOptions)
  24. {
  25. if (!m_ListenerIsSet) {
  26. m_ListenerIsSet = true;
  27. m_BannersClass.CallStatic("setBannerListener", this);
  28. }
  29. m_BannerLoadOptions = loadOptions;
  30. if (m_BannerBundle != null && m_BannerBundle.bannerPlacementId.Equals(placementId))
  31. {
  32. m_Banner.UnityLifecycleManager.Post(() =>
  33. {
  34. loadOptions?.loadCallback();
  35. });
  36. }
  37. else
  38. {
  39. if (m_BannerBundle != null)
  40. {
  41. Hide(true);
  42. m_BannerBundle = null;
  43. }
  44. if (placementId != null)
  45. {
  46. m_BannersClass.CallStatic("loadBanner", m_CurrentActivity, placementId);
  47. }
  48. else
  49. {
  50. m_BannersClass.CallStatic("loadBanner", m_CurrentActivity);
  51. }
  52. }
  53. }
  54. public void Show(string placementId, BannerOptions showOptions)
  55. {
  56. m_BannerShowOptions = showOptions;
  57. if (m_BannerBundle != null && (string.IsNullOrEmpty(placementId) || m_BannerBundle.bannerPlacementId.Equals(placementId)))
  58. {
  59. m_CurrentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
  60. {
  61. var parent = m_BannerBundle.bannerView.Call<AndroidJavaObject>("getParent");
  62. if (parent == null)
  63. {
  64. var layoutParams = m_BannerBundle.bannerView.Call<AndroidJavaObject>("getLayoutParams");
  65. m_CurrentActivity.Call("addContentView", m_BannerBundle.bannerView, layoutParams);
  66. }
  67. }));
  68. m_Banner.UnityLifecycleManager.Post(() =>
  69. {
  70. showOptions?.showCallback();
  71. });
  72. }
  73. else
  74. {
  75. if (m_BannerBundle != null)
  76. {
  77. Hide(true);
  78. m_BannerBundle = null;
  79. }
  80. m_Banner.ShowAfterLoad = true;
  81. Load(placementId, null);
  82. }
  83. }
  84. public void Hide(bool destroy = false)
  85. {
  86. if (m_BannerBundle != null)
  87. {
  88. if (destroy)
  89. {
  90. m_BannerBundle = null;
  91. m_BannersClass.CallStatic("destroy");
  92. }
  93. else
  94. {
  95. m_CurrentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => {
  96. var parent = m_BannerBundle.bannerView.Call<AndroidJavaObject>("getParent");
  97. parent?.Call("removeView", m_BannerBundle.bannerView);
  98. }));
  99. if (m_BannerShowOptions?.hideCallback != null)
  100. {
  101. m_Banner.UnityLifecycleManager.Post(() =>
  102. {
  103. m_BannerShowOptions?.hideCallback();
  104. });
  105. }
  106. }
  107. }
  108. }
  109. public void SetPosition(BannerPosition position)
  110. {
  111. var index = (int)position;
  112. var enumClass = new AndroidJavaClass("com.unity3d.services.banners.view.BannerPosition");
  113. var values = enumClass.CallStatic<AndroidJavaObject>("values");
  114. var bannerPosition = new AndroidJavaClass("java.lang.reflect.Array").CallStatic<AndroidJavaObject>("get", values, index);
  115. m_BannersClass.CallStatic("setBannerPosition", bannerPosition);
  116. }
  117. private void onUnityBannerShow(string placementId)
  118. {
  119. }
  120. private void onUnityBannerHide(string placementId)
  121. {
  122. }
  123. private void onUnityBannerLoaded(String placementId, AndroidJavaObject view)
  124. {
  125. m_BannerBundle = new BannerBundle(placementId, view);
  126. view.Call("setBackgroundColor", UnityEngine.Advertisements.Utilities.Color.Transparent);
  127. if (m_Banner.ShowAfterLoad)
  128. {
  129. m_Banner.ShowAfterLoad = false;
  130. var layoutParams = view.Call<AndroidJavaObject>("getLayoutParams");
  131. m_CurrentActivity.Call("addContentView", view, layoutParams);
  132. m_Banner.UnityLifecycleManager.Post(() =>
  133. {
  134. m_BannerShowOptions?.showCallback();
  135. });
  136. }
  137. m_Banner.UnityLifecycleManager.Post(() =>
  138. {
  139. m_BannerLoadOptions?.loadCallback();
  140. });
  141. }
  142. private void onUnityBannerUnloaded(string placementId)
  143. {
  144. }
  145. private void onUnityBannerClick(string placementId)
  146. {
  147. m_Banner.UnityLifecycleManager.Post(() =>
  148. {
  149. m_BannerShowOptions?.clickCallback();
  150. });
  151. }
  152. private void onUnityBannerError(string message)
  153. {
  154. m_Banner.UnityLifecycleManager.Post(() =>
  155. {
  156. m_BannerLoadOptions?.errorCallback(message);
  157. });
  158. }
  159. }
  160. }
  161. #endif