FusionAds-iOS/Example/FusionAds/HappyPathAdsSdk.swift

287 lines
9.1 KiB
Swift
Raw Permalink Normal View History

//
// HappyPathAdsSdk.swift
// FusionAds
//
// Created by 250102 on 2025/3/18.
// Copyright © 2025 CocoaPods. All rights reserved.
//
import FusionAds
let queue = DispatchQueue.main
/// 广sdk
class HappyPathAdsSdk: GuruAdsSdk {
static let shared = HappyPathAdsSdk()
public private(set) var ads: [String: Any] = [:]
private init() {
}
public static func obtain(viewController: UIViewController) -> GuruAdsSdk {
return shared
}
public var adPlatform: FusionAds.AdPlatform {
return AdPlatform.test
}
public var adsProfile: FusionAds.AdsProfile? = nil
func initialize(adsProfile: FusionAds.AdsProfile) async -> Bool {
self.adsProfile = adsProfile
return true
}
func obtainInterstitialAd(adConfig: FusionAds.AdConfig) -> FusionAds.GuruInterstitialAd {
let ad = ads[adConfig.adUnitId] as? HappyPathInterstitialAd
if(ad != nil) {
return ad!
}
let newAd = HappyPathInterstitialAd(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: adPlatform)
ads[adConfig.adUnitId] = newAd
return newAd
}
func obtainRewardedAd(adConfig: FusionAds.AdConfig) -> FusionAds.GuruRewardedAd {
let ad = ads[adConfig.adUnitId] as? HappyPathRewardedAd
if(ad != nil) {
return ad!
}
let newAd = HappyPathRewardedAd(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: adPlatform)
ads[adConfig.adUnitId] = newAd
return newAd
}
func obtainBannerAd(adConfig: FusionAds.AdConfig) -> FusionAds.GuruBannerAd {
let ad = ads[adConfig.adUnitId] as? HappyPathBannerAd
if(ad != nil) {
return ad!
}
let newAd = HappyPathBannerAd(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: adPlatform)
ads[adConfig.adUnitId] = newAd
return newAd
}
func obtainMRecAd(adConfig: FusionAds.AdConfig) -> FusionAds.GuruMRecAd {
let ad = ads[adConfig.adUnitId] as? HappyPathMRecAd
if(ad != nil) {
return ad!
}
let newAd = HappyPathMRecAd(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: adPlatform)
ads[adConfig.adUnitId] = newAd
return newAd
}
func processCrossAction(action: FusionAds.AdsCrossAction) -> Bool {
return false
}
}
class HappyPathInterstitialAd : GuruInterstitialAd {
private var ad: HappyPathOriginalAd
public private(set) var state: HappyPathAdState = HappyPathAdState()
override init(engineId: Int, adUnitId: String, adPlatform: AdPlatform) {
ad = HappyPathOriginalAd(adPlatform: adPlatform, adUnitId: adUnitId)
super.init(engineId: engineId, adUnitId: adUnitId, adPlatform: adPlatform)
}
override public func load() -> Bool {
state.isLoaded = true
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.Interstitial, originAd: ad)
queue.async {
[weak self] in
self?.listener?.onAdLoaded(ad: fusionAd)
}
return true;
}
override public func show(_ request: InterstitialShowRequest? = nil) -> Bool {
state.isShown = true
ad.placement = request?.placement
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.Interstitial, originAd: ad)
queue.async {
[weak self] in
self?.listener?.onAdDisplayed(ad: fusionAd)
}
return true;
}
override public func destroy() -> Bool {
state.isDestroyed = true
return true;
}
}
class HappyPathRewardedAd : GuruRewardedAd {
private var ad: HappyPathOriginalAd
public private(set) var state: HappyPathAdState = HappyPathAdState()
override init(engineId: Int, adUnitId: String, adPlatform: AdPlatform) {
ad = HappyPathOriginalAd(adPlatform: adPlatform, adUnitId: adUnitId)
super.init(engineId: engineId, adUnitId: adUnitId, adPlatform: adPlatform)
}
override public func load() -> Bool {
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.Rewarded, originAd: ad)
state.isLoaded = true
queue.async {
[weak self] in
self?.listener?.onAdLoaded(ad: fusionAd)
}
return true;
}
override public func show(_ request: RewardedShowRequest? = nil) -> Bool {
state.isShown = true
ad.placement = request?.placement
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.Rewarded, originAd: ad)
queue.async {
[weak self] in
self?.listener?.onAdDisplayed(ad: fusionAd)
}
return true;
}
override public func destroy() -> Bool {
state.isDestroyed = true
return true;
}
}
class HappyPathBannerAd : GuruBannerAd {
private var ad: HappyPathOriginalAd
public private(set) var state: HappyPathAdState = HappyPathAdState()
public private(set) var lastShowRequest: BannerShowRequest? = nil
override init(engineId: Int, adUnitId: String, adPlatform: AdPlatform) {
ad = HappyPathOriginalAd(adPlatform: adPlatform, adUnitId: adUnitId)
super.init(engineId: engineId, adUnitId: adUnitId, adPlatform: adPlatform)
}
override public func load() -> Bool {
state.isLoaded = true
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.Banner, originAd: ad)
queue.async {
[weak self] in
self?.listener?.onAdLoaded(ad: fusionAd)
}
return true;
}
override public func show(_ request: BannerShowRequest? = nil) -> Bool {
state.isShown = true
lastShowRequest = request
ad.placement = request?.placement
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.Banner, originAd: ad)
return true;
}
override func hide() -> Bool {
state.isHidden = true
return true
}
override func destroy() -> Bool {
state.isDestroyed = true
return true
}
override func updateOrientation(orientation: ScreenOrientation) -> Bool {
state.orientation = orientation
return true
}
}
class HappyPathMRecAd : GuruMRecAd {
private var ad: HappyPathOriginalAd
public private(set) var state: HappyPathAdState = HappyPathAdState()
public private(set) var lastShowRequest: MRecShowRequest?
override init(engineId: Int, adUnitId: String, adPlatform: AdPlatform) {
ad = HappyPathOriginalAd(adPlatform: adPlatform, adUnitId: adUnitId)
super.init(engineId: engineId, adUnitId: adUnitId, adPlatform: adPlatform)
}
override public func load() -> Bool {
state.isLoaded = true
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.MRec, originAd: ad)
queue.async {
[weak self] in
self?.listener?.onAdDisplayed(ad: fusionAd)
}
return true;
}
override public func show(request: MRecShowRequest? = nil) -> Bool {
state.isShown = true
lastShowRequest = request
ad.placement = request?.placement
let fusionAd = HappyPathFusionAd(engineId: engineId, adType: AdType.MRec, originAd: ad)
return true;
}
override func hide() -> Bool {
state.isHidden = true
return true
}
override func destroy() -> Bool {
state.isDestroyed = true
return true
}
override func updateOrientation(orientation: ScreenOrientation) -> Bool {
state.orientation = orientation
return true
}
}
struct HappyPathAdState {
var isLoaded = false
var isShown = false
var isHidden = false
var isDestroyed = false
var orientation: ScreenOrientation? = nil
}
struct HappyPathOriginalAd {
let adPlatform: AdPlatform
let adUnitId: String
var revenue: Double = 0
var waterfallName: String? = nil
var placement: String? = nil
var networkName: String? = nil
var networkPlacement: String? = nil
var creativeId: String? = nil
var adReviewCreativeId: String? = nil
}
class HappyPathFusionAd : FusionAd {
private let originAd: HappyPathOriginalAd
init(engineId: Int, adType: AdType, originAd: HappyPathOriginalAd) {
self.originAd = originAd
super.init(engineId: engineId, adType: adType)
}
override var adPlatform: AdPlatform { return originAd.adPlatform }
override var adUnitId: String? { return originAd.adUnitId }
override var revenue: Double { return originAd.revenue }
override var waterfallName: String? { return originAd.waterfallName }
override var placement: String? { return originAd.placement }
override var networkName: String? { return originAd.networkName }
override var networkPlacement: String? { return originAd.networkPlacement }
override var creativeId: String? { return originAd.creativeId }
override var adReviewCreativeId: String? { return originAd.adReviewCreativeId }
}