Swift — AdMob Вознаграждает обратные звонки по объявлениям, чтобы узнать, посмотрел ли Пользователь все видео

#ios #swift #admob

Вопрос:

Я следовал новому API вознагражденной рекламы Google для версии 8 (SDK 8.0.0). Руководство написано на Objective-C, но я написал ниже на Swift.

Как я узнаю, полностью ли пользователь просмотрел видео, чтобы я мог выдать ему вознаграждение, и как я узнаю, отменили ли они его до того, как должно быть выдано вознаграждение?

 import GoogleMobileAds

class ViewController: UIViewController {

    var rewardedAd: GADRewardedAd?

    func loadRewardedAd() {

        let adUnitID = ""...
        
        let request = GADRequest()
        
        GADRewardedAd.load(withAdUnitID: adUnitID, request: request) { [weak self](rewardedAd, error) in
            
            if let error = error {
                print("Failed to load rewarded ad with error: (error.localizedDescription)")
                return
            }
            
            self?.rewardedAd = rewardedAd
            
            self?.rewardedAd?.fullScreenContentDelegate = self
        
            self?.presentRewardedVideo()
        }
    }

    func presentRewardedVideo() {

        guard let rewardedAd = rewardedAd else { return }

        rewardedAd.present(fromRootViewController: self) {
            
            let reward = rewardedAd.adReward
            print("Reward received with currency (reward.amount), amount (reward.amount.doubleValue)")
            
        }
    }
}

extension ViewController: GADFullScreenContentDelegate {

    /// Tells the delegate that an impression has been recorded for the ad.
    func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
        print("0. impression recorded")
    }

    /// Tells the delegate that the ad presented full screen content.
    func adDidPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        print("1. ad presented")
    }
    
    /// Tells the delegate that the ad will dismiss full screen content.
    func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        print("2. willDimiss ad")
    }
    
    /// Tells the delegate that the ad dismissed full screen content.
    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        print("3. didDimiss ad")
    }
    
    /// Tells the delegate that a click has been recorded for the ad.
    func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
        print("4. impression click detected")
    }
    
    /// Tells the delegate that the ad failed to present full screen content.
    func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
        print("5. didFailToReceiveAdWithError: (error.localizedDescription)")
    }
}
 

Ответ №1:

Согласно этому видео с объяснением AdMob от Google, видео с вознаграждениями нельзя пропускать (мин. 2:45). Как только пользователь соглашается посмотреть рекламу, он не может отменить ее.

введите описание изображения здесь

Насколько я знаю, смотрел ли пользователь всю рекламу целиком, в видео есть таймер обратного отсчета (предоставленный Google). Когда таймер достигает 0 и отображается кнопка X для отключения vc, запускается обратный вызов для rewardedAd.present , и тогда вы можете что-то сделать.

 rewardedAd.present(fromRootViewController: self) {
            
    let reward = rewardedAd.adReward
    print("Reward received with currency (reward.amount), amount (reward.amount.doubleValue)")

    print("*** User Watched the Entire Video - Now Do Something ***")
}