no message

This commit is contained in:
zeng 2025-07-10 16:35:54 +08:00
parent 9011b29cd9
commit 0375fc09a9

View File

@ -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()
}
}