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))
 | |
|     }
 | |
| }
 |