FusionAds-iOS/FusionAds/Classes/fusion/FusionAdsSdk.swift

187 lines
6.1 KiB
Swift
Raw Normal View History

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