From e925ec085edd711648b5a0aee48be17c778241cb Mon Sep 17 00:00:00 2001 From: BilalKhanWDI Date: Wed, 25 Sep 2024 20:10:31 +0530 Subject: [PATCH] ads commit --- WOKA.xcodeproj/project.pbxproj | 4 + WOKA/Main/JWAdsBuilder.swift | 48 ++++ WOKA/Main/JWPlayerManager.swift | 136 ++++++----- WOKA/Shop/Controller/ProductDetailsVC.swift | 37 +++ WOKA/Shop/Controller/ShopCategoryVC.swift | 37 +++ WOKA/Shop/Controller/ShopListingVC.swift | 39 ++++ WOKA/Shop/Controller/ShopProductsVC.swift | 38 ++++ WOKA/Shop/Shop.storyboard | 211 +++++++++++------- WOKA/Shop/ViewModel/ProductDetailsVM.swift | 18 ++ WOKA/Shop/ViewModel/ShopCategoryVM.swift | 15 ++ WOKA/Shop/ViewModel/ShopListingVM.swift | 15 +- WOKA/Shop/ViewModel/ShopProductsVM.swift | 15 ++ WOKA/Theme/Controller/PlayerVC.swift | 2 +- WOKA/Theme/ViewModel/ThemeOneVM.swift | 2 +- .../Controller/WebSeriesSeasonVC.swift | 7 +- 15 files changed, 478 insertions(+), 146 deletions(-) create mode 100644 WOKA/Main/JWAdsBuilder.swift diff --git a/WOKA.xcodeproj/project.pbxproj b/WOKA.xcodeproj/project.pbxproj index 2f215ab..2a5a64c 100644 --- a/WOKA.xcodeproj/project.pbxproj +++ b/WOKA.xcodeproj/project.pbxproj @@ -20,6 +20,7 @@ 520CE6B12C74BB9D00974228 /* AppUpdateVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520CE6B02C74BB9D00974228 /* AppUpdateVC.swift */; }; 5219C2C22C086D9C00A1DF4D /* DataTypeConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5219C2C12C086D9B00A1DF4D /* DataTypeConversion.swift */; }; 521E5A9D2CA1A5C800AEF131 /* GoogleInterstistialADSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 521E5A9C2CA1A5BE00AEF131 /* GoogleInterstistialADSetup.swift */; }; + 521E5AA02CA40BED00AEF131 /* JWAdsBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 521E5A9F2CA40BE300AEF131 /* JWAdsBuilder.swift */; }; 522242662BFC74380085C632 /* MyListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242632BFC74380085C632 /* MyListVC.swift */; }; 522242682BFC74380085C632 /* TabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242652BFC74380085C632 /* TabBarVC.swift */; }; 5222426A2BFC7AFC0085C632 /* SideMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242692BFC7AFC0085C632 /* SideMenuVC.swift */; }; @@ -426,6 +427,7 @@ 520CE6B02C74BB9D00974228 /* AppUpdateVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateVC.swift; sourceTree = ""; }; 5219C2C12C086D9B00A1DF4D /* DataTypeConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTypeConversion.swift; sourceTree = ""; }; 521E5A9C2CA1A5BE00AEF131 /* GoogleInterstistialADSetup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleInterstistialADSetup.swift; sourceTree = ""; }; + 521E5A9F2CA40BE300AEF131 /* JWAdsBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JWAdsBuilder.swift; sourceTree = ""; }; 522242632BFC74380085C632 /* MyListVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyListVC.swift; sourceTree = ""; }; 522242652BFC74380085C632 /* TabBarVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBarVC.swift; sourceTree = ""; }; 522242692BFC7AFC0085C632 /* SideMenuVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideMenuVC.swift; sourceTree = ""; }; @@ -1745,6 +1747,7 @@ 9C27E1612BDB6F0F00EC1DA9 /* Main */ = { isa = PBXGroup; children = ( + 521E5A9F2CA40BE300AEF131 /* JWAdsBuilder.swift */, 9CDB8C0E2C9D534900C887B2 /* ShareApp.swift */, 52AC2D262C29791500337473 /* JWPlayerManager.swift */, 52C1A4DF2C05B670007BAA50 /* Delegate */, @@ -2485,6 +2488,7 @@ 52CC4A742C883B3F001BE47C /* AdsDM.swift in Sources */, 527A2BD22C57B40A0080DF9B /* CartDataCache.swift in Sources */, 525327D62BFCC23600F64283 /* SideMenuVM.swift in Sources */, + 521E5AA02CA40BED00AEF131 /* JWAdsBuilder.swift in Sources */, 525861D22C4FC6C000C33C79 /* CartPaymentOptionsVC.swift in Sources */, 525861DA2C4FE71100C33C79 /* CouponListDM.swift in Sources */, 9CBCB2A32BE50C95007D7934 /* ResetPassUserNameVC.swift in Sources */, diff --git a/WOKA/Main/JWAdsBuilder.swift b/WOKA/Main/JWAdsBuilder.swift new file mode 100644 index 0000000..0e6ba6c --- /dev/null +++ b/WOKA/Main/JWAdsBuilder.swift @@ -0,0 +1,48 @@ +// +// JWAdsBuilder.swift +// WOKA +// +// Created by MacBook Pro on 25/09/24. +// +import JWPlayerKit + +struct AdBreakItemStruct{ + let adUrl : URL + let offset : JWAdOffset +} + +class JWAdsBuilder{ + + static let shareInstace = JWAdsBuilder() + + private init(){} + + func createAds(adsData : [AdBreakItemStruct]) -> JWAdvertisingConfig?{ + var adBreaks = [JWAdBreak]() + + for adTags in adsData{ + let adBreakBuilder = JWAdBreakBuilder() + .offset(adTags.offset) + .tags([adTags.adUrl]) + + if let adBreak = try? adBreakBuilder.build() { + adBreaks.append(adBreak) + } + } + + let adConfigBuilder = JWImaAdvertisingConfigBuilder() + .schedule(adBreaks) + guard let adConfig = try? adConfigBuilder.build() else { + // Handle build error + return nil + } + + return adConfig + } + + func generateAdTagUrl(url : String) -> String { + let correlatorValue = Int(Date().timeIntervalSince1970 * 1000) + return "\(url)\(correlatorValue)" + } + +} diff --git a/WOKA/Main/JWPlayerManager.swift b/WOKA/Main/JWPlayerManager.swift index 7f83489..d31ff9c 100644 --- a/WOKA/Main/JWPlayerManager.swift +++ b/WOKA/Main/JWPlayerManager.swift @@ -12,6 +12,7 @@ enum VideoContentType{ case liveStream case webSeries case trailer + case masilaSongs case continueWatching case audioBooks case games @@ -46,7 +47,7 @@ class JWPlayerManager { // } switch contentType{ - case .webSeries,.songs: + case .webSeries,.songs, .masilaSongs: // Iterate over the liveStreamURLs to create JWPlayerItems for (index, singleItem) in playerItems.enumerated() { guard let url = URL(string: singleItem.url) else { @@ -110,74 +111,95 @@ class JWPlayerManager { return } - // Create an ad break for 30% into the video - let adBreakBuilder2 = JWAdBreakBuilder() - .offset(.from(string: "pre")!) - - .tags([URL(string: generateAdTagUrl())!]) +// // Create an ad break for 30% into the video +// let adBreakBuilder2 = JWAdBreakBuilder() +// .offset(.from(string: "pre")!) +// +// .tags([URL(string: generateAdTagUrl())!]) +// +// guard let adBreak2 = try? adBreakBuilder2.build() else { +// print("Ad error 1") +// // Handle build error +// return +// } +// +// // Create an ad break for 30% into the video +// let adBreakBuilder1 = JWAdBreakBuilder() +// .offset(.midroll(percent: 20)) +//// .offset(.from(string: "20%")!) +//// .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250,728x90&gdfp_req=1&output=vast4&unviewed_position_start=1&env=vp&impl=s&correlator=7898879")!]) +// .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&sz=480x320%7C640x480&ciu_szs=480x320&min_ad_duration=5000&max_ad_duration=20000&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")!]) +// +// guard let adBreak1 = try? adBreakBuilder1.build() else { +// print("Ad error 2") +// // Handle build error +// return +// } +// +// let adBreakBuilder3 = JWAdBreakBuilder() +// .offset(.midroll(percent: 50)) +//// .offset(.from(string: "50%")!) +// .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/live/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=&nofb=1")!]) +// +// guard let adBreak3 = try? adBreakBuilder3.build() else { +// print("Ad error 2") +// // Handle build error +// return +// } +// +// let adBreakBuilder4 = JWAdBreakBuilder() +// .offset(.midroll(percent: 80)) +//// .offset(.from(string: "50%")!) +// .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=90")!]) +// +// guard let adBreak4 = try? adBreakBuilder4.build() else { +// print("Ad error 2") +// // Handle build error +// return +// } +// +// let adConfigBuilder = JWImaAdvertisingConfigBuilder() +// .schedule([adBreak1,adBreak3, adBreak4]) +// guard let adConfig = try? adConfigBuilder.build() else { +// +// // Handle build error +// return +// } - guard let adBreak2 = try? adBreakBuilder2.build() else { - print("Ad error 1") - // Handle build error - return - } - // Create an ad break for 30% into the video - let adBreakBuilder1 = JWAdBreakBuilder() - .offset(.midroll(percent: 20)) -// .offset(.from(string: "20%")!) -// .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250,728x90&gdfp_req=1&output=vast4&unviewed_position_start=1&env=vp&impl=s&correlator=7898879")!]) - .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&sz=480x320%7C640x480&ciu_szs=480x320&min_ad_duration=5000&max_ad_duration=20000&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")!]) - - guard let adBreak1 = try? adBreakBuilder1.build() else { - print("Ad error 2") - // Handle build error - return - } - - let adBreakBuilder3 = JWAdBreakBuilder() - .offset(.midroll(percent: 50)) -// .offset(.from(string: "50%")!) - .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=60")!]) - - guard let adBreak3 = try? adBreakBuilder3.build() else { - print("Ad error 2") - // Handle build error - return - } - - let adBreakBuilder4 = JWAdBreakBuilder() - .offset(.midroll(percent: 80)) -// .offset(.from(string: "50%")!) - .tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=90")!]) - - guard let adBreak4 = try? adBreakBuilder4.build() else { - print("Ad error 2") - // Handle build error - return - } - - let adConfigBuilder = JWImaAdvertisingConfigBuilder() - .schedule([adBreak1,adBreak3, adBreak4]) - guard let adConfig = try? adConfigBuilder.build() else { - - // Handle build error - return - } - let finalConfig : JWPlayerConfiguration? switch contentType{ case .audioBooks: + let adConfigs = JWAdsBuilder.shareInstace.createAds(adsData: [AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")!, offset: .midroll(percent: 40)), + AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/live/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=&nofb=1")!, offset: .midroll(percent: 80)), + AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=90")!, offset: .midroll(percent: 90)) + ]) + finalConfig = try JWPlayerConfigurationBuilder() .playlist(items: items) .autostart(true) + .advertising(adConfigs!) .build() case .webSeries: + //https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&sz=480x320%7C640x480&ciu_szs=480x320&min_ad_duration=5000&max_ad_duration=20000&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator= + let adConfigs = JWAdsBuilder.shareInstace.createAds(adsData: [AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")!, offset: .midroll(percent: 40)), + AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/live/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=&nofb=1")!, offset: .midroll(percent: 80)), + AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=90")!, offset: .midroll(percent: 90)) + ]) + finalConfig = try JWPlayerConfigurationBuilder() .playlist(items: items) .autostart(false) - .advertising(adConfig) + .advertising(adConfigs!) + .build() + case .masilaSongs: + let adConfigs = JWAdsBuilder.shareInstace.createAds(adsData: [AdBreakItemStruct(adUrl: URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")!, offset: .preroll())]) + + finalConfig = try JWPlayerConfigurationBuilder() + .playlist(items: items) + .autostart(true) + .advertising(adConfigs!) .build() case .trailer: finalConfig = try JWPlayerConfigurationBuilder() @@ -219,7 +241,3 @@ class JWPlayerManager { } } -func generateAdTagUrl() -> String { - let correlatorValue = Int(Date().timeIntervalSince1970 * 1000) - return "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250,728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=\(correlatorValue)" -} diff --git a/WOKA/Shop/Controller/ProductDetailsVC.swift b/WOKA/Shop/Controller/ProductDetailsVC.swift index 19affe4..71a8f36 100644 --- a/WOKA/Shop/Controller/ProductDetailsVC.swift +++ b/WOKA/Shop/Controller/ProductDetailsVC.swift @@ -6,6 +6,7 @@ // import UIKit +import GoogleMobileAds class ProductDetailsVC: UIViewController { @@ -21,6 +22,7 @@ class ProductDetailsVC: UIViewController { @IBOutlet weak var noDataStack: UIStackView! @IBOutlet weak var retryBtn: UIButton! @IBOutlet weak var scrollView: UIScrollView! + @IBOutlet weak var adView: UIView! var vm = ProductDetailsVM() @@ -133,3 +135,38 @@ extension ProductDetailsVC : UICollectionViewDelegateFlowLayout{ return UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) } } + +// MARK: - Google Ad Banner Delegate + +extension ProductDetailsVC : GADBannerViewDelegate{ + func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { + adView.isHidden = false + bannerView.alpha = 0 + bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1) + UIView.animate(withDuration: 0.2, animations: { + bannerView.alpha = 1 + }) + print("bannerViewDidReceiveAd") + } + + func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { + + print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") + } + + func bannerViewDidRecordImpression(_ bannerView: GADBannerView) { + print("bannerViewDidRecordImpression") + } + + func bannerViewWillPresentScreen(_ bannerView: GADBannerView) { + print("bannerViewWillPresentScreen") + } + + func bannerViewWillDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewWillDIsmissScreen") + } + + func bannerViewDidDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewDidDismissScreen") + } +} diff --git a/WOKA/Shop/Controller/ShopCategoryVC.swift b/WOKA/Shop/Controller/ShopCategoryVC.swift index 33dc80f..def926c 100644 --- a/WOKA/Shop/Controller/ShopCategoryVC.swift +++ b/WOKA/Shop/Controller/ShopCategoryVC.swift @@ -6,10 +6,12 @@ // import UIKit +import GoogleMobileAds class ShopCategoryVC: UIViewController { @IBOutlet weak var tableView: UITableView! + @IBOutlet weak var adView: UIView! var vm = ShopCategoryVM() @@ -78,3 +80,38 @@ extension ShopCategoryVC : TableViewSRC{ self.navigationController?.pushViewController(vcPush, animated: true) } } + +// MARK: - Google Ad Banner Delegate + +extension ShopCategoryVC : GADBannerViewDelegate{ + func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { + adView.isHidden = false + bannerView.alpha = 0 + bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1) + UIView.animate(withDuration: 0.2, animations: { + bannerView.alpha = 1 + }) + print("bannerViewDidReceiveAd") + } + + func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { + + print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") + } + + func bannerViewDidRecordImpression(_ bannerView: GADBannerView) { + print("bannerViewDidRecordImpression") + } + + func bannerViewWillPresentScreen(_ bannerView: GADBannerView) { + print("bannerViewWillPresentScreen") + } + + func bannerViewWillDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewWillDIsmissScreen") + } + + func bannerViewDidDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewDidDismissScreen") + } +} diff --git a/WOKA/Shop/Controller/ShopListingVC.swift b/WOKA/Shop/Controller/ShopListingVC.swift index f42ef41..bc106ab 100644 --- a/WOKA/Shop/Controller/ShopListingVC.swift +++ b/WOKA/Shop/Controller/ShopListingVC.swift @@ -6,11 +6,13 @@ // import UIKit +import GoogleMobileAds class ShopListingVC: UIViewController { @IBOutlet weak var tableView: UITableView! @IBOutlet weak var noDataStack: UIStackView! + @IBOutlet weak var adView: UIView! var vm = ShopListingVM() @@ -140,6 +142,42 @@ extension ShopListingVC : TableViewSRC{ } } +// MARK: - Google Ad Banner Delegate + +extension ShopListingVC : GADBannerViewDelegate{ + func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { + adView.isHidden = false + bannerView.alpha = 0 + bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1) + UIView.animate(withDuration: 0.2, animations: { + bannerView.alpha = 1 + }) + print("bannerViewDidReceiveAd") + } + + func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { + + print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") + } + + func bannerViewDidRecordImpression(_ bannerView: GADBannerView) { + print("bannerViewDidRecordImpression") + } + + func bannerViewWillPresentScreen(_ bannerView: GADBannerView) { + print("bannerViewWillPresentScreen") + } + + func bannerViewWillDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewWillDIsmissScreen") + } + + func bannerViewDidDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewDidDismissScreen") + } +} + + //extension UIViewController { // // func createCartButton(imageName: String, @@ -202,3 +240,4 @@ extension ShopListingVC : TableViewSRC{ // return customBarButton // } //} + diff --git a/WOKA/Shop/Controller/ShopProductsVC.swift b/WOKA/Shop/Controller/ShopProductsVC.swift index bf77f0c..0275dd9 100644 --- a/WOKA/Shop/Controller/ShopProductsVC.swift +++ b/WOKA/Shop/Controller/ShopProductsVC.swift @@ -6,6 +6,7 @@ // import UIKit +import GoogleMobileAds class ShopProductsVC: UIViewController { @@ -13,6 +14,7 @@ class ShopProductsVC: UIViewController { @IBOutlet weak var productCV: UICollectionView! @IBOutlet weak var spinnerView: UIActivityIndicatorView! @IBOutlet weak var noDataStack: UIStackView! + @IBOutlet weak var adView: UIView! var vm = ShopProductsVM() @@ -136,6 +138,42 @@ extension ShopProductsVC : CollectionViewSRC{ } } +// MARK: - Google Ad Banner Delegate + +extension ShopProductsVC : GADBannerViewDelegate{ + func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { + adView.isHidden = false + bannerView.alpha = 0 + bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1) + UIView.animate(withDuration: 0.2, animations: { + bannerView.alpha = 1 + }) + print("bannerViewDidReceiveAd") + } + + func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { + + print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") + } + + func bannerViewDidRecordImpression(_ bannerView: GADBannerView) { + print("bannerViewDidRecordImpression") + } + + func bannerViewWillPresentScreen(_ bannerView: GADBannerView) { + print("bannerViewWillPresentScreen") + } + + func bannerViewWillDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewWillDIsmissScreen") + } + + func bannerViewDidDismissScreen(_ bannerView: GADBannerView) { + print("bannerViewDidDismissScreen") + } +} + + // MARK: - Collection Flow Layout extension ShopProductsVC : UICollectionViewDelegateFlowLayout{ diff --git a/WOKA/Shop/Shop.storyboard b/WOKA/Shop/Shop.storyboard index 3f6caea..f0db6cf 100644 --- a/WOKA/Shop/Shop.storyboard +++ b/WOKA/Shop/Shop.storyboard @@ -1,9 +1,9 @@ - + - + @@ -33,10 +33,19 @@ - + - - + + + + + + + +