187 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Swift
		
	
	
		
		
			
		
	
	
			187 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Swift
		
	
	
|  | // 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<String, String>() | ||
|  |         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() | ||
|  |     } | ||
|  | } | ||
|  | 
 |