282 lines
11 KiB
Swift
282 lines
11 KiB
Swift
//
|
||
// LunchViewController.swift
|
||
// MusicPlayer
|
||
//
|
||
// Created by Mr.Zhou on 2024/3/27.
|
||
//
|
||
|
||
import UIKit
|
||
import GoogleMobileAds
|
||
///启动页
|
||
class MP_LunchViewController: UIViewController, GADFullScreenContentDelegate {
|
||
@IBOutlet weak var progressView: MP_Lunch_ProgressView!{
|
||
didSet{
|
||
progressView.layer.masksToBounds = true
|
||
}
|
||
}
|
||
//帧计时器
|
||
private var timer:CADisplayLink!
|
||
//最大计时值
|
||
private lazy var maxTimes:TimeInterval = 10
|
||
//当前计时值
|
||
private lazy var currentTimes:TimeInterval = 0
|
||
//计时器结束事件
|
||
private var completionBlock:(() -> Void)?
|
||
//是否执行过A/B面检测
|
||
private var isBeen:Bool = false
|
||
//广告事件传递闭包
|
||
private var adShowBlock:(() -> Void)?
|
||
//切换事件传递闭包
|
||
private var switchBlock:(() -> Void)?
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
view.backgroundColor = .init(hex: "#000000")
|
||
timer = CADisplayLink(target: self, selector: #selector(timerActionClick(_ :)))
|
||
//一秒执行多少次
|
||
timer.preferredFramesPerSecond = 40
|
||
//开辟线程
|
||
timer.add(to: RunLoop.current, forMode: .common)
|
||
//启动计时器
|
||
timer.isPaused = false
|
||
//拉取开屏广告
|
||
MP_AdMobManager.shared.showOpenAdIfAvailable(.ICE) { [weak self] ad in
|
||
guard let self = self else {return}
|
||
//将广告事件传递闭包赋值
|
||
adShowBlock = {
|
||
//修改插页总开关状态
|
||
MP_AdMobManager.shared.setInterstitialSwitch(true)
|
||
//覆盖并实现代理
|
||
ad.fullScreenContentDelegate = self
|
||
ad.present(fromRootViewController: self)
|
||
}
|
||
}
|
||
switchBlock = {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
guard MP_NetWorkManager.shared.netWorkStatu != .reachable else {
|
||
if completionBlock != nil {
|
||
completionBlock!()
|
||
}else {
|
||
//完成闭包没有配置完成,直接前往A面
|
||
print("ALog")
|
||
//打开A面
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_aSide()
|
||
}
|
||
}
|
||
return
|
||
}
|
||
//进度条加载结束,执行完成闭包
|
||
if completionBlock != nil {
|
||
completionBlock!()
|
||
}else {
|
||
//完成闭包没有配置完成,直接前往A面
|
||
print("ALog")
|
||
//打开A面
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_aSide()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
deinit {
|
||
timer.isPaused = true
|
||
//销毁计时器
|
||
timer.invalidate()
|
||
timer = nil
|
||
NotificationCenter.default.removeObserver(self)
|
||
}
|
||
override func viewDidAppear(_ animated: Bool) {
|
||
super.viewDidAppear(animated)
|
||
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
|
||
// 请求跟踪授权
|
||
requestTrackingAuthorization { idfa in
|
||
}
|
||
}
|
||
}
|
||
override func viewWillDisappear(_ animated: Bool) {
|
||
super.viewWillDisappear(animated)
|
||
MP_AnalyticsManager.shared.launch_pvAction()
|
||
}
|
||
|
||
//计时器执行事件
|
||
@objc fileprivate func timerActionClick(_ link:CADisplayLink) {
|
||
if maxTimes > currentTimes {
|
||
//未加载完
|
||
currentTimes += 0.025
|
||
let value = (currentTimes/maxTimes).isNaN ? 0:(currentTimes/maxTimes)
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//设置进度条
|
||
progressView.setProgress(value)
|
||
}
|
||
//执行A/B面检测
|
||
if isBeen == false && currentTimes > 2 {
|
||
//修改值避免一直检测
|
||
isBeen = true
|
||
switchAOrBAction()
|
||
}
|
||
}else {
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//判断是否具备广告
|
||
if adShowBlock != nil {
|
||
adShowBlock!()
|
||
}else {
|
||
switchBlock!()
|
||
}
|
||
}
|
||
}
|
||
//a/b面开关判断
|
||
private func switchAOrBAction() {
|
||
//首先检测之前是否进入过B面
|
||
guard UserDefaults.standard.bool(forKey: "MP_Into_B") != true else {
|
||
//获取B面首页数据
|
||
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
|
||
//进入过B面
|
||
self.completionBlock = {
|
||
//允许进入b面
|
||
print("BLog")
|
||
//保存进入B面的记录,下次加载直接进入B面
|
||
UserDefaults.standard.set(true, forKey: "MP_Into_B")
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_positive()
|
||
}
|
||
}
|
||
return
|
||
}
|
||
MP_NetWorkManager.shared.performTaskNetWrokAvailable {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//获取B面首页数据
|
||
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
|
||
//进行开关检测
|
||
MP_AnalyticsManager.shared.getOpenStatus { [weak self] open in
|
||
guard let self = self else {return}
|
||
if open {
|
||
//开关检测为通过,在检测IP地址
|
||
//根据ip值确定进入那个页面
|
||
MP_NetWorkManager.shared.requestIPInfo { statu in
|
||
if statu == true {
|
||
//允许进入b面
|
||
print("BLog")
|
||
//保存进入B面的记录,下次加载直接进入B面
|
||
UserDefaults.standard.set(true, forKey: "MP_Into_B")
|
||
//判断当前时间节点是否已经超时
|
||
if self.maxTimes > self.currentTimes {
|
||
//未超时,完成包处理
|
||
self.completionBlock = {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_positive()
|
||
}
|
||
}
|
||
}else {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_positive()
|
||
}
|
||
}
|
||
}else {
|
||
print("ALog")
|
||
//打开A面
|
||
if self.maxTimes > self.currentTimes {
|
||
self.completionBlock = {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_aSide()
|
||
}
|
||
}
|
||
}else {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_aSide()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}else {
|
||
print("ALog")
|
||
//打开A面
|
||
if self.maxTimes > self.currentTimes {
|
||
self.completionBlock = {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_aSide()
|
||
}
|
||
}
|
||
}else {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//停止计时器
|
||
timer.isPaused = true
|
||
//加载完毕,判断并跳转
|
||
accessAppdelegate.switch_aSide()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//MARK: - 覆盖型广告代理 GADFullScreenContentDelegate
|
||
//覆盖型广告已经消失
|
||
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
|
||
//当前启动页,展示广告一定是开屏广告
|
||
if switchBlock != nil {
|
||
switchBlock!()
|
||
}
|
||
if MP_AdMobManager.shared.completeOpenAdBlock != nil {
|
||
MP_AdMobManager.shared.completeOpenAdBlock!()
|
||
}
|
||
}
|
||
//覆盖型广告加载出错
|
||
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
|
||
//当前启动页,展示广告一定是开屏广告
|
||
if switchBlock != nil {
|
||
switchBlock!()
|
||
}
|
||
if MP_AdMobManager.shared.completeOpenAdBlock != nil {
|
||
MP_AdMobManager.shared.completeOpenAdBlock!()
|
||
}
|
||
}
|
||
}
|