131 lines
4.5 KiB
Swift
131 lines
4.5 KiB
Swift
// GuruMaxRewardedAd.swift
|
|
// Implementation for MAX rewarded ads
|
|
// Corresponds to GuruMaxRewardedAd.kt in Android implementation
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import AppLovinSDK
|
|
|
|
public class GuruMaxRewardedAd: GuruRewardedAd, MARewardedAdDelegate, MAAdRevenueDelegate {
|
|
|
|
private let viewController: UIViewController
|
|
private let adConfig: AdConfig
|
|
private var rewardedAd: MARewardedAd?
|
|
private var isFirstLoad = true
|
|
|
|
public init(viewController: UIViewController, adConfig: AdConfig) {
|
|
self.viewController = viewController
|
|
self.adConfig = adConfig
|
|
super.init(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: AdPlatform.max)
|
|
}
|
|
|
|
public override func load() -> Bool {
|
|
logInfo("request load")
|
|
destroy()
|
|
|
|
rewardedAd = MARewardedAd.shared(withAdUnitIdentifier: adConfig.adUnitId)
|
|
rewardedAd?.delegate = self
|
|
rewardedAd?.revenueDelegate = self
|
|
|
|
// Set UID2 token if available
|
|
if let uid2Token = AdsHelper.getUid2Token() {
|
|
rewardedAd?.setExtraParameterForKey("uid2_token", value: uid2Token)
|
|
}
|
|
rewardedAd?.setExtraParameterForKey("disable_auto_retries", value: self.adConfig.requireDisableAutoRetries ? "true":"false")
|
|
|
|
if let amazonSlotId = adConfig.adAmazonSlotId, !amazonSlotId.isEmpty, isFirstLoad {
|
|
isFirstLoad = false
|
|
|
|
// In a real implementation, you would load Amazon ads here
|
|
logWarn("Would load Amazon rewarded ad with slot ID: \(amazonSlotId)")
|
|
|
|
// Simulate direct load for now
|
|
rewardedAd?.load()
|
|
} else {
|
|
rewardedAd?.load()
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
public override func show(_ request: RewardedShowRequest? = nil) -> Bool {
|
|
logInfo("request show")
|
|
guard let ad = rewardedAd, ad.isReady else {
|
|
logDebug("Show result: false - ad not ready")
|
|
return false
|
|
}
|
|
|
|
ad.show(forPlacement: request?.placement)
|
|
logDebug("Show result: true")
|
|
return true
|
|
}
|
|
|
|
public override func destroy() -> Bool {
|
|
rewardedAd?.delegate = nil
|
|
rewardedAd?.revenueDelegate = nil
|
|
rewardedAd = nil
|
|
return true
|
|
}
|
|
|
|
// MARK: - MARewardedAdDelegate methods
|
|
|
|
public func didLoad(_ ad: MAAd) {
|
|
logInfo("loaded")
|
|
listener?.onAdLoaded(ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad))
|
|
}
|
|
|
|
|
|
public func didFail(toDisplay ad: MAAd, withError error: MAError) {
|
|
logError("displayed failed, \(error.code) - \(error.message)")
|
|
listener?.onAdDisplayFailed(ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad), error: MaxFusionError(error))
|
|
}
|
|
|
|
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.Rewarded,
|
|
adUnitId: adUnitIdentifier,
|
|
error: MaxFusionError(error)
|
|
)
|
|
listener?.onAdLoadFailed(loadFailedInfo: loadFailedInfo)
|
|
}
|
|
|
|
public func didDisplay(_ ad: MAAd) {
|
|
logInfo("displayed")
|
|
listener?.onAdDisplayed(ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad))
|
|
}
|
|
|
|
public func didHide(_ ad: MAAd) {
|
|
listener?.onAdHidden(ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad))
|
|
}
|
|
|
|
public func didClick(_ ad: MAAd) {
|
|
listener?.onAdClicked(ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad))
|
|
}
|
|
|
|
public func didStartRewardedVideo(for ad: MAAd) {
|
|
// Additional callback if needed
|
|
}
|
|
|
|
public func didCompleteRewardedVideo(for ad: MAAd) {
|
|
// Additional callback if needed
|
|
}
|
|
|
|
public func didRewardUser(for ad: MAAd, with reward: MAReward) {
|
|
logInfo("reward user")
|
|
listener?.onUserRewarded(
|
|
ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad),
|
|
reward: MaxFusionReward(reward)
|
|
)
|
|
}
|
|
|
|
// MARK: - MAAdRevenueDelegate methods
|
|
|
|
public func didPayRevenue(for ad: MAAd) {
|
|
logInfo("revenue paid")
|
|
listener?.onAdRevenuePaid(ad: MaxFusionAd(engineId: engineId, adType: AdType.Rewarded, ad: ad))
|
|
}
|
|
}
|