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