287 lines
9.1 KiB
Swift
287 lines
9.1 KiB
Swift
//
|
||
// 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 }
|
||
}
|