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