123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- // Import platform-specific modules
- import ATAndroidBannerJS from "./Android/ATAndroidBannerJS";
- import ATiOSBannerJS from "./iOS/ATiOSBannerJS";
- // Define callback keys as constants
- const LoadedCallbackKey = "BannerLoaded";
- const LoadFailCallbackKey = "BannerLoadFail";
- const CloseCallbackKey = "BannerCloseButtonTapped";
- const ClickCallbackKey = "BannerClick";
- const ShowCallbackKey = "BannerShow";
- const RefreshCallbackKey = "BannerRefresh";
- const RefreshFailCallbackKey = "BannerRefreshFail";
- // Define interfaces for callback methods
- interface ATBannerListenerCallbacks {
- onBannerAdLoaded?: (placementId: string) => void;
- onBannerAdLoadFail?: (placementId: string, errorInfo: string) => void;
- onBannerAdShow?: (placementId: string, callbackInfo: any) => void;
- onBannerAdClick?: (placementId: string, callbackInfo: any) => void;
- onBannerAdAutoRefresh?: (placementId: string, callbackInfo: any) => void;
- onBannerAdAutoRefreshFail?: (placementId: string, errorInfo: string) => void;
- onBannerAdCloseButtonTapped?: (placementId: string, callbackInfo: any) => void;
- }
- interface AdSize {
- width: number;
- height: number;
- }
- interface AdRect {
- x: number;
- y: number;
- width: number;
- height: number;
- }
- type PlatformBridge = typeof ATAndroidBannerJS | typeof ATiOSBannerJS | null;
- // Initialize platform bridge based on the OS
- const initPlatformBridge = (): PlatformBridge => {
- if (cc.sys.os === cc.sys.OS_IOS) {
- return ATiOSBannerJS;
- } else if (cc.sys.os === cc.sys.OS_ANDROID) {
- return ATAndroidBannerJS;
- }
- return null;
- };
- const platformBridge = initPlatformBridge();
- // Define the ATBannerSDK
- const ATBannerSDK = {
- // Constants
- kATBannerAdLoadingExtraBannerAdSizeStruct: "banner_ad_size_struct",
- kATBannerAdShowingPositionTop: "top",
- kATBannerAdShowingPositionBottom: "bottom",
- kATBannerAdInlineAdaptiveWidth: "inline_adaptive_width",
- kATBannerAdInlineAdaptiveOrientation: "inline_adaptive_orientation",
- kATBannerAdInlineAdaptiveOrientationCurrent: 0,
- kATBannerAdInlineAdaptiveOrientationPortrait: 1,
- kATBannerAdInlineAdaptiveOrientationLandscape: 2,
- kATBannerAdAdaptiveWidth: "adaptive_width",
- kATBannerAdAdaptiveOrientation: "adaptive_orientation",
- kATBannerAdAdaptiveOrientationCurrent: 0,
- kATBannerAdAdaptiveOrientationPortrait: 1,
- kATBannerAdAdaptiveOrientationLandscape: 2,
- // Listener
- ATBannerListener: {
- developerCallback: null as ATBannerListenerCallbacks | null,
- onBannerAdLoaded(placementId: string) {
- this.developerCallback?.onBannerAdLoaded?.(placementId);
- },
- onBannerAdLoadFail(placementId: string, errorInfo: string) {
- this.developerCallback?.onBannerAdLoadFail?.(placementId, errorInfo);
- },
- onBannerAdShow(placementId: string, callbackInfo: any) {
- this.developerCallback?.onBannerAdShow?.(placementId, callbackInfo);
- },
- onBannerAdClick(placementId: string, callbackInfo: any) {
- this.developerCallback?.onBannerAdClick?.(placementId, callbackInfo);
- },
- onBannerAdAutoRefresh(placementId: string, callbackInfo: any) {
- this.developerCallback?.onBannerAdAutoRefresh?.(placementId, callbackInfo);
- },
- onBannerAdAutoRefreshFail(placementId: string, errorInfo: string) {
- this.developerCallback?.onBannerAdAutoRefreshFail?.(placementId, errorInfo);
- },
- onBannerAdCloseButtonTapped(placementId: string, callbackInfo: any) {
- this.developerCallback?.onBannerAdCloseButtonTapped?.(placementId, callbackInfo);
- }
- },
- // Methods
- loadBanner(placementId: string, settings: Record<string, any> = {}): void {
- if (platformBridge) {
- // Handle extra banner ad size struct
- if (settings.hasOwnProperty(this.kATBannerAdLoadingExtraBannerAdSizeStruct)) {
- const loadAdSize: AdSize = settings[this.kATBannerAdLoadingExtraBannerAdSizeStruct];
- settings["width"] = loadAdSize.width;
- settings["height"] = loadAdSize.height;
- }
- platformBridge.loadBanner(placementId, JSON.stringify(settings));
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- setAdListener(listener: ATBannerListenerCallbacks): void {
- const eventJSON: Record<string, string> = {
- [LoadedCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdLoaded",
- [LoadFailCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdLoadFail",
- [CloseCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdCloseButtonTapped",
- [ClickCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdClick",
- [ShowCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdShow",
- [RefreshCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdAutoRefresh",
- [RefreshFailCallbackKey]: "ATBannerJSSDK.ATBannerListener.onBannerAdAutoRefreshFail"
- };
- if (platformBridge) {
- platformBridge.setAdListener(JSON.stringify(eventJSON));
- } else {
- cc.log("You must run on Android or iOS.");
- }
- this.ATBannerListener.developerCallback = listener;
- },
- hasAdReady(placementId: string): boolean {
- if (platformBridge) {
- return platformBridge.hasAdReady(placementId);
- } else {
- cc.log("You must run on Android or iOS.");
- return false;
- }
- },
- checkAdStatus(placementId: string): string {
- if (platformBridge) {
- return platformBridge.checkAdStatus(placementId);
- } else {
- cc.log("You must run on Android or iOS.");
- return "";
- }
- },
- showAdInPosition(placementId: string, position: string): void {
- if (platformBridge) {
- platformBridge.showAdInPosition(placementId, position);
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- showAdInPositionAndScenario(placementId: string, position: string, scenario: string): void {
- if (platformBridge) {
- platformBridge.showAdInPositionAndScenario(placementId, position, scenario);
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- showAdInRectangle(placementId: string, showAdRect: AdRect): void {
- if (platformBridge) {
- platformBridge.showAdInRectangle(placementId, JSON.stringify(showAdRect));
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- showAdInRectangleAndScenario(placementId: string, showAdRect: AdRect, scenario: string): void {
- if (platformBridge) {
- platformBridge.showAdInRectangleAndScenario(placementId, JSON.stringify(showAdRect), scenario);
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- removeAd(placementId: string): void {
- if (platformBridge) {
- platformBridge.removeAd(placementId);
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- reShowAd(placementId: string): void {
- if (platformBridge) {
- platformBridge.reShowAd(placementId);
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- hideAd(placementId: string): void {
- if (platformBridge) {
- platformBridge.hideAd(placementId);
- } else {
- cc.log("You must run on Android or iOS.");
- }
- },
- createLoadAdSize(width: number, height: number): AdSize {
- return { width, height };
- },
- createShowAdRect(x: number, y: number, width: number, height: number): AdRect {
- return { x, y, width, height };
- }
- };
- // Export the SDK to the global window object
- (window as any).ATBannerJSSDK = ATBannerSDK;
- export default ATBannerSDK;
|