diff --git a/relax.offline.mp3.music.xcodeproj/project.pbxproj b/relax.offline.mp3.music.xcodeproj/project.pbxproj index b15efef..eead32b 100644 --- a/relax.offline.mp3.music.xcodeproj/project.pbxproj +++ b/relax.offline.mp3.music.xcodeproj/project.pbxproj @@ -1923,7 +1923,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1.2.1.1; + CURRENT_PROJECT_VERSION = 1.2.2.1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = RAQJ4FNZUH; @@ -1944,7 +1944,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.2.2; PRODUCT_BUNDLE_IDENTIFIER = relax.offline.mp3.music; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1969,7 +1969,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1.2.1.1; + CURRENT_PROJECT_VERSION = 1.2.2.1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = RAQJ4FNZUH; @@ -1990,7 +1990,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.2.2; PRODUCT_BUNDLE_IDENTIFIER = relax.offline.mp3.music; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/relax.offline.mp3.music.xcworkspace/xcuserdata/zhou.xcuserdatad/UserInterfaceState.xcuserstate b/relax.offline.mp3.music.xcworkspace/xcuserdata/zhou.xcuserdatad/UserInterfaceState.xcuserstate index 7ef293a..e3902de 100644 Binary files a/relax.offline.mp3.music.xcworkspace/xcuserdata/zhou.xcuserdatad/UserInterfaceState.xcuserstate and b/relax.offline.mp3.music.xcworkspace/xcuserdata/zhou.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/relax.offline.mp3.music/AppDelegate.swift b/relax.offline.mp3.music/AppDelegate.swift index 6d97d9e..ff440f0 100644 --- a/relax.offline.mp3.music/AppDelegate.swift +++ b/relax.offline.mp3.music/AppDelegate.swift @@ -102,17 +102,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { print("Failed to set type:\(error.localizedDescription)") } } - //停止播放器会话 + ///停止播放器会话 func setAudioStop() { -// //设置会话 -// let session = AVAudioSession.sharedInstance() -// do { -// //中止会话 -// try session.setActive(false) -// print("中止会话") -// } catch { -// print("Failed to set type:\(error.localizedDescription)") -// } + //设置会话 + let session = AVAudioSession.sharedInstance() + do { + //中止会话 + try session.setActive(false) + print("中止会话") + } catch { + print("Failed to set type:\(error.localizedDescription)") + } + } + ///激活播放器会话 + func setAudioActive() { + //设置会话 + let session = AVAudioSession.sharedInstance() + do { + //中止会话 + try session.setCategory(.playAndRecord, mode: .default, options: [ .allowAirPlay, .allowBluetoothA2DP,.defaultToSpeaker]) + try session.setActive(true) + print("恢复会话") + } catch { + print("Failed to set type:\(error.localizedDescription)") + } } //活跃天数计算 private func ActiveDaysCalculation() { @@ -178,6 +191,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationDidEnterBackground(_ application: UIApplication) { //更新当前后台时间节点 backgroundEntryTime = Date() + //保持会话激活 + setAudioActive() } //将要进入前台 diff --git a/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift b/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift index e99a362..b1bb7ea 100644 --- a/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift +++ b/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift @@ -90,7 +90,8 @@ var isUpDateReminder:Bool = false{ } } } - +///UUID +public let app_UUID = UIDevice.current.identifierForVendor?.uuidString ?? UUID().uuidString //MARK: - 全局变量与方法 //存储默认配置值 func coreDefaultValues() { diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_ADSimpleManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_ADSimpleManager.swift index c579c3e..b7cb8ad 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_ADSimpleManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_ADSimpleManager.swift @@ -85,6 +85,27 @@ class MP_ADSimpleManager: NSObject { deinit{ NotificationCenter.default.removeObserver(self) } + ///调整广告静音声音 + func isAdMuted() { + DispatchQueue.main.async { + if MP_PlayerManager.shared.getPlayState() == .Playing { + GADMobileAds.sharedInstance().audioVideoManager.audioSessionIsApplicationManaged = true + GADMobileAds.sharedInstance().applicationMuted = true + }else { + GADMobileAds.sharedInstance().audioVideoManager.audioSessionIsApplicationManaged = false + GADMobileAds.sharedInstance().applicationMuted = false + } + } + } + ///调整广告恢复声音 + func isAdSounded() { + DispatchQueue.main.async { + if GADMobileAds.sharedInstance().applicationMuted == true { + GADMobileAds.sharedInstance().audioVideoManager.audioSessionIsApplicationManaged = false + GADMobileAds.sharedInstance().applicationMuted = false + } + } + } //启动广告初始化 func start() { MP_AdMobManager.shared.start() @@ -118,6 +139,7 @@ class MP_ADSimpleManager: NSObject { guard openAdStatus, internalAdStatus else { return } + isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showOpenAdIfAvailable {[weak self] ad in @@ -141,6 +163,7 @@ class MP_ADSimpleManager: NSObject { ///展示搜索广告 func showSearchInterstitialAdIfAvailable(completion:((AnyObject, Bool) -> Void)?) { guard openAdStatus, internalAdStatus else {return} + isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showSearchInterstitialAdIfAvailable { ad in @@ -165,6 +188,7 @@ class MP_ADSimpleManager: NSObject { completion?(nil, false) return } + isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showPlayInterstitialAdIfAvailable { ad in @@ -186,6 +210,7 @@ class MP_ADSimpleManager: NSObject { ///展示曲库广告 func showLibraryInterstitialAdIfAvailable(completion:((AnyObject) -> Void)?) { guard openAdStatus, internalAdStatus else {return} + isAdMuted() if platform { if let block = completion { MP_AppLovinManager.shared.showLibraryInterstitialAdIfAvailable { ad in diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift index a6b36ce..32b95c6 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift @@ -106,7 +106,6 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont super.init() NotificationCenter.notificationKey.add(observer: self, selector: #selector(netWorkReachableAction(_:)), notificationName: .net_switch_reachable) GADMobileAds.sharedInstance().audioVideoManager.delegate = self - GADMobileAds.sharedInstance().audioVideoManager.audioSessionIsApplicationManaged = true // GADMobileAds.sharedInstance().audioVideoManager. reloadAdMobIDs() @@ -471,7 +470,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } isLoadingOpenAd = true let request = GADRequest() - + MP_ADSimpleManager.shared.isAdSounded() //判断需要生成什么广告 if item.type == .Open { //生成开屏广告 @@ -678,6 +677,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont ///将加载的搜索原生广告添加到页面中 func layoutSearchNativeAd(in containerView: UIView) { guard openAdStatus, internalAdStatus else {return} + MP_ADSimpleManager.shared.isAdMuted() containerView.subviews.forEach { item in item.removeFromSuperview() } @@ -754,6 +754,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont isLoadingSearchInterstitialAd = true let item = SearchINSERTID[level] let request = GADRequest() + MP_ADSimpleManager.shared.isAdSounded() //加载搜索插页广告 GADInterstitialAd.load(withAdUnitID: item.identifier, request: request) { ad, error in DispatchQueue.main.async { [weak self] in @@ -871,6 +872,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont isLoadingPlayInterstitialAd = true let item = PlayerINSERTID[level] let request = GADRequest() + MP_ADSimpleManager.shared.isAdSounded() //加载播放插页广告 GADInterstitialAd.load(withAdUnitID: item.identifier, request: request) { ad, error in DispatchQueue.main.async { [weak self] in @@ -1252,6 +1254,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont ///将加载的曲库原生广告添加到页面中 func layoutLibraryNativeAd(in containerView: UIView, index:Int, completion:(() -> Void)? = nil) { guard openAdStatus, internalAdStatus else {return} + MP_ADSimpleManager.shared.isAdMuted() containerView.subviews.forEach { item in item.removeFromSuperview() } @@ -1365,6 +1368,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont isLoadingLibraryInterstitialAd = true let item = LibraryINSERTID[level] let request = GADRequest() + MP_ADSimpleManager.shared.isAdSounded() //加载曲库插页广告 GADInterstitialAd.load(withAdUnitID: item.identifier, request: request) { ad, error in DispatchQueue.main.async { [weak self] in @@ -1548,12 +1552,12 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } //广告将要播放音频 func audioVideoManagerWillPlayAudio(_ audioVideoManager: GADAudioVideoManager) { - accessAppdelegate.setAudioResume() + accessAppdelegate.setAudioActive() } //广告停止播放音频 func audioVideoManagerDidStopPlayingAudio(_ audioVideoManager: GADAudioVideoManager) { DispatchQueue.main.asyncAfter(deadline: .now()+0.1) { - accessAppdelegate.setAudioResume() + accessAppdelegate.setAudioActive() } } //MARK: - 覆盖型广告代理 GADFullScreenContentDelegate diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AppLovinManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AppLovinManager.swift index 2a21093..bd95607 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AppLovinManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AppLovinManager.swift @@ -193,12 +193,11 @@ class MP_AppLovinManager: NSObject { let initConfig = ALSdkInitializationConfiguration(sdkKey: SDKKey) { builder in builder.mediationProvider = ALMediationProviderMAX } - //AppLovin初始化 - ALSdk.shared().initialize(with: initConfig) { sdkConfig in - //开始加载AppLovin广告 - } //设置全部静音 ALSdk.shared().settings.isMuted = true + ALSdk.shared().settings.userIdentifier = app_UUID + //AppLovin初始化 + ALSdk.shared().initialize(with: initConfig) } ///更新广告ID func reloadAppLovinIDs() { diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift index 1061052..591874a 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift @@ -92,7 +92,7 @@ class MP_DownloadManager: NSObject { if url.scheme == "file" { print("用户对同一首歌删除又下载") //出现这种情况是用户在播放器界面移除了下载歌曲,又继续点了下载同一首歌,当前歌曲资源的并未刷新,提供的路径资源仍旧是下载后的本地资源,需要重新调用网络请求获取 - MP_NetWorkManager.shared.requestNextList("", videoId: videoId, clickTrackingParams: nil){ + MP_NetWorkManager.shared.requestNextList(song.playListID ?? "", videoId: videoId, clickTrackingParams: nil){ [weak self] listSongs in guard let self = self, let first = listSongs.first else { return diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_PlayerManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_PlayerManager.swift index 606bd99..bf22814 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_PlayerManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_PlayerManager.swift @@ -544,6 +544,7 @@ class MP_PlayerManager:NSObject{ //MARK: - 音乐播放结束 //当前音乐播放结束时 @objc private func playerDidFinishPlaying(_ sender:Notification) { + guard let item = sender.object as? MP_AVPlayerItem else {return} //检索播放器对象 guard playState == .Playing else { return @@ -584,7 +585,7 @@ class MP_PlayerManager:NSObject{ }else { //不为空,调整数据 if let item = results.first { - if (item.level ?? 0) < level { + if (item.level) < level { item.level = level } item.addTime = Date() diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift index 986a401..d3deb3d 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift @@ -93,7 +93,7 @@ class MPPositive_MoreSongOperationsViewController: UIViewController, UIViewContr guard let self = self else {return} // MP_HUD.loading() //发起网络请求补全数据 - MP_NetWorkManager.shared.requestNextList("", videoId: browseViewModel.browseItem.videoId ?? "", clickTrackingParams: browseViewModel.browseItem.clickTrackingParams) { [weak self] listSongs in + MP_NetWorkManager.shared.requestNextList(browseViewModel.browseItem.playListId ?? "", videoId: browseViewModel.browseItem.videoId ?? "", clickTrackingParams: browseViewModel.browseItem.clickTrackingParams) { [weak self] listSongs in guard let first = listSongs.first else {return} let group = DispatchGroup() group.enter() @@ -133,7 +133,7 @@ class MPPositive_MoreSongOperationsViewController: UIViewController, UIViewContr guard let self = self else {return} // MP_HUD.loading() //发起网络请求补全数据 - MP_NetWorkManager.shared.requestNextList("", videoId: searchResultItemViewModel.item.videoId ?? "", clickTrackingParams: searchResultItemViewModel.item.clickTrackingParams) { [weak self] listSongs in + MP_NetWorkManager.shared.requestNextList(searchResultItemViewModel.item.playListId ?? "", videoId: searchResultItemViewModel.item.videoId ?? "", clickTrackingParams: searchResultItemViewModel.item.clickTrackingParams) { [weak self] listSongs in guard let first = listSongs.first else {return} let group = DispatchGroup() group.enter() diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift index 8b485c6..68c695b 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift @@ -187,7 +187,7 @@ class MPPositive_OfflineSongsViewController: MPPositive_BaseViewController { } //刷新常态展示组 private func reloadShow() { - tableView.showMessage(offlines.count, title: "No Songs") +// tableView.showMessage(offlines.count, title: "No Songs") switch sortType { case 0://从新到旧 showSongs = offlines.sorted(by: { item1, item2 in diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift index 6ada4dc..e1ab8b3 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift @@ -245,7 +245,7 @@ class MPPositive_ArtistShowSongTableViewCell: UITableViewCell, PKDownloadButtonD return } //检索当前歌曲是否下载过 - guard let videoId = itemView.browseItem.videoId else { + guard let videoId = itemView?.browseItem.videoId else { return } //未下载 @@ -253,7 +253,7 @@ class MPPositive_ArtistShowSongTableViewCell: UITableViewCell, PKDownloadButtonD //切换为准备状态 downloadButton.state = .pending //通过网络请求获取当前预览项资源(转为Song) - MP_NetWorkManager.shared.requestNextList("", videoId: itemView.browseItem.videoId ?? "", clickTrackingParams: itemView.browseItem.clickTrackingParams){ + MP_NetWorkManager.shared.requestNextList(itemView?.browseItem.playListId ?? "", videoId: itemView?.browseItem.videoId ?? "", clickTrackingParams: itemView.browseItem.clickTrackingParams){ [weak self] listSongs in guard let self = self, let first = listSongs.first else { //获取资源失败 diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift index 0667db9..8bc5e03 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift @@ -237,14 +237,14 @@ class MPPositive_HomeSingleCollectionViewCell: UICollectionViewCell, PKDownloadB // return // } //检索当前歌曲是否下载过 - guard let videoId = itemViewModel.browseItem.videoId else { + guard let videoId = itemViewModel?.browseItem.videoId else { return } MP_ADSimpleManager.shared.showLibraryInterstitialAdIfAvailable(completion: nil) //切换为准备状态 downloadButton.state = .pending //通过网络请求获取当前预览项资源(转为Song) - MP_NetWorkManager.shared.requestNextList("", videoId: videoId, clickTrackingParams: nil){ + MP_NetWorkManager.shared.requestNextList(itemViewModel?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: nil){ [weak self] listSongs in guard let self = self, let first = listSongs.first else { //获取资源失败 diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift index f2517b3..8325b9a 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift @@ -270,14 +270,14 @@ class MPPositive_MusicItemShowTableViewCell: UITableViewCell, PKDownloadButtonDe return } //检索当前歌曲是否下载过 - guard let videoId = itemView.browseItem.videoId else { + guard let videoId = itemView?.browseItem.videoId else { return } MP_ADSimpleManager.shared.showLibraryInterstitialAdIfAvailable(completion: nil) //切换为准备状态 downloadButton.state = .pending //通过网络请求获取当前预览项资源(转为Song) - MP_NetWorkManager.shared.requestNextList("", videoId: videoId, clickTrackingParams: nil){ + MP_NetWorkManager.shared.requestNextList(itemView?.browseItem.playListId ?? "", videoId: videoId, clickTrackingParams: nil){ [weak self] listSongs in guard let self = self, let first = listSongs.first else { //获取资源失败 diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift index 5bf4787..eccc336 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift @@ -297,17 +297,22 @@ class MPPositive_SearchResultShowTableViewCell: UITableViewCell, PKDownloadButto return } var videoId:String? + var playListId:String? if let itemView = itemView { videoId = itemView.item.videoId + playListId = itemView.item.playListId } if let songViewModel = songViewModel { videoId = songViewModel.collectionSong.videoId + playListId = "" } if let loadViewModel = loadViewModel { videoId = loadViewModel.loadItem.videoId + playListId = loadViewModel.loadItem.playListID } if let videoModel = videoModel { videoId = videoModel.videoId + playListId = "" } //检索当前歌曲是否下载过 guard let videoId = videoId else { @@ -318,7 +323,7 @@ class MPPositive_SearchResultShowTableViewCell: UITableViewCell, PKDownloadButto //切换为准备状态 downloadButton.state = .pending //通过网络请求获取当前预览项资源(转为Song) - MP_NetWorkManager.shared.requestNextList("", videoId: videoId, clickTrackingParams: nil){ + MP_NetWorkManager.shared.requestNextList(playListId ?? "", videoId: videoId, clickTrackingParams: nil){ [weak self] listSongs in guard let self = self, let first = listSongs.first else { //获取资源失败