141 lines
4.5 KiB
Swift
141 lines
4.5 KiB
Swift
//
|
|
// GuruIronSourceAdsSdk.swift
|
|
// Pods
|
|
//
|
|
// Created by 250102 on 2025/5/6.
|
|
//
|
|
import IronSource
|
|
|
|
public class GuruIronSourceAdsSdk: GuruAdsSdk {
|
|
|
|
private static var instance: GuruIronSourceAdsSdk?
|
|
|
|
|
|
public var adPlatform: AdPlatform {
|
|
return AdPlatform.ironSource
|
|
}
|
|
|
|
private var initialized = false
|
|
|
|
private static var interstitialAds: [String: GuruInterstitialAd] = [:]
|
|
private static var rewardedAds: [String: GuruRewardedAd] = [:]
|
|
private static var bannerAds: [String: GuruBannerAd] = [:]
|
|
private static var mrecAds: [String: GuruMRecAd] = [:]
|
|
|
|
private func logDebug(_ message: String) {
|
|
Logger.d(tag: "GuruIronSourceAdsSdk", message: message)
|
|
}
|
|
|
|
private func logInfo(_ message: String) {
|
|
Logger.i(tag: "GuruIronSourceAdsSdk", message: message)
|
|
}
|
|
|
|
private func logWarn(_ message: String) {
|
|
Logger.w(tag: "GuruIronSourceAdsSdk", message: message)
|
|
}
|
|
|
|
private func logError(_ message: String) {
|
|
Logger.e(tag: "GuruIronSourceAdsSdk", message: message)
|
|
}
|
|
|
|
private let viewController: UIViewController
|
|
|
|
private let impressionDataDispatcher = GuruIronSourceImpressionDataDispatcher()
|
|
|
|
private init(viewController: UIViewController) {
|
|
self.viewController = viewController
|
|
}
|
|
|
|
public static func obtain(viewController: UIViewController) -> GuruAdsSdk {
|
|
if let existingInstance = instance {
|
|
return existingInstance
|
|
}
|
|
|
|
let newInstance = GuruIronSourceAdsSdk(viewController: viewController)
|
|
instance = newInstance
|
|
return newInstance
|
|
}
|
|
|
|
public func initialize(adsProfile: AdsProfile) async -> Bool {
|
|
guard !initialized else {
|
|
logWarn("SDK already initialized! Ignoring.")
|
|
return false
|
|
}
|
|
|
|
if(adsProfile.ironSourceSdkKey?.isEmpty != false) {
|
|
logError("ironSourceSdkKey is empty, unable to initialize")
|
|
return false;
|
|
}
|
|
|
|
initialized = true
|
|
|
|
if(adsProfile.debugMode) {
|
|
IronSource.setMetaDataWithKey("is_test_suite", value: "enable")
|
|
ISIntegrationHelper.validateIntegration()
|
|
}
|
|
IronSource.add(impressionDataDispatcher)
|
|
return await withCheckedContinuation(isolation: MainActor.shared) { continuation in
|
|
|
|
let requestBuilder = LPMInitRequestBuilder(appKey: adsProfile.ironSourceSdkKey!)
|
|
.withUserId(adsProfile.userId)
|
|
|
|
let initRequest = requestBuilder.build()
|
|
|
|
LevelPlay.initWith(initRequest)
|
|
{ config, error in
|
|
if let error = error {
|
|
self.logError("initialize failed, \(error)")
|
|
continuation.resume(returning: false)
|
|
} else {
|
|
continuation.resume(returning: true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public func obtainInterstitialAd(adConfig: AdConfig) -> GuruInterstitialAd {
|
|
if let existingAd = Self.interstitialAds[adConfig.cacheKey] {
|
|
return existingAd
|
|
}
|
|
|
|
let newAd = GuruIronSourceInterstitialAd(viewController: viewController, adConfig: adConfig)
|
|
Self.interstitialAds[adConfig.cacheKey] = newAd
|
|
return newAd
|
|
}
|
|
|
|
public func obtainRewardedAd(adConfig: AdConfig) -> GuruRewardedAd {
|
|
if let existingAd = Self.rewardedAds[adConfig.cacheKey] {
|
|
return existingAd
|
|
}
|
|
|
|
let newAd = GuruIronSourceRewardedAd(viewController: viewController, adConfig: adConfig)
|
|
Self.rewardedAds[adConfig.cacheKey] = newAd
|
|
return newAd
|
|
}
|
|
|
|
public func obtainBannerAd(adConfig: AdConfig) -> GuruBannerAd {
|
|
if let existingAd = Self.bannerAds[adConfig.cacheKey] {
|
|
return existingAd
|
|
}
|
|
|
|
let newAd = GuruIronSourceBannerAd(viewController: viewController, adConfig: adConfig)
|
|
Self.bannerAds[adConfig.cacheKey] = newAd
|
|
return newAd
|
|
}
|
|
|
|
public func obtainMRecAd(adConfig: AdConfig) -> GuruMRecAd {
|
|
if let existingAd = Self.mrecAds[adConfig.cacheKey] {
|
|
return existingAd
|
|
}
|
|
|
|
let newAd = GuruIronSourceMRecAd(viewController: viewController, adConfig: adConfig)
|
|
Self.mrecAds[adConfig.cacheKey] = newAd
|
|
return newAd
|
|
}
|
|
|
|
public func processCrossAction(action: AdsCrossAction) -> Bool {
|
|
return false
|
|
}
|
|
|
|
}
|