首页 > 解决方案 > AdMob 实时广告未在真实设备上显示

问题描述

我使用了 AdMob 在他们的页面上提供的带有 ID 的广告来测试连接,这些广告在模拟器和真实设备上都可以使用。

当我使用测试设备进行实时广告尝试时,它们会出现在模拟器上(并非总是用于 iPad 上的横幅广告),但在我的物理设备 (iPad) 上,它们不会出现在横幅广告或插页式广告中?

为什么是这样?

谢谢。

横幅代码:

func initAdMobBanner() {

    if UIDevice.current.userInterfaceIdiom == .phone {
        // iPhone
        adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 320, height: 50))
        adMobBannerView.frame = CGRect(x: (view.frame.size.width/2)-160, y: view.frame.size.height, width: 320, height: 50)
    } else  {
        // iPad
        adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 468, height: 60))
        adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 468, height: 60)
    }

    adMobBannerView.adUnitID = ADMOB_BANNER_UNIT_ID
    adMobBannerView.rootViewController = self
    adMobBannerView.delegate = self
    self.navigationController?.view.addSubview(adMobBannerView)

    let request = GADRequest()
    if PACConsentInformation.sharedInstance.isRequestLocationInEEAOrUnknown || PACConsentInformation.sharedInstance.consentStatus.rawValue == 1 {
        if PACConsentInformation.sharedInstance.consentStatus.rawValue == 0 || PACConsentInformation.sharedInstance.consentStatus.rawValue == 1 {
            print("no consent (show non-personalised ads) or unknown")
            let extras = GADExtras()
            extras.additionalParameters = ["npa": "1"]
            request.register(extras)
        }
    }
    adMobBannerView.load(request)
}


// Hide the banner
func hideBanner(_ banner: UIView) {
    banner.frame = CGRect(x: view.frame.size.width/2 - banner.frame.size.width/2, y: view.frame.size.height, width: banner.frame.size.width, height: banner.frame.size.height)
    banner.isHidden = true
}

// Show the banner
func showBanner(_ banner: UIView) {
    if #available(iOS 11.0, *) {
        banner.frame = CGRect(x: view.frame.size.width/2 - banner.frame.size.width/2, y: view.frame.size.height - view.safeAreaInsets.bottom, width: banner.frame.size.width, height: banner.frame.size.height)
    } else {
        banner.frame = CGRect(x: view.frame.size.width/2 - banner.frame.size.width/2, y: view.frame.size.height, width: banner.frame.size.width, height: banner.frame.size.height)
    }
    banner.isHidden = false
}

// AdMob banner available
func adViewDidReceiveAd(_ view: GADBannerView) {
    if self.navigationController?.visibleViewController == self {
        let translateTransform = CGAffineTransform(translationX: 0, y: adMobBannerView.bounds.size.height)
        adMobBannerView.transform = translateTransform
        showBanner(adMobBannerView)
        UIView.animate(withDuration: 0.5) {
            self.adMobBannerView.transform = CGAffineTransform.identity
        }
    }
}

// NO AdMob banner available
func adView(_ view: GADBannerView, didFailToReceiveAdWithError error: GADRequestError) {
    // Reposition the banner ad to create a slide up effect
    let translateTransform = CGAffineTransform(translationX: 0, y: adMobBannerView.bounds.size.height)
    adMobBannerView.transform = translateTransform
    hideBanner(adMobBannerView)
    UIView.animate(withDuration: 0.5) {
        self.adMobBannerView.transform = CGAffineTransform.identity
    }
}

@objc func layoutSubviews() {
    if SpeakTimerPro.hasSpeakTimerPro {
    }
    else {
        initAdMobBanner()
    }

}

标签: iosswiftxcodeadmob

解决方案


确保添加您的测试设备,例如:

let request = GADRequest()
request.testDevices = [ "2077ef9a63d2b398840261c8221a0c9b" ] // Sample device ID

要查找您的设备 ID,请检查控制台输出,该输出应如下所示:

<Google> To get test ads on this device, call:
request.testDevices = @[ @"2077ef9a63d2b398840261c8221a0c9b" ];

推荐阅读