221 lines
6.7 KiB
Swift
221 lines
6.7 KiB
Swift
// AdModels.swift
|
|
// Defines core ad models for the FusionAds SDK
|
|
// Corresponds to AdModels.kt in Android implementation
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
// MARK: - AdPlatform
|
|
|
|
public class AdPlatform: Hashable, CustomStringConvertible, Codable {
|
|
public let name: String
|
|
|
|
private init(_ name: String) {
|
|
self.name = name
|
|
}
|
|
required public init(from decoder: any Decoder) throws {
|
|
let container = try decoder.singleValueContainer()
|
|
self.name = try container.decode(String.self)
|
|
}
|
|
|
|
public func encode(to encoder: any Encoder) throws {
|
|
var container = encoder.singleValueContainer()
|
|
try container.encode(self.name)
|
|
}
|
|
|
|
public static let adMob = AdPlatform("ADMOB")
|
|
public static let amazon = AdPlatform("AMZ")
|
|
public static let facebook = AdPlatform("FB")
|
|
public static let ironSource = AdPlatform("ULP")
|
|
public static let max = AdPlatform("MAX")
|
|
public static let tradPlus = AdPlatform("TP")
|
|
public static let pangle = AdPlatform("PG")
|
|
public static let invalid = AdPlatform("INVALID")
|
|
public static let fusion = AdPlatform("FUSION")
|
|
public static let test = AdPlatform("TEST")
|
|
|
|
public static func fromName(_ name: String) -> AdPlatform {
|
|
let upperName = name.uppercased()
|
|
switch upperName {
|
|
case AdPlatform.adMob.name:
|
|
return AdPlatform.adMob
|
|
case AdPlatform.amazon.name:
|
|
return AdPlatform.amazon
|
|
case AdPlatform.facebook.name:
|
|
return AdPlatform.facebook
|
|
case AdPlatform.ironSource.name:
|
|
return AdPlatform.ironSource
|
|
case AdPlatform.max.name:
|
|
return AdPlatform.max
|
|
case AdPlatform.test.name:
|
|
return AdPlatform.test
|
|
default:
|
|
fatalError("Invalid Ad Platform name")
|
|
}
|
|
}
|
|
|
|
public static func == (lhs: AdPlatform, rhs: AdPlatform) -> Bool {
|
|
return lhs.name == rhs.name
|
|
}
|
|
|
|
public func hash(into hasher: inout Hasher) {
|
|
hasher.combine(name)
|
|
}
|
|
|
|
public var description: String {
|
|
return name
|
|
}
|
|
}
|
|
|
|
// MARK: - AdType
|
|
|
|
/**
|
|
* Ad format or type of an ad unit,
|
|
* [name] mainly for display scenario
|
|
* [label] for more formal scenario, like stats
|
|
*/
|
|
public class AdType: Equatable, Hashable, CustomStringConvertible {
|
|
public let name: String
|
|
public let label: String
|
|
|
|
private init(_ name: String, label: String) {
|
|
self.name = name
|
|
self.label = label
|
|
}
|
|
|
|
public static let Interstitial = AdType("Interstitial", label: "INTER")
|
|
public static let Rewarded = AdType("Rewarded", label: "REWARDED")
|
|
public static let Banner = AdType("Banner", label: "BANNER")
|
|
public static let MRec = AdType("MRec", label: "MREC")
|
|
|
|
public static func fromName(_ name: String) -> AdType {
|
|
switch name {
|
|
case AdType.Interstitial.name:
|
|
return AdType.Interstitial
|
|
case AdType.Rewarded.name:
|
|
return AdType.Rewarded
|
|
case AdType.Banner.name:
|
|
return AdType.Banner
|
|
case AdType.MRec.name:
|
|
return AdType.MRec
|
|
default:
|
|
fatalError("Invalid Ad Type name")
|
|
}
|
|
}
|
|
|
|
public static func == (lhs: AdType, rhs: AdType) -> Bool {
|
|
return lhs.name == rhs.name
|
|
}
|
|
|
|
public func hash(into hasher: inout Hasher) {
|
|
hasher.combine(name)
|
|
}
|
|
|
|
public var description: String {
|
|
return name
|
|
}
|
|
}
|
|
|
|
// MARK: - BannerPosition
|
|
|
|
public enum BannerPosition: String {
|
|
case top
|
|
case bottom
|
|
case start
|
|
case end
|
|
}
|
|
|
|
// MARK: - ScreenOrientation
|
|
|
|
public enum ScreenOrientation: Int {
|
|
case portrait = 0
|
|
case landscape = 1
|
|
}
|
|
|
|
public class LoadAdTimeoutError: FusionError {
|
|
public var errorCode: Int { return -100001 }
|
|
public var message: String { return "Load ad timeout" }
|
|
public var cause: Error? { return nil }
|
|
public var info: String? { return nil }
|
|
public var waterfallName: String? { return nil }
|
|
}
|
|
|
|
public class LoadAdRequestError: FusionError {
|
|
public var errorCode: Int { return -100002 }
|
|
public let message: String
|
|
public var cause: Error? { return nil }
|
|
public var info: String? { return nil }
|
|
public var waterfallName: String? { return nil }
|
|
|
|
|
|
init(message: String = "Load Ad Request Error") {
|
|
self.message = message
|
|
}
|
|
}
|
|
|
|
public class ShowAdTimeoutError: FusionError {
|
|
public var errorCode: Int { return -100003 }
|
|
public var message: String { return "Show Ad Timeout Error" }
|
|
public var cause: Error? { return nil }
|
|
public var info: String? { return nil }
|
|
public var waterfallName: String? { return nil }
|
|
}
|
|
|
|
public class ShowAdRequestError: FusionError {
|
|
public var errorCode: Int { return -100004 }
|
|
public let message: String
|
|
public var cause: Error? { return nil }
|
|
public var info: String? { return nil }
|
|
public var waterfallName: String? { return nil }
|
|
|
|
init(message: String = "Show Ad Request Error") {
|
|
self.message = message
|
|
}
|
|
}
|
|
|
|
public class LoadAdNotAvailableError: FusionError {
|
|
public var errorCode: Int { return -100005 }
|
|
public let message: String
|
|
public var cause: Error? { return nil }
|
|
public var info: String? { return nil }
|
|
public var waterfallName: String? { return nil }
|
|
|
|
init(message: String = "Load Ad Not Avaialable Error") {
|
|
self.message = message
|
|
}
|
|
}
|
|
|
|
// MARK: - InvalidFusionAd
|
|
|
|
public class InvalidFusionAd: FusionAd {
|
|
public override var adPlatform: AdPlatform { return AdPlatform.invalid }
|
|
public override var adUnitId: String? { return "" }
|
|
public override var revenue: Double { return 0.0 }
|
|
public override var waterfallName: String? { return "" }
|
|
public override var placement: String? { return "" }
|
|
public override var networkName: String? { return "" }
|
|
public override var networkPlacement: String? { return "" }
|
|
public override var creativeId: String? { return "" }
|
|
public override var adReviewCreativeId: String? { return "" }
|
|
|
|
private override init(engineId: Int, adType: AdType) {
|
|
super.init(engineId: engineId, adType: adType)
|
|
}
|
|
|
|
public static func banner(engineId: Int) -> InvalidFusionAd {
|
|
return InvalidFusionAd(engineId: engineId, adType: AdType.Banner)
|
|
}
|
|
|
|
public static func interstitial(engineId: Int) -> InvalidFusionAd {
|
|
return InvalidFusionAd(engineId: engineId, adType: AdType.Interstitial)
|
|
}
|
|
|
|
public static func rewarded(engineId: Int) -> InvalidFusionAd {
|
|
return InvalidFusionAd(engineId: engineId, adType: AdType.Rewarded)
|
|
}
|
|
|
|
public static func mRec(engineId: Int) -> InvalidFusionAd {
|
|
return InvalidFusionAd(engineId: engineId, adType: AdType.MRec)
|
|
}
|
|
}
|