B面1.1.4 对代码的进一步调整

This commit is contained in:
Mr.zhou 2024-07-29 19:29:19 +08:00
parent ee4ede08ad
commit 732d471df7
8 changed files with 332 additions and 248 deletions

View File

@ -3,22 +3,4 @@
uuid = "B2D42C7E-B789-40F0-8339-B70A223A3889" uuid = "B2D42C7E-B789-40F0-8339-B70A223A3889"
type = "0" type = "0"
version = "2.0"> version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "0C29DCFF-4A23-4BA3-9720-63B7CCCE8E90"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "relax.offline.mp3.music/MP/Common/Tool(&#x5de5;&#x5177;&#x5c01;&#x88c5;)/MP_NetWorkManager.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "1060"
endingLineNumber = "1060"
landmarkName = "requestAndroidPostPlayer(_:videoId:parameters:completion:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket> </Bucket>

View File

@ -79,6 +79,10 @@ let serviceUrl:URL = .init(string: "https://musiclax.mystrikingly.com/terms")!
//MARK: - //MARK: -
// //
func coreDefaultValues() { func coreDefaultValues() {
if UserDefaults.standard.string(forKey: "OpenICEID") != nil {
print("清理旧数据")
UserDefaults.standard.removeObject(forKey: "OpenICEID")
}
if UserDefaults.standard.object(forKey: "OpenICEID") == nil { if UserDefaults.standard.object(forKey: "OpenICEID") == nil {
print("第一次启动添加广告ID") print("第一次启动添加广告ID")
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/2126815630", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/2126815630", ad: "AdMob", type: .Insert),
@ -89,6 +93,9 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "OpenICEID") UserDefaults.standard.set(array, forKey: "OpenICEID")
} }
} }
if UserDefaults.standard.string(forKey: "OpenHOSTID") != nil {
UserDefaults.standard.removeObject(forKey: "OpenHOSTID")
}
if UserDefaults.standard.object(forKey: "OpenHOSTID") == nil { if UserDefaults.standard.object(forKey: "OpenHOSTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/9262752398", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/9262752398", ad: "AdMob", type: .Insert),
.init(level: 2, identifier: "ca-app-pub-1371732277241593/6536516707", ad: "AdMob", type: .Open), .init(level: 2, identifier: "ca-app-pub-1371732277241593/6536516707", ad: "AdMob", type: .Open),
@ -98,6 +105,9 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "OpenHOSTID") UserDefaults.standard.set(array, forKey: "OpenHOSTID")
} }
} }
if UserDefaults.standard.string(forKey: "SearchINSERTID") != nil {
UserDefaults.standard.removeObject(forKey: "SearchINSERTID")
}
if UserDefaults.standard.object(forKey: "SearchINSERTID") == nil { if UserDefaults.standard.object(forKey: "SearchINSERTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/5323507386", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/5323507386", ad: "AdMob", type: .Insert),
.init(level: 2, identifier: "ca-app-pub-1371732277241593/6877962328", ad: "AdMob", type: .Insert), .init(level: 2, identifier: "ca-app-pub-1371732277241593/6877962328", ad: "AdMob", type: .Insert),
@ -107,12 +117,18 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "SearchINSERTID") UserDefaults.standard.set(array, forKey: "SearchINSERTID")
} }
} }
if UserDefaults.standard.string(forKey: "SearchNATIVEID") != nil {
UserDefaults.standard.removeObject(forKey: "SearchNATIVEID")
}
if UserDefaults.standard.object(forKey: "SearchNATIVEID") == nil { if UserDefaults.standard.object(forKey: "SearchNATIVEID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/5674216970", ad: "AdMob", type: .Native)]) { if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/5674216970", ad: "AdMob", type: .Native)]) {
//广ID //广ID
UserDefaults.standard.set(array, forKey: "SearchNATIVEID") UserDefaults.standard.set(array, forKey: "SearchNATIVEID")
} }
} }
if UserDefaults.standard.string(forKey: "PlayerINSERTID") != nil {
UserDefaults.standard.removeObject(forKey: "PlayerINSERTID")
}
if UserDefaults.standard.object(forKey: "PlayerINSERTID") == nil { if UserDefaults.standard.object(forKey: "PlayerINSERTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/9569874154", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/9569874154", ad: "AdMob", type: .Insert),
.init(level: 2, identifier: "ca-app-pub-1371732277241593/8256792481", ad: "AdMob", type: .Insert), .init(level: 2, identifier: "ca-app-pub-1371732277241593/8256792481", ad: "AdMob", type: .Insert),
@ -122,6 +138,9 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "PlayerINSERTID") UserDefaults.standard.set(array, forKey: "PlayerINSERTID")
} }
} }
if UserDefaults.standard.string(forKey: "SwitchINSERTID") != nil {
UserDefaults.standard.removeObject(forKey: "SwitchINSERTID")
}
if UserDefaults.standard.object(forKey: "SwitchINSERTID") == nil { if UserDefaults.standard.object(forKey: "SwitchINSERTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4990165586", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4990165586", ad: "AdMob", type: .Insert),
.init(level: 2, identifier: "ca-app-pub-1371732277241593/5247485769", ad: "AdMob", type: .Insert), .init(level: 2, identifier: "ca-app-pub-1371732277241593/5247485769", ad: "AdMob", type: .Insert),
@ -131,6 +150,9 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "SwitchINSERTID") UserDefaults.standard.set(array, forKey: "SwitchINSERTID")
} }
} }
if UserDefaults.standard.string(forKey: "LoadINSERTID") != nil {
UserDefaults.standard.removeObject(forKey: "LoadINSERTID")
}
if UserDefaults.standard.object(forKey: "LoadINSERTID") == nil { if UserDefaults.standard.object(forKey: "LoadINSERTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4335559460", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4335559460", ad: "AdMob", type: .Insert),
.init(level: 2, identifier: "ca-app-pub-1371732277241593/2398278378", ad: "AdMob", type: .Insert), .init(level: 2, identifier: "ca-app-pub-1371732277241593/2398278378", ad: "AdMob", type: .Insert),
@ -139,6 +161,9 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "LoadINSERTID") UserDefaults.standard.set(array, forKey: "LoadINSERTID")
} }
} }
if UserDefaults.standard.string(forKey: "LibraryINSERTID") != nil {
UserDefaults.standard.removeObject(forKey: "LibraryINSERTID")
}
if UserDefaults.standard.object(forKey: "LibraryINSERTID") == nil { if UserDefaults.standard.object(forKey: "LibraryINSERTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4607022200", ad: "AdMob", type: .Insert), if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4607022200", ad: "AdMob", type: .Insert),
.init(level: 2, identifier: "ca-app-pub-1371732277241593/3104538158", ad: "AdMob", type: .Insert), .init(level: 2, identifier: "ca-app-pub-1371732277241593/3104538158", ad: "AdMob", type: .Insert),
@ -148,12 +173,18 @@ func coreDefaultValues() {
UserDefaults.standard.set(array, forKey: "LibraryINSERTID") UserDefaults.standard.set(array, forKey: "LibraryINSERTID")
} }
} }
if UserDefaults.standard.string(forKey: "LibraryNATIVEID") != nil {
UserDefaults.standard.removeObject(forKey: "LibraryNATIVEID")
}
if UserDefaults.standard.object(forKey: "LibraryNATIVEID") == nil { if UserDefaults.standard.object(forKey: "LibraryNATIVEID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4683255855", ad: "AdMob", type: .Native)]) { if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/4683255855", ad: "AdMob", type: .Native)]) {
//广ID //广ID
UserDefaults.standard.set(array, forKey: "LibraryNATIVEID") UserDefaults.standard.set(array, forKey: "LibraryNATIVEID")
} }
} }
if UserDefaults.standard.string(forKey: "GlobalINSERTID") != nil {
UserDefaults.standard.removeObject(forKey: "GlobalINSERTID")
}
if UserDefaults.standard.object(forKey: "GlobalINSERTID") == nil { if UserDefaults.standard.object(forKey: "GlobalINSERTID") == nil {
if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/9449223728", ad: "AdMob", type: .Insert)]) { if let array = coreAdModelforJson([.init(level: 3, identifier: "ca-app-pub-1371732277241593/9449223728", ad: "AdMob", type: .Insert)]) {
//广ID //广ID

View File

@ -14,7 +14,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
static let shared = MP_AdMobManager() static let shared = MP_AdMobManager()
private let sharedInstance = GADMobileAds.sharedInstance() private let sharedInstance = GADMobileAds.sharedInstance()
///广 ///广
private var openAdStatus:Bool = false private var openAdStatus:Bool = true
///广(50) ///广(50)
private let expirationTime:TimeInterval = 3000 private let expirationTime:TimeInterval = 3000
@ -94,7 +94,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
interstitialSwitch = false interstitialSwitch = false
//广 //广
DispatchQueue.main.asyncAfter(deadline: .now() + 20) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
[weak self] in [weak self] in
self?.loadSearchInterstitialAd { status in self?.loadSearchInterstitialAd { status in
if status { if status {
@ -116,7 +116,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
interstitialSwitch = false interstitialSwitch = false
//广 //广
DispatchQueue.main.asyncAfter(deadline: .now() + 20) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
[weak self] in [weak self] in
self?.loadPlayInterstitialAd { status in self?.loadPlayInterstitialAd { status in
if status { if status {
@ -138,7 +138,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
interstitialSwitch = false interstitialSwitch = false
//广 //广
DispatchQueue.main.asyncAfter(deadline: .now() + 20) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
[weak self] in [weak self] in
self?.loadSwitchInterstitialAd { status in self?.loadSwitchInterstitialAd { status in
if status { if status {
@ -160,7 +160,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
interstitialSwitch = false interstitialSwitch = false
//广 //广
DispatchQueue.main.asyncAfter(deadline: .now() + 20) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
[weak self] in [weak self] in
self?.loadLoadInterstitialAd { status in self?.loadLoadInterstitialAd { status in
if status { if status {
@ -182,7 +182,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
interstitialSwitch = false interstitialSwitch = false
//广 //广
DispatchQueue.main.asyncAfter(deadline: .now() + 20) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
[weak self] in [weak self] in
self?.loadLibraryInterstitialAd { status in self?.loadLibraryInterstitialAd { status in
if status { if status {
@ -204,7 +204,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
interstitialSwitch = false interstitialSwitch = false
//广 //广
DispatchQueue.main.asyncAfter(deadline: .now() + 20) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
[weak self] in [weak self] in
self?.loadGlobalInterstitialAd { status in self?.loadGlobalInterstitialAd { status in
if status { if status {
@ -268,14 +268,14 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
print("搜索插页广告加载失败") print("搜索插页广告加载失败")
} }
} }
self.loadSwitchInterstitialAd { status in loadSwitchInterstitialAd { status in
if status { if status {
print("成功加载切歌插页广告") print("成功加载切歌插页广告")
}else { }else {
print("切歌插页广告加载失败") print("切歌插页广告加载失败")
} }
} }
self.loadLibraryInterstitialAd { status in loadLibraryInterstitialAd { status in
if status { if status {
print("成功加载曲库插页广告") print("成功加载曲库插页广告")
}else { }else {
@ -283,14 +283,14 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
} }
} }
self.loadGlobalInterstitialAd { status in loadGlobalInterstitialAd { status in
if status { if status {
print("成功加载全局插页广告") print("成功加载全局插页广告")
}else { }else {
print("全局插页广告加载失败") print("全局插页广告加载失败")
} }
} }
self.loadLoadInterstitialAd { status in loadLoadInterstitialAd { status in
if status { if status {
print("成功加载下载插页广告") print("成功加载下载插页广告")
}else { }else {
@ -358,32 +358,48 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
///广 ///广
func loadOpenAd(_ type:OpenType, level:Int = 0, completion: @escaping (Bool) -> Void) { func loadOpenAd(_ type:OpenType, level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
//id
var item:MPPositive_AdModelModel
switch type {
case .ICE:
guard level <= (OpenICEID.count-1) else {
print("冷启动广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.cold_ads_showFailureAction("No Ads Fill")
completion(false)
return
}
item = OpenICEID[level]
case .HOST:
guard level <= (OpenHOSTID.count-1) else {
print("热启动广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.hot_ads_showFailureAction("No Ads Fill")
completion(false)
return
}
item = OpenHOSTID[level]
}
// 广广 // 广广
if isLoadingOpenAd || isOpenAdAvailable() { if isLoadingOpenAd || isOpenAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
//id
var item:MPPositive_AdModelModel
switch type {
case .ICE:
guard OpenICEID.isEmpty == false else {
//
MP_AnalyticsManager.shared.cold_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (OpenICEID.count) else {
print("冷启动广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.cold_ads_loadFailureAction("No Ads Fill")
completion(false)
return
}
item = OpenICEID[level]
case .HOST:
guard OpenHOSTID.isEmpty == false else {
//
MP_AnalyticsManager.shared.hot_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (OpenHOSTID.count) else {
print("热启动广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.hot_ads_loadFailureAction("No Ads Fill")
completion(false)
return
}
item = OpenHOSTID[level]
}
isLoadingOpenAd = true isLoadingOpenAd = true
//广 //广
if item.type == .Open { if item.type == .Open {
@ -394,6 +410,12 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载开屏广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载开屏广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
switch type {
case .ICE:
MP_AnalyticsManager.shared.cold_ads_loadFailureAction(error.localizedDescription)
case .HOST:
MP_AnalyticsManager.shared.hot_ads_loadFailureAction(error.localizedDescription)
}
self.isLoadingOpenAd = false self.isLoadingOpenAd = false
loadOpenAd(type, level: level+1, completion: completion) loadOpenAd(type, level: level+1, completion: completion)
} else { } else {
@ -414,6 +436,12 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载开屏广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载开屏广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
switch type {
case .ICE:
MP_AnalyticsManager.shared.cold_ads_loadFailureAction(error.localizedDescription)
case .HOST:
MP_AnalyticsManager.shared.hot_ads_loadFailureAction(error.localizedDescription)
}
self.isLoadingOpenAd = false self.isLoadingOpenAd = false
loadOpenAd(type, level: level+1, completion: completion) loadOpenAd(type, level: level+1, completion: completion)
} else { } else {
@ -612,21 +640,28 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
func loadSearchInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { func loadSearchInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
guard level <= (SearchINSERTID.count-1) else {
print("搜索插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.search_ads_showFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
// 广广 // 广广
if isLoadingSearchInterstitialAd || isSearchInterstitialAdAvailable() { if isLoadingSearchInterstitialAd || isSearchInterstitialAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
guard SearchINSERTID.isEmpty == false else {
MP_AnalyticsManager.shared.search_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (SearchINSERTID.count) else {
print("搜索插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.search_ads_loadFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
isLoadingSearchInterstitialAd = true isLoadingSearchInterstitialAd = true
let item = SearchINSERTID[level] let item = SearchINSERTID[level]
//广 //广
@ -635,6 +670,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载搜索插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载搜索插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
MP_AnalyticsManager.shared.search_ads_loadFailureAction(error.localizedDescription)
self.isLoadingSearchInterstitialAd = false self.isLoadingSearchInterstitialAd = false
loadSearchInterstitialAd(level+1, completion: completion) loadSearchInterstitialAd(level+1, completion: completion)
} else { } else {
@ -718,21 +754,29 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
func loadPlayInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { func loadPlayInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
guard level <= (PlayerINSERTID.count-1) else {
print("播放插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.play_ads_showFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
// 广广 // 广广
if isLoadingPlayInterstitialAd || isPlayInterstitialAdAvailable() { if isLoadingPlayInterstitialAd || isPlayInterstitialAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
guard PlayerINSERTID.isEmpty == false else {
MP_AnalyticsManager.shared.play_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (PlayerINSERTID.count) else {
print("播放插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.play_ads_loadFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
isLoadingPlayInterstitialAd = true isLoadingPlayInterstitialAd = true
let item = PlayerINSERTID[level] let item = PlayerINSERTID[level]
//广 //广
@ -741,6 +785,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载播放插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载播放插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
MP_AnalyticsManager.shared.play_ads_loadFailureAction(error.localizedDescription)
self.isLoadingPlayInterstitialAd = false self.isLoadingPlayInterstitialAd = false
loadPlayInterstitialAd(level+1, completion: completion) loadPlayInterstitialAd(level+1, completion: completion)
} else { } else {
@ -825,21 +870,28 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
func loadSwitchInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { func loadSwitchInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
guard level <= (SwitchINSERTID.count-1) else {
print("切歌插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.cut_ads_showFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
// 广广 // 广广
if isLoadingSwitchInterstitialAd || isSwitchInterstitialAdAvailable() { if isLoadingSwitchInterstitialAd || isSwitchInterstitialAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
guard SwitchINSERTID.isEmpty == false else {
MP_AnalyticsManager.shared.cut_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (SwitchINSERTID.count) else {
print("切歌插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.cut_ads_loadFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
isLoadingSwitchInterstitialAd = true isLoadingSwitchInterstitialAd = true
let item = SwitchINSERTID[level] let item = SwitchINSERTID[level]
//广 //广
@ -848,6 +900,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载切歌插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载切歌插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
MP_AnalyticsManager.shared.cut_ads_loadFailureAction(error.localizedDescription)
self.isLoadingSwitchInterstitialAd = false self.isLoadingSwitchInterstitialAd = false
loadSwitchInterstitialAd(level+1, completion: completion) loadSwitchInterstitialAd(level+1, completion: completion)
} else { } else {
@ -931,21 +984,28 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
func loadLoadInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { func loadLoadInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
guard level <= (LoadINSERTID.count-1) else {
print("下载插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.dl_ads_showFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
// 广广 // 广广
if isLoadingLoadInterstitialAd || isLoadInterstitialAdAvailable() { if isLoadingLoadInterstitialAd || isLoadInterstitialAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
guard LoadINSERTID.isEmpty == false else {
MP_AnalyticsManager.shared.dl_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (LoadINSERTID.count) else {
print("下载插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.dl_ads_loadFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
isLoadingLoadInterstitialAd = true isLoadingLoadInterstitialAd = true
let item = LoadINSERTID[level] let item = LoadINSERTID[level]
//广 //广
@ -954,6 +1014,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载下载插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载下载插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
MP_AnalyticsManager.shared.dl_ads_loadFailureAction(error.localizedDescription)
self.isLoadingLoadInterstitialAd = false self.isLoadingLoadInterstitialAd = false
loadLoadInterstitialAd(level+1, completion: completion) loadLoadInterstitialAd(level+1, completion: completion)
} else { } else {
@ -1162,21 +1223,28 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
func loadLibraryInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { func loadLibraryInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
guard level <= (LibraryINSERTID.count-1) else {
print("曲库插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.listclk_ads_showFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
// 广广 // 广广
if isLoadingLibraryInterstitialAd || isLibraryInterstitialAdAvailable() { if isLoadingLibraryInterstitialAd || isLibraryInterstitialAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
guard LibraryINSERTID.isEmpty == false else {
MP_AnalyticsManager.shared.listclk_ads_showFailureAction("No IDs")
//
reloadAdMobIDs()
completion(false)
return
}
guard level < (LibraryINSERTID.count) else {
print("曲库插页广告组已经全部加载失败,停止继续加载")
MP_AnalyticsManager.shared.listclk_ads_loadFailureAction("No Ads Fill")
//
loadGlobalInterstitialAd { status in
completion(status)
}
return
}
isLoadingLibraryInterstitialAd = true isLoadingLibraryInterstitialAd = true
let item = LibraryINSERTID[level] let item = LibraryINSERTID[level]
//广 //广
@ -1185,6 +1253,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
guard let self = self else { return } guard let self = self else { return }
if let error = error { if let error = error {
print("加载曲库插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载") print("加载曲库插页广告失败,失败原因: \(error.localizedDescription)已下调广告ID等级重新加载")
MP_AnalyticsManager.shared.listclk_ads_loadFailureAction(error.localizedDescription)
self.isLoadingLibraryInterstitialAd = false self.isLoadingLibraryInterstitialAd = false
loadLibraryInterstitialAd(level+1, completion: completion) loadLibraryInterstitialAd(level+1, completion: completion)
} else { } else {
@ -1271,17 +1340,17 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont
//广 //广
func loadGlobalInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { func loadGlobalInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) {
guard openAdStatus else {return} guard openAdStatus else {return}
guard level <= (GlobalINSERTID.count-1) else {
print("全局插页广告组已经全部加载失败,停止继续加载")
completion(false)
return
}
// 广广 // 广广
if isLoadingGlobalInterstitialAd || isGlobalInterstitialAdAvailable() { if isLoadingGlobalInterstitialAd || isGlobalInterstitialAdAvailable() {
// 广广 // 广广
completion(false) completion(false)
return return
} }
guard level < (GlobalINSERTID.count) else {
print("全局插页广告组已经全部加载失败,停止继续加载")
completion(false)
return
}
isLoadingGlobalInterstitialAd = true isLoadingGlobalInterstitialAd = true
let item = GlobalINSERTID[level] let item = GlobalINSERTID[level]
//广 //广

View File

@ -135,13 +135,13 @@ class MP_AnalyticsManager: NSObject {
} }
} }
//arrayjsonData //arrayjsonData
if array.isEmpty != true, let data = coreAdModelforJson(array) { if array.isEmpty == false, let data = coreAdModelforJson(array) {
UserDefaults.standard.removeObject(forKey: key)
//
print("Reload--\(key)")
UserDefaults.standard.set(data, forKey: key) UserDefaults.standard.set(data, forKey: key)
}else {
UserDefaults.standard.set(nil, forKey: key)
} }
} }
print("更新了所有广告ID")
MP_AdMobManager.shared.reloadAdMobIDs() MP_AdMobManager.shared.reloadAdMobIDs()
} }
// //
@ -424,6 +424,8 @@ class MP_AnalyticsManager: NSObject {
//MARK: - 广 //MARK: - 广
// //
private let cold_ads_chance:String = "cold_ads_chance" private let cold_ads_chance:String = "cold_ads_chance"
//
private let cold_ads_loadFailure:String = "cold_ads_loadFailure"
// //
private let cold_ads_showSuccess:String = "cold_ads_showSuccess" private let cold_ads_showSuccess:String = "cold_ads_showSuccess"
// //
@ -431,6 +433,8 @@ class MP_AnalyticsManager: NSObject {
// //
private let hot_ads_chance:String = "hot_ads_chance" private let hot_ads_chance:String = "hot_ads_chance"
//
private let hot_ads_loadFailure:String = "hot_ads_loadFailure"
// //
private let hot_ads_showSuccess:String = "hot_ads_showSuccess" private let hot_ads_showSuccess:String = "hot_ads_showSuccess"
// //
@ -438,6 +442,8 @@ class MP_AnalyticsManager: NSObject {
// //
private let search_ads_chance:String = "search_ads_chance" private let search_ads_chance:String = "search_ads_chance"
//
private let search_ads_loadFailure:String = "search_ads_loadFailure"
// //
private let search_ads_showSuccess:String = "search_ads_showSuccess" private let search_ads_showSuccess:String = "search_ads_showSuccess"
// //
@ -450,6 +456,8 @@ class MP_AnalyticsManager: NSObject {
// //
private let play_ads_chance:String = "play_ads_chance" private let play_ads_chance:String = "play_ads_chance"
//
private let play_ads_loadFailure:String = "play_ads_loadFailure"
// //
private let play_ads_showSuccess:String = "play_ads_showSuccess" private let play_ads_showSuccess:String = "play_ads_showSuccess"
// //
@ -457,6 +465,8 @@ class MP_AnalyticsManager: NSObject {
// //
private let dl_ads_chance:String = "dl_ads_chance" private let dl_ads_chance:String = "dl_ads_chance"
//
private let dl_ads_loadFailure:String = "dl_ads_loadFailure"
// //
private let dl_ads_showSuccess:String = "dl_ads_showSuccess" private let dl_ads_showSuccess:String = "dl_ads_showSuccess"
// //
@ -464,6 +474,8 @@ class MP_AnalyticsManager: NSObject {
// //
private let cut_ads_chance:String = "cut_ads_chance" private let cut_ads_chance:String = "cut_ads_chance"
//
private let cut_ads_loadFailure:String = "cut_ads_loadFailure"
// //
private let cut_ads_showSuccess:String = "cut_ads_showSuccess" private let cut_ads_showSuccess:String = "cut_ads_showSuccess"
// //
@ -471,6 +483,8 @@ class MP_AnalyticsManager: NSObject {
// //
private let listclk_ads_chance:String = "listclk_ads_chance" private let listclk_ads_chance:String = "listclk_ads_chance"
//
private let listclk_ads_loadFailure:String = "listclk_ads_loadFailure"
// //
private let listclk_ads_showSuccess:String = "listclk_ads_showSuccess" private let listclk_ads_showSuccess:String = "listclk_ads_showSuccess"
// //
@ -485,6 +499,7 @@ class MP_AnalyticsManager: NSObject {
private let list_ads_chance:String = "list_ads_chance" private let list_ads_chance:String = "list_ads_chance"
// //
private let list_ads_show:String = "list_ads_show" private let list_ads_show:String = "list_ads_show"
// //
private let ad_session_total_value:String = "ad_session_total_value" private let ad_session_total_value:String = "ad_session_total_value"
@ -533,6 +548,12 @@ class MP_AnalyticsManager: NSObject {
func cold_ads_chanceAction() { func cold_ads_chanceAction() {
Analytics.logEvent(cold_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(cold_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func cold_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(cold_ads_loadFailure, parameters: parameters)
}
/// ///
func cold_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func cold_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
@ -551,6 +572,12 @@ class MP_AnalyticsManager: NSObject {
func hot_ads_chanceAction() { func hot_ads_chanceAction() {
Analytics.logEvent(hot_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(hot_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func hot_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(hot_ads_loadFailure, parameters: parameters)
}
/// ///
func hot_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func hot_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
@ -569,6 +596,12 @@ class MP_AnalyticsManager: NSObject {
func search_ads_chanceAction() { func search_ads_chanceAction() {
Analytics.logEvent(search_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(search_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func search_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(search_ads_loadFailure, parameters: parameters)
}
/// ///
func search_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func search_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
@ -598,6 +631,12 @@ class MP_AnalyticsManager: NSObject {
func play_ads_chanceAction() { func play_ads_chanceAction() {
Analytics.logEvent(play_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(play_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func play_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(play_ads_loadFailure, parameters: parameters)
}
/// ///
func play_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func play_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
@ -616,6 +655,12 @@ class MP_AnalyticsManager: NSObject {
func dl_ads_chanceAction() { func dl_ads_chanceAction() {
Analytics.logEvent(dl_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(dl_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func dl_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(dl_ads_loadFailure, parameters: parameters)
}
/// ///
func dl_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func dl_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
@ -634,6 +679,12 @@ class MP_AnalyticsManager: NSObject {
func cut_ads_chanceAction() { func cut_ads_chanceAction() {
Analytics.logEvent(cut_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(cut_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func cut_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(cut_ads_loadFailure, parameters: parameters)
}
/// ///
func cut_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func cut_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
@ -652,6 +703,12 @@ class MP_AnalyticsManager: NSObject {
func listclk_ads_chanceAction() { func listclk_ads_chanceAction() {
Analytics.logEvent(listclk_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"]) Analytics.logEvent(listclk_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
} }
///
func listclk_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(listclk_ads_loadFailure, parameters: parameters)
}
/// ///
func listclk_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) { func listclk_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue) let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)

View File

@ -995,68 +995,8 @@ extension MP_NetWorkManager {
} }
} }
private func requestAndroidPostPlayer(_ url:URL, videoId:String, parameters:Parameters, completion:@escaping((([String],[Int],[String])?, [String]?) -> Void)) { private func requestAndroidPostPlayer(_ url:URL, videoId:String, parameters:Parameters, completion:@escaping((([String],[Int],[String])?, [String]?) -> Void)) {
// Headers
let headers: HTTPHeaders = [
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Content-Type": "application/json",
"Origin": "https://music.youtube.com",
"Referer": "https://music.youtube.com/watch?v=\(videoId)",
"User-Agent": "com.google.android.apps.youtube.music/5.28.1 (Linux; U; Android 11) gzip",
"X-Goog-Visitor-Id": visitorData ?? "",
"X-Youtube-Bootstrap-Logged-In": "false",
"X-Youtube-Client-Name": "67",
"X-Youtube-Client-Version": clientVersion ?? ""
]
// Cookies
let cookies: [HTTPCookie] = [
HTTPCookie(properties: [
.domain: "music.youtube.com",
.path: "/",
.name: "YSC",
.value: "8oDrKFv_xIg",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!,
HTTPCookie(properties: [
.domain: "music.youtube.com",
.path: "/",
.name: "VISITOR_INFO1_LIVE",
.value: "kBFGqoTUcHk",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!,
HTTPCookie(properties: [
.domain: "music.youtube.com",
.path: "/",
.name: "VISITOR_PRIVACY_METADATA",
.value: "CgJTRxIEGgAgIQ%3D%3D",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!,
HTTPCookie(properties: [
.domain: "music.youtube.com",
.path: "/",
.name: "_gcl_au",
.value: "1.1.1865031595.1721989780",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!,
HTTPCookie(properties: [
.domain: "music.youtube.com",
.path: "/",
.name: "PREF",
.value: "repeat=NONE&autoplay=true",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!
]
// HTTPCookieStorage Cookies
let cookieStorage = HTTPCookieStorage.shared
cookies.forEach { cookieStorage.setCookie($0) }
//post //post
let request = PlayerSeesion.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseDecodable(of: JsonAndroidPlayer.self) { [weak self] (response) in let request = PlayerSeesion.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseDecodable(of: JsonAndroidPlayer.self) { [weak self] (response) in
guard let self = self else {return} guard let self = self else {return}
self.playerRequests[videoId] = nil // self.playerRequests[videoId] = nil //
switch response.result { switch response.result {

View File

@ -309,32 +309,32 @@ class MP_PlayerManager:NSObject{
if startAction != nil { if startAction != nil {
startActionBlock = startAction startActionBlock = startAction
} }
//playerItem if let currentVideo = loadPlayer?.currentVideo {
player.replaceCurrentItem(with: loadPlayer?.currentVideo?.resourcePlayerItem) //playerItem
if center == nil { player.replaceCurrentItem(with: currentVideo.resourcePlayerItem)
setCommandCenter() if center == nil {
} setCommandCenter()
// }
startTimer() //
//PlayerItem startTimer()
if loadPlayer?.currentVideo?.isKVO == false { //PlayerItem
// if currentVideo.isKVO == false {
statusObservation?.invalidate() //
statusObservation = loadPlayer?.currentVideo?.resourcePlayerItem?.observe(\.status, options: [.old,.new], changeHandler: { [weak self] item, change in statusObservation?.invalidate()
guard let self = self else {return} statusObservation = currentVideo.resourcePlayerItem?.observe(\.status, options: [.old,.new], changeHandler: { [weak self] item, change in
if item.status == .readyToPlay { guard let self = self else {return}
// if item.status == .readyToPlay {
if playState != .Playing { //
//statuVlaueplayerItem if playState != .Playing {
print("当前音乐-\(loadPlayer?.currentVideo?.title ?? "") 已经准备好播放") //statuVlaueplayerItem
} print("当前音乐-\(currentVideo.title ?? "") 已经准备好播放")
}else { }
if let currentVideo = loadPlayer?.currentVideo { }else {
print("当前音乐-\(currentVideo.title ?? "") 未做好准备播放,失败原因是\(currentVideo.resourcePlayerItem.error?.localizedDescription ?? "")") print("当前音乐-\(currentVideo.title ?? "") 未做好准备播放,失败原因是\(currentVideo.resourcePlayerItem?.error?.localizedDescription ?? "")")
MP_AnalyticsManager.shared.player_b_failure_errorAction(currentVideo.song.videoId ?? "", videoname: currentVideo.title ?? "", artistname: currentVideo.song.shortBylineText ?? "", error: currentVideo.resourcePlayerItem.error?.localizedDescription ?? "Failed to buffer data") MP_AnalyticsManager.shared.player_b_failure_errorAction(currentVideo.song.videoId ?? "", videoname: currentVideo.title ?? "", artistname: currentVideo.song.shortBylineText ?? "", error: currentVideo.resourcePlayerItem?.error?.localizedDescription ?? "Failed to buffer data")
if loadPlayer?.currentVideo?.isKVO == true { if currentVideo.isKVO == true {
suspendTimer() suspendTimer()
loadPlayer?.currentVideo?.isKVO = false currentVideo.isKVO = false
statusObservation?.invalidate() statusObservation?.invalidate()
loadedTimeRangesObservation?.invalidate() loadedTimeRangesObservation?.invalidate()
playbackLikelyToKeepUpObservation?.invalidate() playbackLikelyToKeepUpObservation?.invalidate()
@ -346,63 +346,63 @@ class MP_PlayerManager:NSObject{
} }
} }
} }
} })
}) //
// loadedTimeRangesObservation?.invalidate()
loadedTimeRangesObservation?.invalidate() loadedTimeRangesObservation = currentVideo.resourcePlayerItem?.observe(\.loadedTimeRanges, options: [.old,.new], changeHandler: { [weak self] item, change in
loadedTimeRangesObservation = loadPlayer?.currentVideo?.resourcePlayerItem?.observe(\.loadedTimeRanges, options: [.old,.new], changeHandler: { [weak self] item, change in guard let self = self else {return}
guard let self = self else {return} cacheLoadTimes()
cacheLoadTimes() })
}) //
// playbackLikelyToKeepUpObservation?.invalidate()
playbackLikelyToKeepUpObservation?.invalidate() playbackLikelyToKeepUpObservation = currentVideo.resourcePlayerItem?.observe(\.isPlaybackLikelyToKeepUp, options: [.old,.new], changeHandler: { [weak self] item, change in
playbackLikelyToKeepUpObservation = loadPlayer?.currentVideo?.resourcePlayerItem?.observe(\.isPlaybackLikelyToKeepUp, options: [.old,.new], changeHandler: { [weak self] item, change in guard let self = self else {return}
guard let self = self else {return} if let playbackLikelyToKeepUp = change.newValue, playbackLikelyToKeepUp == true {
if let playbackLikelyToKeepUp = change.newValue, playbackLikelyToKeepUp == true { if playState != .Playing && playState != .Pause {
if playState != .Playing && playState != .Pause { //
// playState = .Playing
playState = .Playing //广
//广 if isAdLate != true {
if isAdLate != true { //
// if isLast {
if isLast { pause()
pause() isLast = false
isLast = false }else {
}else { player.play()
player.play() }
}
//
suspendTimer()
if let currentVideo = loadPlayer?.currentVideo {
MP_AnalyticsManager.shared.player_b_success_actionAction(currentVideo.song.videoId ?? "", videoname: currentVideo.title ?? "", artistname: currentVideo.song.shortBylineText ?? "")
}
//
if startActionBlock != nil {
startActionBlock!()
} }
}
//
suspendTimer()
if let currentVideo = loadPlayer.currentVideo {
MP_AnalyticsManager.shared.player_b_success_actionAction(currentVideo.song.videoId ?? "", videoname: currentVideo.title ?? "", artistname: currentVideo.song.shortBylineText ?? "")
} }
// }else {
if startActionBlock != nil { //
startActionBlock!() player.pause()
} playState = .Null
} }
}else { })
// //
player.pause() errorObservation?.invalidate()
playState = .Null errorObservation = currentVideo.resourcePlayerItem?.observe(\.error, options: [.old,.new], changeHandler: { [weak self] item, change in
} guard let self = self else {return}
}) if let error = change.newValue, let nsError = error {
// print("当前音乐-\(currentVideo.title ?? "") 未做好准备播放,失败原因是\(nsError.localizedDescription)")
errorObservation?.invalidate() MP_AnalyticsManager.shared.player_b_failure_errorAction(currentVideo.song.videoId ?? "", videoname: currentVideo.title ?? "", artistname: currentVideo.song.shortBylineText ?? "", error: nsError.localizedDescription)
errorObservation = loadPlayer?.currentVideo?.resourcePlayerItem?.observe(\.error, options: [.old,.new], changeHandler: { [weak self] item, change in }
guard let self = self else {return} })
if let error = change.newValue, let nsError = error { currentVideo.isKVO = true
print("当前音乐-\(loadPlayer?.currentVideo?.title ?? "") 未做好准备播放,失败原因是\(nsError.localizedDescription)") //0
MP_AnalyticsManager.shared.player_b_failure_errorAction(loadPlayer?.currentVideo?.song.videoId ?? "", videoname: loadPlayer?.currentVideo?.title ?? "", artistname: loadPlayer?.currentVideo?.song.shortBylineText ?? "", error: nsError.localizedDescription) player.seek(to: .zero)
} updateNowPlayingInfo()
}) }
loadPlayer?.currentVideo?.isKVO = true
//0
player.seek(to: .zero)
updateNowPlayingInfo()
} }
} }
/// ///

View File

@ -13,7 +13,7 @@ class MPPositive_SongViewModel: NSObject {
/// ///
var index:Int! var index:Int!
/// ///
@objc dynamic var resourcePlayerItem:MP_AVPlayerItem! @objc dynamic var resourcePlayerItem:MP_AVPlayerItem?
/// ///
var resourcePlayerAsset:MP_AVURLAsset! var resourcePlayerAsset:MP_AVURLAsset!
/// ///

View File

@ -188,9 +188,13 @@ class MPPositive_SearchViewController: MPPositive_BaseViewController {
extension MPPositive_SearchViewController: UICollectionViewDataSource, UICollectionViewDelegate, MPPositive_TagLayoutDelegate { extension MPPositive_SearchViewController: UICollectionViewDataSource, UICollectionViewDelegate, MPPositive_TagLayoutDelegate {
func waterFlowLayout(_ layout: MPPositive_TagFlowLayout, indexPath: IndexPath) -> CGFloat { func waterFlowLayout(_ layout: MPPositive_TagFlowLayout, indexPath: IndexPath) -> CGFloat {
let text = historys[indexPath.row].text ?? "" if indexPath.row < historys.count {
let textWidth = text.textAutoWidth(height: 11.5 * width, font: .systemFont(ofSize: 12 * width, weight: .medium)) + (43 * width) let text = historys[indexPath.row].text ?? ""
return textWidth let textWidth = text.textAutoWidth(height: 11.5 * width, font: .systemFont(ofSize: 12 * width, weight: .medium)) + (43 * width)
return textWidth
}else {
return 0
}
} }
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
@ -273,8 +277,9 @@ class MPPositive_TagFlowLayout: UICollectionViewFlowLayout {
let array = super.layoutAttributesForElements(in: rect) let array = super.layoutAttributesForElements(in: rect)
var mutArray = [UICollectionViewLayoutAttributes]() var mutArray = [UICollectionViewLayoutAttributes]()
array?.forEach({ (attrs) in array?.forEach({ (attrs) in
let theAttrs = layoutAttributesForItem(at: attrs.indexPath) if let theAttrs = layoutAttributesForItem(at: attrs.indexPath) {
mutArray.append(theAttrs!) mutArray.append(theAttrs)
}
}) })
layoutAttributeds = mutArray layoutAttributeds = mutArray
return mutArray return mutArray