FusionAds-iOS/FusionAds/Classes/fusion/max/GuruMaxBannerAd.swift

174 lines
5.9 KiB
Swift

// GuruMaxBannerAd.swift
// Implementation for MAX banner ads
// Corresponds to GuruMaxBannerAd.kt in Android implementation
import Foundation
import UIKit
import AppLovinSDK
class GuruMaxBannerView : GuruBannerView {
func view() -> UIView {
return bannerAdView
}
func setPlacementName(placement: String) {
bannerAdView.placement = placement
}
func onShow() {
bannerAdView.isHidden = false
bannerAdView.startAutoRefresh()
}
func onHide() {
bannerAdView.setExtraParameterForKey("allow_pause_auto_refresh_immediately", value: "true")
bannerAdView.isHidden = true
bannerAdView.stopAutoRefresh()
}
public var bannerAdView: MAAdView
public init(_ banner: MAAdView) {
self.bannerAdView = banner
}
}
public class GuruMaxBannerAd: GuruBannerAd, MAAdViewAdDelegate, MAAdRevenueDelegate {
private let viewController: UIViewController
private let adConfig: AdConfig
private var bannerAd: MAAdView? { return bannerAdCoordinator?.bannerAd.bannerAdView}
private var bannerAdCoordinator: GuruBannerCoordinator<GuruMaxBannerView>?
private var contentView: UIView?
private var currentUid2Token: String = ""
private var contentId: Int {
return self.adConfig.engineId
}
public init(viewController: UIViewController, adConfig: AdConfig) {
self.viewController = viewController
self.adConfig = adConfig
super.init(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: AdPlatform.max)
}
override public func load() -> Bool {
logInfo("request load")
let bannerAd = MAAdView(adUnitIdentifier: adConfig.adUnitId, adFormat: MAAdFormat.banner)
bannerAd.delegate = self
bannerAd.revenueDelegate = self
bannerAd.setExtraParameterForKey("allow_pause_auto_refresh_immediately", value: "true")
if let uid2Token = AdsHelper.getUid2Token() {
bannerAd.setExtraParameterForKey("uid2_token", value: uid2Token)
currentUid2Token = uid2Token
}
bannerAd.stopAutoRefresh()
if let amazonSlotId = adConfig.adAmazonSlotId, !amazonSlotId.isEmpty {
// In a real implementation, you would load Amazon ads here
logDebug("Would load Amazon banner ad with slot ID: \(amazonSlotId)")
// Simulate direct load for now
bannerAd.loadAd()
} else {
bannerAd.loadAd()
}
self.bannerAdCoordinator = GuruBannerCoordinator(viewController: viewController, bannerAd: GuruMaxBannerView(bannerAd), contentId: contentId)
return true
}
public override func show(_ request: BannerShowRequest? = nil) -> Bool {
logInfo("request show")
let result = self.bannerAdCoordinator?.show(request)
// Update UID2 token if needed
if let uid2Token = AdsHelper.getUid2Token(), !uid2Token.isEmpty, uid2Token != currentUid2Token {
bannerAd?.setExtraParameterForKey("uid2_token", value: uid2Token)
currentUid2Token = uid2Token
logInfo("BannerAd refresh uid2_token \(currentUid2Token)")
}
return result ?? false
}
public override func hide() -> Bool {
logInfo("request hide")
return bannerAdCoordinator?.hide() ?? false
}
override public func destroy() -> Bool {
logInfo("request destroy")
bannerAd?.delegate = nil
bannerAd?.revenueDelegate = nil
let _ = bannerAdCoordinator?.destroy()
bannerAdCoordinator = nil
return true
}
override public func updateOrientation(orientation: ScreenOrientation) -> Bool {
logInfo("update orientation to \(orientation)")
return bannerAdCoordinator?.updateOrientation(orientation: orientation) ?? false
}
// MARK: - MAXAdViewAdDelegate methods
public func didLoad(_ ad: MAAd) {
logInfo("loaded from \(ad.networkName)")
listener?.onAdLoaded(ad: MaxFusionAd(engineId: engineId, adType: AdType.Banner, ad: ad))
}
public func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) {
logError("load failed, \(error.code) - \(error.message)")
let loadFailedInfo = LoadFailedInfo(
engineId: engineId,
adPlatform: AdPlatform.max,
adType: AdType.Banner,
adUnitId: adUnitIdentifier,
error: MaxFusionError(error)
)
listener?.onAdLoadFailed(loadFailedInfo: loadFailedInfo)
}
public func didDisplay(_ ad: MAAd) {
listener?.onAdDisplayed(ad: MaxFusionAd(engineId: engineId, adType: AdType.Banner, ad: ad))
}
public func didHide(_ ad: MAAd) {
listener?.onAdHidden(ad: MaxFusionAd(engineId: engineId, adType: AdType.Banner, ad: ad))
}
public func didClick(_ ad: MAAd) {
listener?.onAdClicked(ad: MaxFusionAd(engineId: engineId, adType: AdType.Banner, ad: ad))
}
public func didFail(toDisplay ad: MAAd, withError error: MAError) {
logError("display failed, \(error.code) - \(error.message)")
listener?.onAdDisplayFailed(
ad: MaxFusionAd(engineId: engineId, adType: AdType.Banner, ad: ad),
error: MaxFusionError(error)
)
}
public func didExpand(_ ad: MAAd) {
// In a real implementation, you would call adBannerExpanded
}
public func didCollapse(_ ad: MAAd) {
// In a real implementation, you would call adBannerCollapsed
}
// MARK: - MAXAdRevenueDelegate methods
public func didPayRevenue(for ad: MAAd) {
logInfo("revenue paid")
listener?.onAdRevenuePaid(ad: MaxFusionAd(engineId: engineId, adType: AdType.Banner, ad: ad))
}
}