#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 ***")
}