// // MP_ADSimpleManager.swift // relax.offline.mp3.music // // Created by Mr.Zhou on 2024/9/19. // import UIKit import AVFoundation import GoogleMobileAds import AppLovinAdapter import AppLovinSDK import LiftoffMonetizeAdapter import VungleAdsSDK import PangleAdapter import PAGAdSDK import IronSourceAdapter import IronSource import MintegralAdapter import MTGSDK import ChartboostSDK import ChartboostAdapter //开屏广告类型 enum OpenType:Int { //冷启动 case ICE = 0 //热启动 case HOST = 1 var title:String{ switch self { case .ICE: return "是冷启动开屏广告" case .HOST: return "是热启动开屏广告" } } } ///广告中央管理器 class MP_ADSimpleManager: NSObject { static let shared = MP_ADSimpleManager() //调用的广告平台, false为AdMob,ture为AppLovin var platform:Bool{ if let newValue = UserDefaults.standard.object(forKey: "platform") as? Bool { return newValue }else { return false } } ///广告总开关 var openAdStatus:Bool{ if let bool = UserDefaults.standard.object(forKey: "UserVIPLevels") as? Bool{ return bool }else { return true } } ///是否启用广告静音设置(音量改动)默认不静音 private var isMuted:Bool { if let bool = UserDefaults.standard.object(forKey: "isAdMuted") as? Bool { return bool }else { return false } } ///内部使用广告开光 var internalAdStatus:Bool = true ///设置广告总开关 func setOpenAdStatus(_ bool:Bool) { DispatchQueue.main.async { [weak self] in guard let self = self else {return} UserDefaults.standard.set(bool, forKey: "UserVIPLevels") } } ///插页广告总开关 private var interstitialSwitch:Bool { get { if platform { return MP_AppLovinManager.shared.getInterstitialSwitch() }else { return MP_AdMobManager.shared.getInterstitialSwitch() } } } ///获得插页开关的状态 func getInterstitialSwitch() -> Bool { return interstitialSwitch } override init() { super.init() NotificationCenter.notificationKey.add(observer: self, selector: #selector(netWorkReachableAction(_:)), notificationName: .net_switch_reachable) DispatchQueue.main.async { //允许会话 GADMobileAds.sharedInstance().audioVideoManager.audioSessionIsApplicationManaged = true //广告声音默认为0.8 GADMobileAds.sharedInstance().applicationVolume = 0.8 } } deinit{ NotificationCenter.default.removeObserver(self) } ///调整广告静音声音 func isAdMuted() { guard isMuted == true else { return } //启用静音设置 DispatchQueue.main.async { if MP_PlayerManager.shared.getPlayState() == .Playing { if GADMobileAds.sharedInstance().applicationMuted == false { GADMobileAds.sharedInstance().applicationMuted = true GADMobileAds.sharedInstance().applicationVolume = 0.1 print("播放中,静音广告") } }else { GADMobileAds.sharedInstance().applicationMuted = false GADMobileAds.sharedInstance().applicationVolume = 0.8 print("没有播放,不需要静音广告") } } } ///调整广告恢复声音 func isAdSounded() { guard isMuted == true else { return } DispatchQueue.main.async { if GADMobileAds.sharedInstance().applicationMuted == true { GADMobileAds.sharedInstance().applicationMuted = false GADMobileAds.sharedInstance().applicationVolume = 0.8 print("加载广告时恢复广告声音配置") } } } //启动广告初始化 func start() { MP_AdMobManager.shared.start() MP_AppLovinManager.shared.startConfig() } //网络可用时触发 @objc private func netWorkReachableAction(_ sender:Notification) { DispatchQueue.main.async { [weak self] in guard let self = self else {return} guard openAdStatus, internalAdStatus else {return} if platform { MP_AppLovinManager.shared.loadMoreAds() }else { MP_AdMobManager.shared.loadMoreAdMobs() } } } //加载更多广告 func loadMoreAds() { guard openAdStatus, internalAdStatus else {return} if platform { MP_AppLovinManager.shared.loadMoreAds() }else { MP_AdMobManager.shared.loadMoreAdMobs() } } ///展示开屏广告 func showOpenAdIfAvailable(_ type:OpenType, completion:((_ ad:AnyObject, _ isOpen:Bool, _ platform:Bool) -> Void)?) { guard openAdStatus, internalAdStatus else { return } isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showOpenAdIfAvailable {[weak self] ad in guard let self = self else {return} block(ad, false, true) } }else { MP_AppLovinManager.shared.showOpenAdIfAvailable(nil) } }else { if let block = completion { MP_AdMobManager.shared.showOpenAdIfAvailable(type) { [weak self] ad, isOpen in guard let self = self else {return} block(ad, isOpen, false) } }else { MP_AdMobManager.shared.showOpenAdIfAvailable(type, completion: nil) } } } ///展示搜索广告 func showSearchInterstitialAdIfAvailable(completion:((AnyObject, Bool) -> Void)?) { guard openAdStatus, internalAdStatus else {return} isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showSearchInterstitialAdIfAvailable { ad in block(ad, true) } }else { MP_AppLovinManager.shared.showSearchInterstitialAdIfAvailable(nil) } }else { if let block = completion { MP_AdMobManager.shared.showSearchInterstitialAdIfAvailable { ad in block(ad, false) } }else { MP_AdMobManager.shared.showSearchInterstitialAdIfAvailable(completion: nil) } } } ///展示播放广告 func showPlayInterstitialAdIfAvailable(_ completion:((AnyObject?, Bool) -> Void)?) { guard openAdStatus, internalAdStatus else { completion?(nil, false) return } isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showPlayInterstitialAdIfAvailable { ad in block(ad, true) } }else { MP_AppLovinManager.shared.showPlayInterstitialAdIfAvailable(nil) } }else { if let block = completion { MP_AdMobManager.shared.showPlayInterstitialAdIfAvailable { ad in block(ad, false) } }else { MP_AdMobManager.shared.showPlayInterstitialAdIfAvailable(completion: nil) } } } ///展示曲库广告 func showLibraryInterstitialAdIfAvailable(completion:((AnyObject) -> Void)?) { guard openAdStatus, internalAdStatus else {return} isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showLibraryInterstitialAdIfAvailable { ad in block(ad) } }else { MP_AppLovinManager.shared.showLibraryInterstitialAdIfAvailable(nil) } }else { if let block = completion { MP_AdMobManager.shared.showLibraryInterstitialAdIfAvailable { ad in block(ad) } }else { MP_AdMobManager.shared.showLibraryInterstitialAdIfAvailable(completion: nil) } } } }