257 lines
8.3 KiB
Swift
257 lines
8.3 KiB
Swift
//
|
||
// 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{
|
||
return !MP_IAPManager.shared.isVIP
|
||
}
|
||
///是否启用广告静音设置(音量改动)默认不静音
|
||
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)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|