// FusionAdsSdk.swift // Main entry point for the FusionAds iOS SDK // Corresponds to GuruAdsSdk.kt in Android implementation import Foundation import UIKit import AppLovinSDK import DTBiOSSDK import GuruConsent import OpenWrapSDK import InMobiSDK import TradPlusAds import MobileFuseSDK import IronSource import GoogleMobileAds import ChartboostSDK import IASDKCore import InMobiAdapter import VungleAdsSDK import MTGSDK #if DEBUG extension FusionAdsSdk { public static func registerExternalAdPlatformSdkMapping( platform: AdPlatform, initializer: @escaping GuruAdsInitializer ) { externalAdPlatformSdkMapping[platform] = initializer } } #endif public class FusionAdsSdk { private static let adPlatformSdkMapping: [AdPlatform:GuruAdsInitializer] = [ AdPlatform.max : GuruMaxAdsSdk.obtain, AdPlatform.ironSource : GuruIronSourceAdsSdk.obtain, AdPlatform.adMob : GuruAdMobAdsSdk.obtain ] private static var externalAdPlatformSdkMapping: [AdPlatform:GuruAdsInitializer] = [:] private let adsEngineManager: AdsEngineManager; private let viewController: UIViewController; public init(controller: UIViewController) { viewController = controller adsEngineManager = AdsEngineManager(viewController: viewController) } // Initialize the SDK with configuration profile public func initialize(adsProfile: AdsProfile, analyticsEventHandler: AnalyticsEventHandler? = nil) async -> Bool { let initializers = Self.externalAdPlatformSdkMapping.merging(Self.adPlatformSdkMapping) { (current, _) in current } if(analyticsEventHandler != nil) { AnalyticsEvents.shared.registerHandler(handler: analyticsEventHandler!) } for adPlatform in adsProfile.adPlatforms { let initializer = initializers[adPlatform] let sdk = initializer?(viewController) if sdk != nil { await sdk!.initialize(adsProfile: adsProfile) adsEngineManager.addAdsSdk(sdk!) } } return true; } // Create interstitial ad engine public func createInterstitialAdEngine(adEngineConfig: AdEngineConfig) -> InterstitialAdEngine? { return adsEngineManager.createInterstitialAdEngine(adEngineConfig: adEngineConfig) } // Create rewarded ad engine public func createRewardedAdEngine(adEngineConfig: AdEngineConfig) -> RewardedAdEngine? { return adsEngineManager.createRewardedAdEngine(adEngineConfig: adEngineConfig) } // Create banner ad engine public func createBannerAdEngine(adEngineConfig: AdEngineConfig) -> BannerAdEngine? { return adsEngineManager.createBannerAdEngine(adEngineConfig: adEngineConfig) } // Create mrec ad engine public func createMRecAdEngine(adEngineConfig: AdEngineConfig) -> MRecAdEngine? { return adsEngineManager.createMRecAdEngine(adEngineConfig: adEngineConfig) } public func getInterstitialAdEngine(id: Int) -> InterstitialAdEngine? { return adsEngineManager.getInterstitialAdEngine(id: id) } public func getRewardedAdEngine(id: Int) -> RewardedAdEngine? { return adsEngineManager.getRewardedAdEngine(id: id) } public func getBannerAdEngine(id: Int) -> BannerAdEngine? { return adsEngineManager.getBannerAdEngine(id: id) } public func getMRecAdEngine(id: Int) -> MRecAdEngine? { return adsEngineManager.getMRecAdEngine(id: id) } public func openDebugger(adPlatform: AdPlatform) -> Bool { if (adPlatform == AdPlatform.max) { ALSdk.shared().showMediationDebugger() } else if (adPlatform == AdPlatform.ironSource) { IronSource.launchTestSuite(viewController) } else if (adPlatform == AdPlatform.adMob) { GADMobileAds.sharedInstance().presentAdInspector(from: viewController) } return true; } public func isTablet() throws -> Bool { return UIDevice.current.userInterfaceIdiom == .pad } public func afterAcceptPrivacy() -> Bool { ALPrivacySettings.setHasUserConsent(true) // ironsource IronSource.setConsent(true) // chartboost let dataUseConsent = CHBDataUseConsent.GDPR(CHBDataUseConsent.GDPR.Consent.nonBehavioral) Chartboost.addDataUseConsent(dataUseConsent) // fyber IASDKCore.sharedInstance().gdprConsent = IAGDPRConsentType.given IASDKCore.sharedInstance().gdprConsentString = "myGdprConsentString" // inmobi var consentObject = Dictionary() consentObject["gdpr"] = "1" consentObject[IMCommonConstants.IM_GDPR_CONSENT_AVAILABLE] = "true" GADMInMobiConsent.updateGDPRConsent(consentObject) // vungle VunglePrivacySettings.setGDPRStatus(true) VunglePrivacySettings.setGDPRMessageVersion("v1.0.0") // mintegral MTGSDK.sharedInstance().consentStatus = true return true } public func updateOrientation(orientation: ScreenOrientation) { adsEngineManager.dispatchOrientationUpdate(orientation: orientation) } public func updateUid2Token(uid2Token: String) { if (AdsHelper.setUid2Token(uid2Token)) { NSLog("setUid2Token: \(uid2Token) success!!!") // PubMatic UID2 var userId = POBExternalUserId(source: "uidapi.com", andId: uid2Token) userId.atype = 1 OpenWrapSDK.addExternalUserId(userId) // Inmobi UID2 IMSdk.setPublisherProvidedUnifiedId(["uidapi.com": uid2Token]) // TradPlus TradPlus.sharedInstance().uid2Info = { let info = TradPlusUID2Info() info.uid2Token = uid2Token return info }() // MobileFuse MobileFuseTargetingData.setExtendedUserId(uid2Token, forPartner: "uidapi.com") } } // for testing only public func clearCachedEngines() { adsEngineManager.clearCachedEngines() } }