ATBannerJSSDK.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. // Import platform-specific modules
  2. import ATAndroidBannerJS from "./Android/ATAndroidBannerJS";
  3. import ATiOSBannerJS from "./iOS/ATiOSBannerJS";
  4. // Define callback keys as constants
  5. const LoadedCallbackKey = "BannerLoaded";
  6. const LoadFailCallbackKey = "BannerLoadFail";
  7. const CloseCallbackKey = "BannerCloseButtonTapped";
  8. const ClickCallbackKey = "BannerClick";
  9. const ShowCallbackKey = "BannerShow";
  10. const RefreshCallbackKey = "BannerRefresh";
  11. const RefreshFailCallbackKey = "BannerRefreshFail";
  12. // Define interfaces for callback methods
  13. interface ATBannerListenerCallbacks {
  14. onBannerAdLoaded?: (placementId: string) => void;
  15. onBannerAdLoadFail?: (placementId: string, errorInfo: string) => void;
  16. onBannerAdShow?: (placementId: string, callbackInfo: any) => void;
  17. onBannerAdClick?: (placementId: string, callbackInfo: any) => void;
  18. onBannerAdAutoRefresh?: (placementId: string, callbackInfo: any) => void;
  19. onBannerAdAutoRefreshFail?: (placementId: string, errorInfo: string) => void;
  20. onBannerAdCloseButtonTapped?: (placementId: string, callbackInfo: any) => void;
  21. }
  22. interface AdSize {
  23. width: number;
  24. height: number;
  25. }
  26. interface AdRect {
  27. x: number;
  28. y: number;
  29. width: number;
  30. height: number;
  31. }
  32. type PlatformBridge = typeof ATAndroidBannerJS | typeof ATiOSBannerJS | null;
  33. // Initialize platform bridge based on the OS
  34. const initPlatformBridge = (): PlatformBridge => {
  35. if (cc.sys.os === cc.sys.OS_IOS) {
  36. return ATiOSBannerJS;
  37. } else if (cc.sys.os === cc.sys.OS_ANDROID) {
  38. return ATAndroidBannerJS;
  39. }
  40. return null;
  41. };
  42. const platformBridge = initPlatformBridge();
  43. // Define the ATBannerSDK
  44. const ATBannerSDK = {
  45. // Constants
  46. kATBannerAdLoadingExtraBannerAdSizeStruct: "banner_ad_size_struct",
  47. kATBannerAdShowingPositionTop: "top",
  48. kATBannerAdShowingPositionBottom: "bottom",
  49. kATBannerAdInlineAdaptiveWidth: "inline_adaptive_width",
  50. kATBannerAdInlineAdaptiveOrientation: "inline_adaptive_orientation",
  51. kATBannerAdInlineAdaptiveOrientationCurrent: 0,
  52. kATBannerAdInlineAdaptiveOrientationPortrait: 1,
  53. kATBannerAdInlineAdaptiveOrientationLandscape: 2,
  54. kATBannerAdAdaptiveWidth: "adaptive_width",
  55. kATBannerAdAdaptiveOrientation: "adaptive_orientation",
  56. kATBannerAdAdaptiveOrientationCurrent: 0,
  57. kATBannerAdAdaptiveOrientationPortrait: 1,
  58. kATBannerAdAdaptiveOrientationLandscape: 2,
  59. // Listener
  60. ATBannerListener: {
  61. developerCallback: null as ATBannerListenerCallbacks | null,
  62. onBannerAdLoaded(placementId: string) {
  63. this.developerCallback?.onBannerAdLoaded?.(placementId);
  64. },
  65. onBannerAdLoadFail(placementId: string, errorInfo: string) {
  66. this.developerCallback?.onBannerAdLoadFail?.(placementId, errorInfo);
  67. },
  68. onBannerAdShow(placementId: string, callbackInfo: any) {
  69. this.developerCallback?.onBannerAdShow?.(placementId, callbackInfo);
  70. },
  71. onBannerAdClick(placementId: string, callbackInfo: any) {
  72. this.developerCallback?.onBannerAdClick?.(placementId, callbackInfo);
  73. },
  74. onBannerAdAutoRefresh(placementId: string, callbackInfo: any) {
  75. this.developerCallback?.onBannerAdAutoRefresh?.(placementId, callbackInfo);
  76. },
  77. onBannerAdAutoRefreshFail(placementId: string, errorInfo: string) {
  78. this.developerCallback?.onBannerAdAutoRefreshFail?.(placementId, errorInfo);
  79. },
  80. onBannerAdCloseButtonTapped(placementId: string, callbackInfo: any) {
  81. this.developerCallback?.onBannerAdCloseButtonTapped?.(placementId, callbackInfo);
  82. }
  83. },
  84. // Methods
  85. loadBanner(placementId: string, settings: Record<string, any> = {}): void {
  86. if (platformBridge) {
  87. // Handle extra banner ad size struct
  88. if (settings.hasOwnProperty(this.kATBannerAdLoadingExtraBannerAdSizeStruct)) {
  89. const loadAdSize: AdSize = settings[this.kATBannerAdLoadingExtraBannerAdSizeStruct];
  90. settings["width"] = loadAdSize.width;
  91. settings["height"] = loadAdSize.height;
  92. }
  93. platformBridge.loadBanner(placementId, JSON.stringify(settings));
  94. } else {
  95. cc.log("You must run on Android or iOS.");
  96. }
  97. },
  98. setAdListener(listener: ATBannerListenerCallbacks): void {
  99. const eventJSON: Record<string, string> = {
  100. [LoadedCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdLoaded",
  101. [LoadFailCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdLoadFail",
  102. [CloseCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdCloseButtonTapped",
  103. [ClickCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdClick",
  104. [ShowCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdShow",
  105. [RefreshCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdAutoRefresh",
  106. [RefreshFailCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdAutoRefreshFail"
  107. };
  108. if (platformBridge) {
  109. platformBridge.setAdListener(JSON.stringify(eventJSON));
  110. } else {
  111. cc.log("You must run on Android or iOS.");
  112. }
  113. this.ATBannerListener.developerCallback = listener;
  114. },
  115. hasAdReady(placementId: string): boolean {
  116. if (platformBridge) {
  117. return platformBridge.hasAdReady(placementId);
  118. } else {
  119. cc.log("You must run on Android or iOS.");
  120. return false;
  121. }
  122. },
  123. checkAdStatus(placementId: string): string {
  124. if (platformBridge) {
  125. return platformBridge.checkAdStatus(placementId);
  126. } else {
  127. cc.log("You must run on Android or iOS.");
  128. return "";
  129. }
  130. },
  131. showAdInPosition(placementId: string, position: string): void {
  132. if (platformBridge) {
  133. platformBridge.showAdInPosition(placementId, position);
  134. } else {
  135. cc.log("You must run on Android or iOS.");
  136. }
  137. },
  138. showAdInPositionAndScenario(placementId: string, position: string, scenario: string): void {
  139. if (platformBridge) {
  140. platformBridge.showAdInPositionAndScenario(placementId, position, scenario);
  141. } else {
  142. cc.log("You must run on Android or iOS.");
  143. }
  144. },
  145. showAdInRectangle(placementId: string, showAdRect: AdRect): void {
  146. if (platformBridge) {
  147. platformBridge.showAdInRectangle(placementId, JSON.stringify(showAdRect));
  148. } else {
  149. cc.log("You must run on Android or iOS.");
  150. }
  151. },
  152. showAdInRectangleAndScenario(placementId: string, showAdRect: AdRect, scenario: string): void {
  153. if (platformBridge) {
  154. platformBridge.showAdInRectangleAndScenario(placementId, JSON.stringify(showAdRect), scenario);
  155. } else {
  156. cc.log("You must run on Android or iOS.");
  157. }
  158. },
  159. removeAd(placementId: string): void {
  160. if (platformBridge) {
  161. platformBridge.removeAd(placementId);
  162. } else {
  163. cc.log("You must run on Android or iOS.");
  164. }
  165. },
  166. reShowAd(placementId: string): void {
  167. if (platformBridge) {
  168. platformBridge.reShowAd(placementId);
  169. } else {
  170. cc.log("You must run on Android or iOS.");
  171. }
  172. },
  173. hideAd(placementId: string): void {
  174. if (platformBridge) {
  175. platformBridge.hideAd(placementId);
  176. } else {
  177. cc.log("You must run on Android or iOS.");
  178. }
  179. },
  180. createLoadAdSize(width: number, height: number): AdSize {
  181. return { width, height };
  182. },
  183. createShowAdRect(x: number, y: number, width: number, height: number): AdRect {
  184. return { x, y, width, height };
  185. }
  186. };
  187. // Export the SDK to the global window object
  188. (window as any).ATBannerJSSDK = ATBannerSDK;
  189. export default ATBannerSDK;