no message
This commit is contained in:
parent
9011b29cd9
commit
0375fc09a9
@ -0,0 +1,139 @@
|
||||
//
|
||||
// SPAdManager+admob.swift
|
||||
// ThimraTV
|
||||
//
|
||||
// Created by 长沙佳儿 on 2025/7/9.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import GoogleMobileAds
|
||||
|
||||
extension SPRewardedAdManager {
|
||||
|
||||
fileprivate struct AssociatedKeys {
|
||||
static var admob_rewardedAd: Int?
|
||||
static var admob_needShowRewardedAd: Int?
|
||||
static var admob_isLoadingRewardedAd: Int?
|
||||
}
|
||||
|
||||
var admob_rewardedAd: RewardedAd? {
|
||||
set {
|
||||
objc_setAssociatedObject(self, &AssociatedKeys.admob_rewardedAd, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
}
|
||||
get {
|
||||
return objc_getAssociatedObject(self, &AssociatedKeys.admob_rewardedAd) as? RewardedAd
|
||||
}
|
||||
}
|
||||
///广告是否在加载中
|
||||
var admob_isLoadingRewardedAd: Bool {
|
||||
set {
|
||||
objc_setAssociatedObject(self, &AssociatedKeys.admob_isLoadingRewardedAd, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
}
|
||||
get {
|
||||
return (objc_getAssociatedObject(self, &AssociatedKeys.admob_isLoadingRewardedAd) as? Bool) ?? false
|
||||
}
|
||||
}
|
||||
|
||||
///是否需要展示广告,true广告加载完成会直接展示广告
|
||||
private var admob_needShowRewardedAd: Bool {
|
||||
set {
|
||||
objc_setAssociatedObject(self, &AssociatedKeys.admob_needShowRewardedAd, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
}
|
||||
get {
|
||||
return (objc_getAssociatedObject(self, &AssociatedKeys.admob_needShowRewardedAd) as? Bool) ?? false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///加载并展示广告
|
||||
func admob_loadAndShowRewardedAd(adInfo: SPAdInfo) {
|
||||
self.admob_needShowRewardedAd = true
|
||||
|
||||
if self.admob_isLoadingRewardedAd {
|
||||
return
|
||||
}
|
||||
|
||||
if self.admob_rewardedAd != nil {
|
||||
self.admob_show()
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
admob_loadRewardedAd(adInfo: adInfo)
|
||||
}
|
||||
|
||||
func admob_loadRewardedAd(adInfo: SPAdInfo) {
|
||||
guard !self.admob_isLoadingRewardedAd else { return }
|
||||
|
||||
let adUnitID = adInfo.ads_id ?? ""
|
||||
let request = Request()
|
||||
|
||||
self.admob_isLoadingRewardedAd = true
|
||||
spLog(message: "====Ad 加载广告")
|
||||
RewardedAd.load(with: adUnitID, request: request) { [weak self] rewardedAd, error in
|
||||
guard let self = self else { return }
|
||||
self.admob_isLoadingRewardedAd = false
|
||||
|
||||
if let error = error {
|
||||
self.admob_needShowRewardedAd = false
|
||||
self.loadFailHandler(error: error)
|
||||
spLog(message: "====Ad 广告加载失败")
|
||||
return
|
||||
}
|
||||
self.loadFinishHandler()
|
||||
|
||||
self.admob_rewardedAd = rewardedAd
|
||||
self.admob_rewardedAd?.fullScreenContentDelegate = self
|
||||
|
||||
if self.admob_needShowRewardedAd {
|
||||
self.admob_show()
|
||||
}
|
||||
spLog(message: "====Ad 广告加载成功")
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
///展示广告
|
||||
private func admob_show() {
|
||||
guard let rewardedAd = admob_rewardedAd, self.admob_needShowRewardedAd else {
|
||||
return print("====Ad wasn't ready.")
|
||||
}
|
||||
self.admob_needShowRewardedAd = false
|
||||
|
||||
// The UIViewController parameter is an optional.
|
||||
rewardedAd.present(from: nil) { [weak self] in
|
||||
let reward = rewardedAd.adReward
|
||||
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
|
||||
self?.userDidEarnRewardHandler()
|
||||
// TODO: Reward the user.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension SPRewardedAdManager: FullScreenContentDelegate {
|
||||
|
||||
/// Tells the delegate that the ad failed to present full screen content.
|
||||
func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
|
||||
self.admob_rewardedAd = nil
|
||||
self.admob_needShowRewardedAd = false
|
||||
self.displayFailHandler(error: error)
|
||||
}
|
||||
|
||||
/// Tells the delegate that the ad will present full screen content.
|
||||
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
|
||||
print("====Ad will present full screen content.")
|
||||
self.didShowHandler()
|
||||
}
|
||||
|
||||
/// Tells the delegate that the ad dismissed full screen content.
|
||||
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
|
||||
print("====Ad did dismiss full screen content.")
|
||||
self.admob_rewardedAd = nil
|
||||
self.didDismissHandler()
|
||||
|
||||
}
|
||||
|
||||
func adDidRecordClick(_ ad: any FullScreenPresentingAd) {
|
||||
self.didClickHandler()
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user