FusionAds-iOS/Example/FusionAds/HappyPathAdsSdk.swift

287 lines
9.1 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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