174 lines
5.9 KiB
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))
|
|
}
|
|
}
|