「SDK8 AdMob Mediation Banner」修訂間的差異
跳至導覽
跳至搜尋
imported>Wikiuser (→簡介) |
CharlesWang(留言 | 貢獻) |
||
| 行 133: | 行 133: | ||
| align="center" | [[檔案:2021-08-06-AdMob_Banner1200.PNG|x300px]] | | align="center" | [[檔案:2021-08-06-AdMob_Banner1200.PNG|x300px]] | ||
|} | |} | ||
<!-- | |||
== <b>簡介</b> == | |||
首先先完成 mediation 基本 setup [[AdMob Mediation Setup]], AdMob 將會透過此客製化 event 取得 TADBanner。 | |||
== <b>TAMedia Banner 廣告支援格式</b> == | |||
{| class="wikitable" style="width:50%" | |||
|- | |||
! 廣告格式 (寬度x高度) !! AdMob 對應常數值 | |||
|- | |||
| align="center"|BANNER 320x50 || align="center"|kGADAdSizeBanner | |||
|- | |||
| align="center"|BANNER 1200x627 || align="center"|GADAdSizeFromCGSize(相對應比例CGSize) | |||
|- | |||
| align="center"|BANNER 320x50 || align="center"|kGADAdSizeMediumRectangle | |||
|- | |||
|} | |||
== <b>實作方式</b> == | |||
<source> | |||
import Foundation | |||
import GoogleMobileAds | |||
import TAMediaAdsFramework | |||
class TADCustomEventBanner: NSObject, GADMediationBannerAd { | |||
var view: UIView { | |||
return bannerView ?? UIView() | |||
} | |||
var bannerView: TADBannerView? | |||
/// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. | |||
var delegate: GADMediationBannerAdEventDelegate? | |||
/// Completion handler called after ad load | |||
var completionHandler: GADMediationBannerLoadCompletionHandler? | |||
func loadBanner(for adConfiguration: GADMediationBannerAdConfiguration, | |||
completionHandler: @escaping GADMediationBannerLoadCompletionHandler) { | |||
let tadRequest = TADRequest() | |||
tadRequest.isTesting = adConfiguration.isTestRequest | |||
tadRequest.setLocationWithLatitude(adConfiguration.userLatitude, longitude: adConfiguration.userLongitude, accuracy: adConfiguration.userLocationAccuracyInMeters) | |||
let adSize = adConfiguration.adSize | |||
let adRatio: CGFloat = floor((adSize.size.width/adSize.size.height)*100)/100 | |||
let ta1200x627AdRatio: CGFloat = floor((1200.0/627)*100)/100 | |||
/// 依據不同的 size 設定 | |||
if GADAdSizeEqualToSize(adSize, GADAdSizeBanner) { | |||
self.bannerView = TADBannerView(adSize: kTADAdSizeBanner) | |||
} else if GADAdSizeEqualToSize(adSize, GADAdSizeMediumRectangle) { | |||
self.bannerView = TADBannerView(adSize: kTADAdSizeMediumRectangle) | |||
} else if adRatio == ta1200x627AdRatio { | |||
self.bannerView = TADBannerView(adSize: TADAdSize1200x627RatioBannerWithWidth(adSize.size.width)) | |||
} else { | |||
let error = NSError(domain: "com.TAmedia.TADCustomBanner", code: GADErrorCode.mediationInvalidAdSize.rawValue, userInfo: nil) | |||
delegate = completionHandler(nil, error) | |||
} | |||
self.completionHandler = completionHandler | |||
self.bannerView?.delegate = self | |||
self.bannerView?.adUnitID = adConfiguration.credentials.settings["parameter"] as? String | |||
self.bannerView?.turnOnMicrophone = false | |||
self.bannerView?.rootViewController = adConfiguration.topViewController | |||
self.bannerView?.load(tadRequest) | |||
} | |||
} | |||
// MARK: TADBannerViewDelegate | |||
extension TADCustomEventBanner: TADBannerViewDelegate { | |||
func adViewDidReceiveAd(_ view: TADBannerView!) { | |||
print("CustomBanner - adViewDidReceiveAd!!") | |||
if let handler = completionHandler { | |||
delegate = handler(self, nil) | |||
} | |||
} | |||
func adView(_ view: TADBannerView!, didFailToReceiveAdWithError error: TADRequestError!) { | |||
print("CustomBanner - didFailToReceiveAdWithError!! error: \(String(describing: error))") | |||
if let handler = completionHandler { | |||
delegate = handler(nil, error) | |||
} | |||
} | |||
func adViewWillPresentScreen(_ adView: TADBannerView!) { | |||
print("CustomBanner - adViewWillPresentScreen!!") | |||
} | |||
func adViewWillDismissScreen(_ adView: TADBannerView!) { | |||
print("CustomBanner - adViewWillDismissScreen!!") | |||
} | |||
func adViewDidDismissScreen(_ adView: TADBannerView!) { | |||
print("CustomBanner - adViewDidDismissScreen!!") | |||
} | |||
func adViewWillLeaveApplication(_ adView: TADBannerView!) { | |||
print("CustomBanner - adViewWillLeaveApplication!!") | |||
delegate?.reportClick() | |||
} | |||
} | |||
</source> | |||
== <b> Banner 畫面展示</b> == | |||
{| width="70%" border="1" | |||
|- | |||
| align="center" | 320x50 | |||
| align="center" | 1200x627 | |||
|- | |||
| align="center" | [[檔案:2021-08-06-AdMob_Banner320.PNG|x300px]] | |||
| align="center" | [[檔案:2021-08-06-AdMob_Banner1200.PNG|x300px]] | |||
|} | |||
--> | |||
於 2023年3月1日 (三) 09:23 的修訂
簡介
首先將 AdMob 和 TAMedia SDK 整合至專案中,AdMob SDK可以在這裡下載(https://developers.google.com/mobile-ads-sdk/download?#downloadios)
接著在 AdMob Mediation 新增 Custom Event (https://mediation.admob.com)
新增 Custom Event 的詳細說明可以參考 (https://developers.google.com/admob/ios/custom-events/banner)
最後,在專案中加入與 Custom Event 對應的 Class,其中 Custom Event 的 Class Name 需要和專案新增的 Class Name 保持一致
例如新增的 Class Name 為 TADCustomBanner,Custom Event 的 Class Name 則必須是 專案名稱.TADCustomBanner。(以 Swift 編寫的專案需加上專案名稱;若為以 OC編寫,則放入 Class Name)
TAMedia Banner 廣告支援格式
| 廣告格式 (寬度x高度) | AdMob 對應常數值 |
|---|---|
| BANNER 320x50 | kGADAdSizeBanner |
| BANNER 1200x627 | GADAdSizeFromCGSize(相對應比例CGSize) |
| BANNER 320x50 | kGADAdSizeMediumRectangle |
實作方式
- MediationViewController.swift
// MediationViewController.swift
// 匯入 Admob SDK 定義
import GoogleMobileAds
class MediationViewController: UIViewController, GADBannerViewDelegate {
// 使用 GADBannerView 物件來介接 TADBannerView
var bannerView: GADBannerView!
func viewDidLoad() {
super.viewDidLoad()
// 初始化 bannerView,根據需求設定大小
bannerView = GADBannerView(adSize: kGADAdSizeBanner)
// 自行定義method 將 bannerView addSubview 至畫面
addBannerViewToView(bannerView)
self.bannerView.adUnitID = "ca-app-pub-adUnitID"
self.bannerView.rootViewController = self
self.bannerView.delegate = self
}
}
- Custom Banner View
// TADCustomBanner.swift
// 匯入 TAMedia SDK 定義
import TAMediaAdsFramework
// 匯入 Admob SDK 定義
import GoogleMobileAds
class TADCustomBanner: NSObject, GADCustomEventBanner, TADBannerViewDelegate {
// 宣告 TADBannerView 物件
var bannerView: TADBannerView?
// 宣告 GADCustomEventBannerDelegate 物件
var delegate: GADCustomEventBannerDelegate?
required override init() {
super.init()
}
func requestAd(_ adSize: GADAdSize, parameter serverParameter: String?, label serverLabel: String?, request: GADCustomEventRequest) {
// 將 GADCustomEventRequest 物件裡的資訊轉入 TADRequest 物件
let tadRequest = TADRequest()
tadRequest.showLog = true
tadRequest.isTesting = request.isTesting
tadRequest.location = request.userLocationDescription
tadRequest.setLocationWithLatitude(request.userLatitude, longitude: request.userLongitude, accuracy: request.userLocationAccuracyInMeters)
// 必須將 bannerView 物件初始化
// 若是你使用banner 1200 627, 請記得要使用 TADAdSize1200x627RatioBannerWithWidth 或 TADAdSize1200x627RatioBannerWithHeight
// 因為此為 TAMedia 特別定義的格式
// e.g.
// self.bannerView = TADBannerView(adSize: TADAdSize1200x627RatioBannerWithWidth(adSize.size.width))
//
self.bannerView = TADBannerView(adSize: TADAdSizeFromCGSize(adSize.size))
// 必須設定delegate
self.bannerView?.delegate = self
// 必須設定 adUnitID,serverParameter 為在 Admob 裡設定的 AD Unit ID
self.bannerView?.adUnitID = serverParameter
// 必需設定rootViewController
self.bannerView?.rootViewController = UIApplication.shared.keyWindow?.rootViewController?.presentedViewController
// 設定廣告若為影片時的聲音開關
self.bannerView?.turnOnMicrophone = false
// 必須載入廣告
self.bannerView?.load(tadRequest)
}
}
//MARK: TADBannerViewDelegate
extension TADCustomBanner {
func adViewDidReceiveAd(_ view: TADBannerView!) {
print("CustomBanner - adViewDidReceiveAd!!")
delegate?.customEventBanner(self, didReceiveAd: view)
}
func adView(_ view: TADBannerView!, didFailToReceiveAdWithError error: TADRequestError!) {
print("CustomBanner - didFailToReceiveAdWithError!! error: \(String(describing: error))")
}
func adViewWillPresentScreen(_ adView: TADBannerView!) {
print("CustomBanner - adViewWillPresentScreen!!")
delegate?.customEventBannerWillPresentModal(self)
}
func adViewWillDismissScreen(_ adView: TADBannerView!) {
print("CustomBanner - adViewWillDismissScreen!!")
delegate?.customEventBannerWillDismissModal(self)
}
func adViewDidDismissScreen(_ adView: TADBannerView!) {
print("CustomBanner - adViewDidDismissScreen!!")
delegate?.customEventBannerDidDismissModal(self)
}
func adViewWillLeaveApplication(_ adView: TADBannerView!) {
print("CustomBanner - adViewWillLeaveApplication!!")
delegate?.customEventBannerWillLeaveApplication(self)
}
}
Banner 畫面展示
| 320x50 | 1200x627 |