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