Soumik Datta
Soumik Datta

Reputation: 11

Google Admob banner ads are not working in swiftui

I updated Google-Mobile-Ads-SDK v-7* to v-8* in my SwiftUI application. After updated, I am facing these errors for representing banner ads.

my code is

struct GADBannerViewControllerForSpeedometer: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
    
    
    let view = GADBannerView(adSize: kGADAdSizeBanner) // *Error: Cannot find 'GADBannerView' in scope*
    let viewController = UIViewController()
    //https://developers.google.com/admob/android/test-ads#sample_ad_units
    view.adUnitID = "ca-app-pub-3940256099942544/2934735716"
    view.rootViewController = viewController
    viewController.view.addSubview(view)
    viewController.view.frame = CGRect(origin: .zero, size: kGADAdSizeBanner.size) // *Error: Cannot find 'kGADAdSizeBanner' in scope*
    view.load(GADRequest()) // *Error: Cannot find 'GADRequest' in scope*
    return viewController
}

func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} 
}

I did not find any solution, in fact, google documentation is difficult to implement this new changes.

Upvotes: 1

Views: 1350

Answers (1)

Sergei Volkov
Sergei Volkov

Reputation: 1154

final class BannerVC: UIViewControllerRepresentable  {
        
        init(size: CGSize) {
            self.size = size
        }
        var size: CGSize

        func makeUIViewController(context: Context) -> UIViewController {
            let view = GADBannerView(adSize: GADAdSizeFromCGSize(size))
            let viewController = UIViewController()
            view.adUnitID = "..."
            view.rootViewController = viewController
            viewController.view.addSubview(view)
            viewController.view.frame = CGRect(origin: .zero, size: size)
            
            
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                let gadRequest = GADRequest()
                DispatchQueue.main.async {
                    gadRequest.scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
                }
                view.load(gadRequest)
            })
            return viewController
        }
        func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
    }

Implement banner where you need

BannerVC(size: CGSize(width: UIScreen.main.bounds.width, height: 60))
        .frame(width: UIScreen.main.bounds.width,
               height: 60,
               alignment: .center)

Upvotes: 2

Related Questions