Commit b53d6043 authored by shenyong's avatar shenyong

fix bugs

parent f5281983
...@@ -821,7 +821,7 @@ ...@@ -821,7 +821,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.1.0; MARKETING_VERSION = 2.2.0;
PRODUCT_BUNDLE_IDENTIFIER = com.app.phonemanager; PRODUCT_BUNDLE_IDENTIFIER = com.app.phonemanager;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
...@@ -870,7 +870,7 @@ ...@@ -870,7 +870,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.1.0; MARKETING_VERSION = 2.2.0;
PRODUCT_BUNDLE_IDENTIFIER = com.app.phonemanager; PRODUCT_BUNDLE_IDENTIFIER = com.app.phonemanager;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
......
...@@ -12,6 +12,7 @@ import AppTrackingTransparency ...@@ -12,6 +12,7 @@ import AppTrackingTransparency
import AdSupport import AdSupport
import AppLovinSDK import AppLovinSDK
import FBAudienceNetwork import FBAudienceNetwork
import SVProgressHUD
enum AdvertisementType { enum AdvertisementType {
case rewardedInterstitialType case rewardedInterstitialType
...@@ -33,9 +34,13 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -33,9 +34,13 @@ class AdvManager : NSObject, FullScreenContentDelegate {
var adFromName:String = "" var adFromName:String = ""
var adFromVC:String = ""
// 看完广告的回调 // 看完广告的回调
var finisedCallBack:()->Void = {} var finisedCallBack:()->Void = {}
var serctCallBack:()->Void = {}
// 广告都没播放成功回调 // 广告都没播放成功回调
var failueFinishedCallBack : ()->Void = {} var failueFinishedCallBack : ()->Void = {}
...@@ -45,10 +50,16 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -45,10 +50,16 @@ class AdvManager : NSObject, FullScreenContentDelegate {
// 插页广告 // 插页广告
var interstitial: InterstitialAd? var interstitial: InterstitialAd?
var currentAdvType : AdvertisementType = .rewardedInterstitialType
var currentTimes : Int = 3 var currentTimes : Int = 3
/// 记录激励上次展示广告的时间
private var rewardlastAdShowTime: Date?
/// 记录插屏上次展示广告的时间
private var interstitiallastAdShowTime: Date?
var isFromHome = false
/// 默认每日免费删除次数 /// 默认每日免费删除次数
var defaultFreeTimes : Int { var defaultFreeTimes : Int {
get { get {
...@@ -80,11 +91,8 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -80,11 +91,8 @@ class AdvManager : NSObject, FullScreenContentDelegate {
/// 广告策略 第一次可删除5张,第二次可删除5张,第三次可删除4张 /// 广告策略 第一次可删除5张,第二次可删除5张,第三次可删除4张
let advDeleteResouceDic : [Int:Int] = [3:5,2:5,1:4,0:0] let advDeleteResouceDic : [Int:Int] = [3:5,2:5,1:4,0:0]
// 进入页面之后30秒 var interstitialOnceAgin = false
var advTimeAfterInAPP : Int = 30 var rewardOnceAgin = false
var timer: DispatchSourceTimer?
/// 能请求广告 /// 能请求广告
var canRequestAds: Bool { var canRequestAds: Bool {
...@@ -156,6 +164,12 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -156,6 +164,12 @@ class AdvManager : NSObject, FullScreenContentDelegate {
] ]
) )
} catch { } catch {
if rewardOnceAgin == false{
rewardOnceAgin = true
Task{
await loadRewardedInterstitialAd()
}
}
print("Failed to load rewarded interstitial ad with error: \(error.localizedDescription)") print("Failed to load rewarded interstitial ad with error: \(error.localizedDescription)")
APIReportManager.shared.startReport( APIReportManager.shared.startReport(
type: .ad_pull, type: .ad_pull,
...@@ -204,6 +218,12 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -204,6 +218,12 @@ class AdvManager : NSObject, FullScreenContentDelegate {
] ]
) )
} catch { } catch {
if interstitialOnceAgin == false{
interstitialOnceAgin = true
Task{
await loadInterstitial()
}
}
print("Failed to load interstitial ad with error: \(error.localizedDescription)") print("Failed to load interstitial ad with error: \(error.localizedDescription)")
APIReportManager.shared.startReport( APIReportManager.shared.startReport(
type: .ad_pull, type: .ad_pull,
...@@ -218,21 +238,23 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -218,21 +238,23 @@ class AdvManager : NSObject, FullScreenContentDelegate {
/// 开始显示 /// 开始显示
/// - Parameter completed: 准备完成后回调 /// - Parameter completed: 准备完成后回调
func showRewardedInterstitialAd(vc:UIViewController,from:String = "") { func showRewardedInterstitialAd(vc:UIViewController,from:String = "",isByInter:Bool = false) {
// 检查是否在上次广告展示后的 30 秒内
if let lastAdShowTime = rewardlastAdShowTime {
let timeSinceLastAd = Date().timeIntervalSince(lastAdShowTime)
if timeSinceLastAd < 30 {
showErrMessage(vc: vc)
return
}
}
guard let ad = self.rewardedInterstitialAd else { guard let ad = self.rewardedInterstitialAd else {
Task { Task {
// 同时重新load两个广告内容
await self.loadInterstitial()
await self.loadRewardedInterstitialAd() await self.loadRewardedInterstitialAd()
} }
// 这里如果还没有,则弹出框 if !isByInter{
let alert = UIAlertController(title: nil, message: "Ad wasn't ready", preferredStyle: .alert) showInterstitialAd(vc: vc,isByReward: true)
vc.present(alert, animated: true, completion: nil) }else{
// 1 秒后关闭弹窗 showErrMessage(vc: vc)
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
alert.dismiss(animated: true) {
self.failueFinishedCallBack()
}
} }
return return
} }
...@@ -240,23 +262,40 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -240,23 +262,40 @@ class AdvManager : NSObject, FullScreenContentDelegate {
APIReportManager.shared.startReport( APIReportManager.shared.startReport(
type: .ad_prepare_show, type: .ad_prepare_show,
ext: ["ad_type": "rewardAd","from":self.adFromName]) ext: ["ad_type": "rewardAd","from":self.adFromName])
ad.present(from: vc) {} ad.present(from: nil) {}
} }
/// 开始显示 /// 开始显示
/// - Parameter completed: 准备完成后回调 /// - Parameter completed: 准备完成后回调
func showInterstitialAd(vc:UIViewController,from:String = "") { func showInterstitialAd(vc:UIViewController,from:String = "",isByReward:Bool = false,needAlert:Bool = false,isHome:Bool = false) {
isFromHome = isHome
adFromVC = from
if let lastAdShowTime = interstitiallastAdShowTime {
let timeSinceLastAd = Date().timeIntervalSince(lastAdShowTime)
if timeSinceLastAd < 30 {
if needAlert{
showErrMessage(vc: vc)
}else{
finisedCallBack()
}
return
}
}
guard let ad = self.interstitial else { guard let ad = self.interstitial else {
self.currentAdvType = .rewardedInterstitialType Task{
self.showRewardedInterstitialAd(vc: vc) await loadInterstitial()
}
if !isByReward{
showRewardedInterstitialAd(vc: vc,from: from,isByInter: true)
}
return return
} }
self.currentAdvType = .interstitialType
self.adFromName = from self.adFromName = from
APIReportManager.shared.startReport( APIReportManager.shared.startReport(
type: .ad_prepare_show, type: .ad_prepare_show,
ext: ["ad_type": "interAd","from":adFromName]) ext: ["ad_type": "interAd","from":adFromName])
ad.present(from: vc) ad.present(from: nil)
} }
...@@ -266,7 +305,11 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -266,7 +305,11 @@ class AdvManager : NSObject, FullScreenContentDelegate {
var ad_type = "interAd" var ad_type = "interAd"
if let _ = ad as? RewardedInterstitialAd{ if let _ = ad as? RewardedInterstitialAd{
ad_type = "rewardAd" ad_type = "rewardAd"
rewardlastAdShowTime = Date()
}else{
interstitiallastAdShowTime = Date()
} }
APIReportManager.shared.startReport( APIReportManager.shared.startReport(
type: .ad_show, type: .ad_show,
ext: ["ad_type": ad_type,"from":adFromName]) ext: ["ad_type": ad_type,"from":adFromName])
...@@ -283,33 +326,32 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -283,33 +326,32 @@ class AdvManager : NSObject, FullScreenContentDelegate {
APIReportManager.shared.startReport( APIReportManager.shared.startReport(
type: .ad_show_error, type: .ad_show_error,
ext: ["ad_type": ad_type,"from":adFromName,"reason":error.localizedDescription]) ext: ["ad_type": ad_type,"from":adFromName,"reason":error.localizedDescription])
interstitiallastAdShowTime = nil
rewardlastAdShowTime = nil
self.rewardedInterstitialAd = nil self.rewardedInterstitialAd = nil
self.interstitial = nil
} }
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) { func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("Ad did dismiss full screen content.") print("Ad did dismiss full screen content.")
if self.currentAdvType == .interstitialType { if let _ = ad as? RewardedInterstitialAd{
// 如果播放的是插页广告,播放完成应该再缓存一份 self.rewardedInterstitialAd = nil
self.interstitial = nil
Task { Task {
await self.loadInterstitial() await self.loadRewardedInterstitialAd()
} }
}else{ }else{
// 如果播放的是插页激励,则应该同时缓存两个(因为只有在插页广告没有的情况下才会到插页激励广告) self.interstitial = nil
self.rewardedInterstitialAd = nil
Task { Task {
await self.loadInterstitial() await self.loadInterstitial()
await self.loadRewardedInterstitialAd()
} }
} }
// 更新值
updateAdvStrategyValue()
finisedCallBack() finisedCallBack()
} }
func adDidRecordClick(_ ad: any FullScreenPresentingAd) { func adDidRecordClick(_ ad: any FullScreenPresentingAd) {
print("点击广告") print("点击广告")
...@@ -320,32 +362,19 @@ class AdvManager : NSObject, FullScreenContentDelegate { ...@@ -320,32 +362,19 @@ class AdvManager : NSObject, FullScreenContentDelegate {
ext:pram) ext:pram)
} }
/// 广告结束之后重置策略信息
func updateAdvStrategyValue() {
AdvManager.shared.timer = nil
AdvManager.shared.advTimeAfterInAPP = 30
Singleton.shared.startCountdown {}
}
func ad(_ ad: FullScreenPresentingAd, didReceivePaidEvent adValue: AdValue) { func showErrMessage(vc:UIViewController){
let valueMicros = adValue.value // 这里如果还没有,则弹出框
let currencyCode = adValue.currencyCode let alert = UIAlertController(title: nil, message: "Ad wasn't ready", preferredStyle: .alert)
let precision = adValue.precision GETCURRENTNAV()?.present(alert, animated: true, completion: nil)
// 1 秒后关闭弹窗
// 获取基础广告信息 DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
var pram = loadedAdNetworkResponseInfo(ad: ad) alert.dismiss(animated: true) {
self.failueFinishedCallBack()
// 添加价值相关信息到 pram 字典中 }
pram["value"] = "\(valueMicros)" }
pram["currency"] = currencyCode // SVProgressHUD.showInfo(withStatus: "Ad wasn't ready")
pram["precision"] = "\(precision.rawValue)"
print("广告价值和来源", pram)
// 使用 APIReportManager 上报广告价值
APIReportManager().startReport(type: .ad_price, ext: pram)
} }
} }
......
...@@ -238,7 +238,7 @@ class ChargeInfoViewController:BaseViewController { ...@@ -238,7 +238,7 @@ class ChargeInfoViewController:BaseViewController {
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self,from:"charge") AdvManager.shared.showRewardedInterstitialAd(vc: self,from:"charge")
} }
} }
...@@ -316,7 +316,7 @@ class CompressQualityController : BaseViewController{ ...@@ -316,7 +316,7 @@ class CompressQualityController : BaseViewController{
} }
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self,from:"compress") AdvManager.shared.showRewardedInterstitialAd(vc: self,from:"compress")
} }
} }
...@@ -63,13 +63,9 @@ extension MergeButtonView { ...@@ -63,13 +63,9 @@ extension MergeButtonView {
self.alertWhenMergeContact() self.alertWhenMergeContact()
if IAPManager.share.isSubscribed == false { if IAPManager.share.isSubscribed == false {
// 添加的时候需要先弹出广告 // 添加的时候需要先弹出广告
if AdvManager.shared.advTimeAfterInAPP <= 0{ if let vc = self.responderViewController() {
if let vc = self.responderViewController() { AdvManager.shared.showInterstitialAd(vc: vc,from:"merge",needAlert: true)
AdvManager.shared.showInterstitialAd(vc: vc,from:"merge") AdvManager.shared.finisedCallBack = {
AdvManager.shared.finisedCallBack = {
self.alertWhenMergeContact()
}
}else {
self.alertWhenMergeContact() self.alertWhenMergeContact()
} }
}else { }else {
......
...@@ -60,13 +60,9 @@ extension MergePreButtonView { ...@@ -60,13 +60,9 @@ extension MergePreButtonView {
@objc func mergePre(){ @objc func mergePre(){
if IAPManager.share.isSubscribed == false { if IAPManager.share.isSubscribed == false {
// 添加的时候需要先弹出广告 // 添加的时候需要先弹出广告
if AdvManager.shared.advTimeAfterInAPP <= 0{ if let vc = self.responderViewController() {
if let vc = self.responderViewController() { AdvManager.shared.showInterstitialAd(vc: vc,needAlert: true)
AdvManager.shared.showInterstitialAd(vc: vc) AdvManager.shared.finisedCallBack = {
AdvManager.shared.finisedCallBack = {
self.mergePreCallBack()
}
}else {
self.mergePreCallBack() self.mergePreCallBack()
} }
}else { }else {
......
...@@ -310,7 +310,7 @@ class HomeInfoViewController:BaseViewController { ...@@ -310,7 +310,7 @@ class HomeInfoViewController:BaseViewController {
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self) AdvManager.shared.showRewardedInterstitialAd(vc: self)
} }
// 由于继承自 UIViewController,必须实现这个必需的构造器 // 由于继承自 UIViewController,必须实现这个必需的构造器
......
...@@ -776,7 +776,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -776,7 +776,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self,from:self.mediaType?.rawValue ?? "") AdvManager.shared.showRewardedInterstitialAd(vc: self,from:self.mediaType?.rawValue ?? "")
} }
func deleteAction(count:Int,isAfterAdv:Bool){ func deleteAction(count:Int,isAfterAdv:Bool){
......
...@@ -669,7 +669,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -669,7 +669,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self,from: "video_delete") AdvManager.shared.showRewardedInterstitialAd(vc: self,from: "video_delete")
} }
func deleteAction(count:Int,isAfterAdv:Bool){ func deleteAction(count:Int,isAfterAdv:Bool){
......
...@@ -19,7 +19,7 @@ class HomeViewController:BaseViewController { ...@@ -19,7 +19,7 @@ class HomeViewController:BaseViewController {
var homeView:HomeView? var homeView:HomeView?
let adManager = AdvManager.shared
fileprivate func junmToModule(_ cIndex: String, _ self: HomeViewController) { fileprivate func junmToModule(_ cIndex: String, _ self: HomeViewController) {
switch cIndex { switch cIndex {
...@@ -180,22 +180,20 @@ class HomeViewController:BaseViewController { ...@@ -180,22 +180,20 @@ class HomeViewController:BaseViewController {
if let cIndex = index as? String { if let cIndex = index as? String {
// 先走广告策略 // 先走广告策略
if AdvManager.shared.advTimeAfterInAPP <= 0{ if IAPManager.share.isSubscribed == false {
if IAPManager.share.isSubscribed == false { self.adManager.showInterstitialAd(vc: self,from: cIndex,isHome: true)
AdvManager.shared.showInterstitialAd(vc: self,from: cIndex)
}else{
junmToModule(cIndex, self)
}
}else {
junmToModule(cIndex, self)
} }
AdvManager.shared.finisedCallBack = { // junmToModule(cIndex, self)
self.junmToModule(cIndex, self) self.adManager.finisedCallBack = {
if self.adManager.isFromHome{
self.junmToModule(cIndex, self)
}
} }
self.adManager.failueFinishedCallBack = {
AdvManager.shared.failueFinishedCallBack = {
// 首页特殊要求广告没准备好也需要跳转 // 首页特殊要求广告没准备好也需要跳转
self.junmToModule(cIndex, self) if self.adManager.isFromHome{
self.junmToModule(cIndex, self)
}
} }
} }
} }
...@@ -289,11 +287,7 @@ class HomeViewController:BaseViewController { ...@@ -289,11 +287,7 @@ class HomeViewController:BaseViewController {
override func viewDidAppear(_ animated: Bool) { override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated) super.viewDidAppear(animated)
self.barHidden = false self.barHidden = false
// 开启定时器
Singleton.shared.startCountdown {}
if !isShowCharge { if !isShowCharge {
NotificationManager().configNotifications() NotificationManager().configNotifications()
return return
......
...@@ -103,6 +103,7 @@ class HomeView:UIView { ...@@ -103,6 +103,7 @@ class HomeView:UIView {
NotificationCenter.default.addObserver(forName: Notification.Name("applicationDidBecomeActive"), object: nil, queue: nil) {[weak self] _ in NotificationCenter.default.addObserver(forName: Notification.Name("applicationDidBecomeActive"), object: nil, queue: nil) {[weak self] _ in
guard let weakSelf = self else { return } guard let weakSelf = self else { return }
weakSelf.homeHeader?.progressBar.chaoticProgress = CGFloat(weakSelf.viewModel.totalSize)
weakSelf.collectionView.reloadData() weakSelf.collectionView.reloadData()
} }
} }
......
...@@ -259,7 +259,7 @@ extension TrashSubView { ...@@ -259,7 +259,7 @@ extension TrashSubView {
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
if let vc = self.responderViewController() { if let vc = self.responderViewController() {
AdvManager.shared.showInterstitialAd(vc: vc,from: "trash") AdvManager.shared.showRewardedInterstitialAd(vc: vc,from: "trash")
} }
} }
......
...@@ -183,7 +183,7 @@ class HomeViewModel { ...@@ -183,7 +183,7 @@ class HomeViewModel {
} completionHandler: {[weak self] totalGroup in } completionHandler: {[weak self] totalGroup in
guard let weakSelf = self else { return } guard let weakSelf = self else { return }
print("获取相似截图完成",totalGroup.count) print("获取相似截图完成",totalGroup.count)
weakSelf.photoManager.similarScreenShotModels = totalGroup weakSelf.photoManager.similarScreenShotModels = weakSelf.sortGroupsByTime(totalGroup)
weakSelf.filterResource() weakSelf.filterResource()
weakSelf.homeDataChanged?(1,type.index,false) weakSelf.homeDataChanged?(1,type.index,false)
} }
...@@ -203,7 +203,7 @@ class HomeViewModel { ...@@ -203,7 +203,7 @@ class HomeViewModel {
} completionHandler: {[weak self] totalGroup in } completionHandler: {[weak self] totalGroup in
print("获取相似视频完成",totalGroup.count) print("获取相似视频完成",totalGroup.count)
guard let weakSelf = self else { return } guard let weakSelf = self else { return }
weakSelf.photoManager.similarVideoModels = totalGroup weakSelf.photoManager.similarVideoModels = weakSelf.sortGroupsByTime(totalGroup)
weakSelf.filterResource() weakSelf.filterResource()
weakSelf.homeDataChanged?(1,type.index,false) weakSelf.homeDataChanged?(1,type.index,false)
} }
...@@ -242,7 +242,7 @@ class HomeViewModel { ...@@ -242,7 +242,7 @@ class HomeViewModel {
} else { } else {
print("在后台线程执行") print("在后台线程执行")
} }
weakSelf.photoManager.duplicateModels = totalGroup weakSelf.photoManager.duplicateModels = weakSelf.sortGroupsByTime(totalGroup)
weakSelf.filterResource() weakSelf.filterResource()
// weakSelf.reloadCellHeight?() // weakSelf.reloadCellHeight?()
weakSelf.homeDataChanged?(0,type.index,true) weakSelf.homeDataChanged?(0,type.index,true)
...@@ -256,5 +256,16 @@ class HomeViewModel { ...@@ -256,5 +256,16 @@ class HomeViewModel {
func filterResource(){ func filterResource(){
photoManager.filterResource() photoManager.filterResource()
} }
func sortGroupsByTime(_ groups: [[AssetModel]]) -> [[AssetModel]] {
return groups.sorted { group1, group2 in
guard let firstAsset1 = group1.first,
let firstAsset2 = group2.first else {
return false
}
return firstAsset1.createDate > firstAsset2.createDate
}
}
} }
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/> <device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
...@@ -27,15 +27,15 @@ ...@@ -27,15 +27,15 @@
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XE9-Mv-kN1"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XE9-Mv-kN1">
<rect key="frame" x="230" y="20" width="174" height="40"/> <rect key="frame" x="254" y="20" width="150" height="40"/>
<color key="backgroundColor" red="0.0" green="0.50980392159999999" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="backgroundColor" red="0.0" green="0.50980392159999999" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="174" id="EG9-xJ-hJZ"/> <constraint firstAttribute="width" constant="150" id="EG9-xJ-hJZ"/>
<constraint firstAttribute="height" constant="40" id="ddO-RT-eKr"/> <constraint firstAttribute="height" constant="40" id="ddO-RT-eKr"/>
</constraints> </constraints>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Un-keep Selected"/> <state key="normal" title="Not keep All"/>
<userDefinedRuntimeAttributes> <userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="Radius"> <userDefinedRuntimeAttribute type="number" keyPath="Radius">
<real key="value" value="10"/> <real key="value" value="10"/>
......
...@@ -112,7 +112,7 @@ class PMLoadingView: UIView { ...@@ -112,7 +112,7 @@ class PMLoadingView: UIView {
title.snp.makeConstraints { make in title.snp.makeConstraints { make in
make.centerX.equalToSuperview() make.centerX.equalToSuperview()
make.top.equalTo(animationView.snp.bottom).offset(-80) make.top.equalTo(animationView.snp.bottom).offset(-50)
} }
subtitle.snp.makeConstraints { make in subtitle.snp.makeConstraints { make in
......
...@@ -78,6 +78,7 @@ class SecretViewController: BaseViewController { ...@@ -78,6 +78,7 @@ class SecretViewController: BaseViewController {
alert.show() alert.show()
} }
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
...@@ -263,9 +264,32 @@ class SecretViewController: BaseViewController { ...@@ -263,9 +264,32 @@ class SecretViewController: BaseViewController {
if idx < 0 { if idx < 0 {
if IAPManager.share.isSubscribed == false { if IAPManager.share.isSubscribed == false {
// 添加的时候需要先弹出广告 // 添加的时候需要先弹出广告
if AdvManager.shared.advTimeAfterInAPP <= 0{ // if AdvManager.shared.advTimeAfterInAPP <= 0{
popAdverTisement() // popAdverTisement()
AdvManager.shared.finisedCallBack = { // AdvManager.shared.finisedCallBack = {
// self.AddAction = SecretActionView()
// self.AddAction.show();
// self.view.showBlur()
// self.AddAction.callback = { idx in
// popAdvThenDo(idx: idx)
// }
// }
// }else {
// self.AddAction = SecretActionView()
// self.view.showBlur()
// self.AddAction.show();
// self.AddAction.callback = { idx in
// popAdvThenDo(idx: idx)
// }
// }
// self.AddAction = SecretActionView()
// self.AddAction.show();
// self.view.showBlur()
// self.AddAction.callback = { idx in
// popAdvThenDo(idx: idx)
// }
AdvManager.shared.finisedCallBack = {
if AdvManager.shared.adFromVC == "Secret"{
self.AddAction = SecretActionView() self.AddAction = SecretActionView()
self.AddAction.show(); self.AddAction.show();
self.view.showBlur() self.view.showBlur()
...@@ -273,14 +297,10 @@ class SecretViewController: BaseViewController { ...@@ -273,14 +297,10 @@ class SecretViewController: BaseViewController {
popAdvThenDo(idx: idx) popAdvThenDo(idx: idx)
} }
} }
}else {
self.AddAction = SecretActionView()
self.view.showBlur()
self.AddAction.show();
self.AddAction.callback = { idx in
popAdvThenDo(idx: idx)
}
} }
popAdverTisement()
}else { }else {
self.AddAction = SecretActionView() self.AddAction = SecretActionView()
...@@ -314,21 +334,25 @@ class SecretViewController: BaseViewController { ...@@ -314,21 +334,25 @@ class SecretViewController: BaseViewController {
} }
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self,from:"Secret") AdvManager.shared.showInterstitialAd(vc: self,from:"Secret")
} }
// 临时方法 // 临时方法
func popAdvThenDo(idx : Int){ func popAdvThenDo(idx : Int){
if AdvManager.shared.advTimeAfterInAPP <= 0{ self.view.hideBlur()
popAdverTisement() self.AddImagePicker(idx)
AdvManager.shared.finisedCallBack = { // if AdvManager.shared.advTimeAfterInAPP <= 0{
self.view.hideBlur() // popAdverTisement()
self.AddImagePicker(idx) // AdvManager.shared.finisedCallBack = {
} // self.view.hideBlur()
}else { // self.AddImagePicker(idx)
self.view.hideBlur() // }
self.AddImagePicker(idx) // }else {
} // self.view.hideBlur()
// self.AddImagePicker(idx)
// }
} }
} }
return b return b
...@@ -362,6 +386,7 @@ class SecretViewController: BaseViewController { ...@@ -362,6 +386,7 @@ class SecretViewController: BaseViewController {
}() }()
deinit { deinit {
Print("释放SecretViewController")
SecretImageCache.share.removeAllImage() SecretImageCache.share.removeAllImage()
} }
......
...@@ -110,9 +110,11 @@ class SecretActionView: UIViewController ,UIViewControllerTransitioningDelegate ...@@ -110,9 +110,11 @@ class SecretActionView: UIViewController ,UIViewControllerTransitioningDelegate
func show() -> Void { func show() -> Void {
guard let rt = cWindow?.rootViewController else { return } // guard let rt = cWindow?.rootViewController else { return }
self.modalTransitionStyle = .crossDissolve self.modalTransitionStyle = .crossDissolve
self.modalPresentationStyle = .overFullScreen self.modalPresentationStyle = .overFullScreen
guard let rt = UIViewController.topMostViewController() else { return }
rt.present(self, animated: true) rt.present(self, animated: true)
} }
......
...@@ -176,23 +176,27 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV ...@@ -176,23 +176,27 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
vibrate() vibrate()
break break
case settingLabels.Widgets.rawValue: case settingLabels.Widgets.rawValue:
let callblock:(()->Void) = {[weak self] in // let callblock:(()->Void) = {[weak self] in
guard let self = self else { return } // guard let self = self else { return }
let widget = WidgetViewController() // let widget = WidgetViewController()
self.navigationController?.pushViewController(widget, animated: true) // self.navigationController?.pushViewController(widget, animated: true)
} // }
if AdvManager.shared.advTimeAfterInAPP <= 0{ // if IAPManager.share.isSubscribed == false {
if IAPManager.share.isSubscribed == false { //// AdvManager.shared.showInterstitialAd(vc: self,from: "Widgets")
AdvManager.shared.showInterstitialAd(vc: self,from: "Widgets") //// let widget = WidgetViewController()
}else{ //// self.navigationController?.pushViewController(widget, animated: true)
callblock() // }else{
} // callblock()
}else { // }
callblock() // AdvManager.shared.finisedCallBack = {
} // callblock()
AdvManager.shared.finisedCallBack = { // }
callblock() if IAPManager.share.isSubscribed == false {
AdvManager.shared.showInterstitialAd(vc: self,from: "Widgets")
} }
let widget = WidgetViewController()
self.navigationController?.pushViewController(widget, animated: true)
break break
case settingLabels.FollowonInstagram.rawValue: case settingLabels.FollowonInstagram.rawValue:
guard let url = URL(string: "https://www.instagram.com/phone.manager.app/") else { return } guard let url = URL(string: "https://www.instagram.com/phone.manager.app/") else { return }
...@@ -326,25 +330,29 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV ...@@ -326,25 +330,29 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
} }
alert.show() alert.show()
}else{ }else{
let callblock:(()->Void) = { [weak self] in // let callblock:(()->Void) = { [weak self] in
guard let self = self else { return } // guard let self = self else { return }
let vc:EmailLoginController = EmailLoginController() // let vc:EmailLoginController = EmailLoginController()
vc.state = .home // vc.state = .home
self.navigationController?.pushViewController(vc, animated: true) // self.navigationController?.pushViewController(vc, animated: true)
self.tableView.reloadData() // self.tableView.reloadData()
} // }
if AdvManager.shared.advTimeAfterInAPP <= 0{ // if IAPManager.share.isSubscribed == false {
if IAPManager.share.isSubscribed == false { // AdvManager.shared.showInterstitialAd(vc: self,from: "emailLoginSignOut")
AdvManager.shared.showInterstitialAd(vc: self,from: "emailLoginSignOut") // }else{
}else{ // callblock()
callblock() // }
} // AdvManager.shared.finisedCallBack = {
}else { // callblock()
callblock() // }
} if IAPManager.share.isSubscribed == false {
AdvManager.shared.finisedCallBack = { AdvManager.shared.showInterstitialAd(vc: self,from: "emailLoginSignOut")
callblock()
} }
let vc:EmailLoginController = EmailLoginController()
vc.state = .home
self.navigationController?.pushViewController(vc, animated: true)
self.tableView.reloadData()
} }
} }
......
...@@ -321,7 +321,7 @@ extension TrashViewController:UIScrollViewDelegate{ ...@@ -321,7 +321,7 @@ extension TrashViewController:UIScrollViewDelegate{
/// 弹出广告 /// 弹出广告
func popAdverTisement(){ func popAdverTisement(){
AdvManager.shared.showInterstitialAd(vc: self,from: "trash") AdvManager.shared.showRewardedInterstitialAd(vc: self,from: "trash")
} }
// 显示弹出框 // 显示弹出框
......
...@@ -24,27 +24,27 @@ class Singleton { ...@@ -24,27 +24,27 @@ class Singleton {
var photoPermission : PrivacyType? var photoPermission : PrivacyType?
func startCountdown(completion: @escaping () -> Void) { // func startCountdown(completion: @escaping () -> Void) {
//
if AdvManager.shared.timer != nil { // if AdvManager.shared.timer != nil {
return // return
} // }
let queue = DispatchQueue.global() // let queue = DispatchQueue.global()
let timer = DispatchSource.makeTimerSource(queue: queue) // let timer = DispatchSource.makeTimerSource(queue: queue)
AdvManager.shared.timer = timer // AdvManager.shared.timer = timer
AdvManager.shared.timer?.schedule(deadline: .now(), repeating: .seconds(1)) // AdvManager.shared.timer?.schedule(deadline: .now(), repeating: .seconds(1))
AdvManager.shared.timer?.setEventHandler { // AdvManager.shared.timer?.setEventHandler {
AdvManager.shared.advTimeAfterInAPP -= 1 // AdvManager.shared.advTimeAfterInAPP -= 1
if AdvManager.shared.advTimeAfterInAPP >= 0 { // if AdvManager.shared.advTimeAfterInAPP >= 0 {
} else { // } else {
print("倒计时结束!") // print("倒计时结束!")
AdvManager.shared.timer?.cancel() // AdvManager.shared.timer?.cancel()
completion() // completion()
AdvManager.shared.timer = nil // AdvManager.shared.timer = nil
} // }
} // }
timer.resume() // timer.resume()
} // }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment