Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

211 rader
7.7 KiB

  1. // Copyright (C) 2015 Google, Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #if UNITY_ANDROID
  15. using UnityEngine;
  16. using System;
  17. using System.Collections.Generic;
  18. using GoogleMobileAds.Api;
  19. using GoogleMobileAds.Api.Mediation;
  20. using GoogleMobileAds.Common;
  21. namespace GoogleMobileAds.Android
  22. {
  23. internal class Utils
  24. {
  25. #region Fully-qualified class names
  26. #region Google Mobile Ads SDK class names
  27. public const string AdListenerClassName = "com.google.android.gms.ads.AdListener";
  28. public const string AdRequestClassName = "com.google.android.gms.ads.AdRequest";
  29. public const string AdRequestBuilderClassName =
  30. "com.google.android.gms.ads.AdRequest$Builder";
  31. public const string AdSizeClassName = "com.google.android.gms.ads.AdSize";
  32. public const string AdMobExtrasClassName =
  33. "com.google.android.gms.ads.mediation.admob.AdMobExtras";
  34. public const string PlayStorePurchaseListenerClassName =
  35. "com.google.android.gms.ads.purchase.PlayStorePurchaseListener";
  36. public const string MobileAdsClassName = "com.google.android.gms.ads.MobileAds";
  37. #endregion
  38. #region Google Mobile Ads Unity Plugin class names
  39. public const string BannerViewClassName = "com.google.unity.ads.Banner";
  40. public const string InterstitialClassName = "com.google.unity.ads.Interstitial";
  41. public const string RewardBasedVideoClassName = "com.google.unity.ads.RewardBasedVideo";
  42. public const string NativeAdLoaderClassName = "com.google.unity.ads.NativeAdLoader";
  43. public const string UnityAdListenerClassName = "com.google.unity.ads.UnityAdListener";
  44. public const string UnityRewardBasedVideoAdListenerClassName =
  45. "com.google.unity.ads.UnityRewardBasedVideoAdListener";
  46. public const string UnityAdLoaderListenerClassName =
  47. "com.google.unity.ads.UnityAdLoaderListener";
  48. public const string PluginUtilsClassName = "com.google.unity.ads.PluginUtils";
  49. #endregion
  50. #region Unity class names
  51. public const string UnityActivityClassName = "com.unity3d.player.UnityPlayer";
  52. #endregion
  53. #region Android SDK class names
  54. public const string BundleClassName = "android.os.Bundle";
  55. public const string DateClassName = "java.util.Date";
  56. #endregion
  57. #endregion
  58. #region JavaObject creators
  59. public static AndroidJavaObject GetAdSizeJavaObject(AdSize adSize)
  60. {
  61. if (adSize.IsSmartBanner)
  62. {
  63. return new AndroidJavaClass(AdSizeClassName)
  64. .GetStatic<AndroidJavaObject>("SMART_BANNER");
  65. }
  66. else
  67. {
  68. return new AndroidJavaObject(AdSizeClassName, adSize.Width, adSize.Height);
  69. }
  70. }
  71. public static AndroidJavaObject GetAdRequestJavaObject(AdRequest request)
  72. {
  73. AndroidJavaObject adRequestBuilder = new AndroidJavaObject(AdRequestBuilderClassName);
  74. foreach (string keyword in request.Keywords)
  75. {
  76. adRequestBuilder.Call<AndroidJavaObject>("addKeyword", keyword);
  77. }
  78. foreach (string deviceId in request.TestDevices)
  79. {
  80. if (deviceId == AdRequest.TestDeviceSimulator)
  81. {
  82. string emulatorDeviceId = new AndroidJavaClass(AdRequestClassName)
  83. .GetStatic<string>("DEVICE_ID_EMULATOR");
  84. adRequestBuilder.Call<AndroidJavaObject>("addTestDevice", emulatorDeviceId);
  85. }
  86. else
  87. {
  88. adRequestBuilder.Call<AndroidJavaObject>("addTestDevice", deviceId);
  89. }
  90. }
  91. if (request.Birthday.HasValue)
  92. {
  93. DateTime birthday = request.Birthday.GetValueOrDefault();
  94. AndroidJavaObject birthdayObject = new AndroidJavaObject(
  95. DateClassName, birthday.Year, birthday.Month, birthday.Day);
  96. adRequestBuilder.Call<AndroidJavaObject>("setBirthday", birthdayObject);
  97. }
  98. if (request.Gender.HasValue)
  99. {
  100. int? genderCode = null;
  101. switch (request.Gender.GetValueOrDefault())
  102. {
  103. case Gender.Unknown:
  104. genderCode = new AndroidJavaClass(AdRequestClassName)
  105. .GetStatic<int>("GENDER_UNKNOWN");
  106. break;
  107. case Gender.Male:
  108. genderCode = new AndroidJavaClass(AdRequestClassName)
  109. .GetStatic<int>("GENDER_MALE");
  110. break;
  111. case Gender.Female:
  112. genderCode = new AndroidJavaClass(AdRequestClassName)
  113. .GetStatic<int>("GENDER_FEMALE");
  114. break;
  115. }
  116. if (genderCode.HasValue)
  117. {
  118. adRequestBuilder.Call<AndroidJavaObject>("setGender", genderCode);
  119. }
  120. }
  121. if (request.TagForChildDirectedTreatment.HasValue)
  122. {
  123. adRequestBuilder.Call<AndroidJavaObject>(
  124. "tagForChildDirectedTreatment",
  125. request.TagForChildDirectedTreatment.GetValueOrDefault());
  126. }
  127. // Denote that the request is coming from this Unity plugin.
  128. adRequestBuilder.Call<AndroidJavaObject>(
  129. "setRequestAgent",
  130. "unity-" + AdRequest.Version);
  131. AndroidJavaObject bundle = new AndroidJavaObject(BundleClassName);
  132. foreach (KeyValuePair<string, string> entry in request.Extras)
  133. {
  134. bundle.Call("putString", entry.Key, entry.Value);
  135. }
  136. bundle.Call("putString", "is_unity", "1");
  137. AndroidJavaObject extras = new AndroidJavaObject(AdMobExtrasClassName, bundle);
  138. adRequestBuilder.Call<AndroidJavaObject>("addNetworkExtras", extras);
  139. foreach (MediationExtras mediationExtra in request.MediationExtras)
  140. {
  141. AndroidJavaObject mediationExtrasBundleBuilder =
  142. new AndroidJavaObject(mediationExtra.AndroidMediationExtraBuilderClassName);
  143. AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap");
  144. foreach (KeyValuePair<string, string> entry in mediationExtra.Extras)
  145. {
  146. map.Call<string>("put", entry.Key, entry.Value);
  147. }
  148. AndroidJavaObject mediationExtras =
  149. mediationExtrasBundleBuilder.Call<AndroidJavaObject>("buildExtras", map);
  150. if (mediationExtras != null)
  151. {
  152. adRequestBuilder.Call<AndroidJavaObject>(
  153. "addNetworkExtrasBundle",
  154. mediationExtrasBundleBuilder.Call<AndroidJavaClass>("getAdapterClass"),
  155. mediationExtras);
  156. }
  157. }
  158. return adRequestBuilder.Call<AndroidJavaObject>("build");
  159. }
  160. #endregion
  161. }
  162. }
  163. #endif