Я использовал очень простой подход. У меня есть класс делегата, который загружает объявление с вознаграждением и сообщает представлению, что оно загружено, следовательно, представление представляет его. Когда пользователь просматривает объявление полностью, тот же делегат получает обратный вызов успеха и информирует об этом представление.
Код делегата выглядит так: -
class RewardedAdDelegate: NSObject, GADRewardedAdDelegate, ObservableObject {
@Published var adLoaded: Bool = false
@Published var adFullyWatched: Bool = false
var rewardedAd: GADRewardedAd? = nil
func loadAd() {
rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
rewardedAd!.load(GADRequest()) { error in
if error != nil {
self.adLoaded = false
} else {
self.adLoaded = true
}
}
}
/// Tells the delegate that the user earned a reward.
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
adFullyWatched = true
}
/// Tells the delegate that the rewarded ad was presented.
func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
self.adLoaded = false
}
/// Tells the delegate that the rewarded ad was dismissed.
func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {}
/// Tells the delegate that the rewarded ad failed to present.
func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {}
}
Теперь вам нужно представление, чтобы инициировать и представить RewardedAd: -
struct RewardedAd: View {
@ObservedObject var adDelegate = RewardedAdDelegate()
var body: some View {
if adDelegate.adLoaded && !adDelegate.adFullyWatched {
let root = UIApplication.shared.windows.first?.rootViewController
self.adDelegate.rewardedAd!.present(fromRootViewController: root!, delegate: adDelegate)
}
return Text("Load ad").onTapGesture {
self.adDelegate.loadAd()
}
}
}
Пояснение: - В представлении выше, когда пользователь нажимает на Load Ad
, мы инициируем загрузку, а затем делегат обновляет опубликованное логическое значение. Это сообщает нашему представлению, что объявление загружено, и мы вызываем: -
let root = UIApplication.shared. windows .first? .RootViewController self.adDelegate.rewardedAd! .Present (fromRootViewController: root! Это проинформирует нас, что нам нужно вознаградить пользователя сейчас (вы можете добавить свой способ обработки / вознаграждения пользователя).
Надеюсь, это поможет. Удачного кодирования ...