25. [iOS/Swift] AdMob Rewarded (보상형) 광고 구현하기 (Google-Mobile-Ads-SDK 8.13.0)
리워드 광고 아이디 만들기
Admob 사이트로 이동해서 리워드 광고 아이디를 만들겠습니다.
Google AdMob: 모바일 앱 수익 창출
인앱 광고를 사용하여 모바일 앱에서 더 많은 수익을 창출하고, 사용이 간편한 도구를 통해 유용한 분석 정보를 얻고 앱을 성장시켜 보세요.
admob.google.com
시작하기를 클릭합니다.
앱 클릭 > TestBannerAdApp 클릭
(AdMod 배너 광고를 구현할 때 만들 앱이 있어서 이 앱을 선택하겠습니다. 앱이 없으신 분들은 앱 추가를 클릭하셔서 앱을 생성하시면 됩니다. 앱 추가 방법은 AdMob배너 광고 구현을 참고하시면 됩니다.)
광고 단위 클릭 > 광고 단위 추가 클릭
보상형 전면 광고 선택 클릭
광고 단위 이름을 입력 > 광고 단위 만들기 클릭
(리워드 수량은 보상형 광고 시청시 지급할 수치를 설정하는 란입니다.)
완료를 클릭합니다.
(1과 2에 있는 아이디는 기능 구현시 필요하므로 잘 보관합니다. 메모하지 않아도 나중에 확인하는 것도 가능합니다.)
xcode에서 프로젝트 생성하기
App 선택 > Next 클릭
Product Name 입력 > Next 클릭
터미널을 열어 RewardedAd 폴더로 이동 > 아래 명령어로 코코팟을 초기화합니다.
pod init
Podfile을 열어 수정합니다.
open Podfile
다음 코드를 추가하고 저장합니다.
pod 'Google-Mobile-Ads-SDK'
파일을 저장했다면 터미널로 돌아와 아래 명령어를 입력합니다.
// Macbook
pod install
// Macbook M1
arch -x86_64 pod install --repo-update
.xcworkspace로 된 파일을 xcode로 엽니다.
AppDelegate.swift 파일을 열어 아래 코드를 추가합니다.
import GoogleMobileAds
...
GADMobileAds.sharedInstance().start(completionHandler: nil)
Main으로 이동후 ViewController에 버튼을 추가합니다.
버튼의 클릭 이벤트를 생성합니다.
아래 코드를 입력합니다.
import UIKit
import GoogleMobileAds
class ViewController: UIViewController, GADFullScreenContentDelegate {
// The rewarded video ad
var rewardedAd: GADRewardedAd?
override func viewDidLoad() {
super.viewDidLoad()
}
fileprivate func loadRewardVideoAd() {
GADRewardedAd.load(withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest()) { (ad, error) in
if let error = error {
print("오류로 인해 보상광고를 로드하지 못했습니다 : \(error.localizedDescription)")
return
}
print("보상광고가 로드되었습니다.")
self.rewardedAd = ad
self.rewardedAd?.fullScreenContentDelegate = self
}
}
func presentRewardVideo() {
DispatchQueue.background(background: {
// do something in background
self.loadRewardVideoAd()
}, completion:{
// when background job finished, do something in main thread
if let ad = self.rewardedAd {
// reward the user
ad.present(fromRootViewController: self) {
print("보상 지급 : \(ad)")
}
} else {
// the Ad failed to present .. show alert message
let alert = UIAlertController(title: "알림", message: "보상광고 정보를 불러오고 있습니다.\n잠시 후에 다시 시도해 주세요.",preferredStyle: .alert)
let alertAction = UIAlertAction(title: "OK", style: .cancel, handler: { [weak self] action in
self?.loadRewardVideoAd()
})
alert.addAction(alertAction)
self.present(alert, animated: true, completion: nil)
}
})
}
@IBAction func playRewardedAdBtn(_ sender: Any) {
presentRewardVideo()
}
}
extension DispatchQueue {
static func background(delay: Double = 0.0, background: (()->Void)? = nil, completion: (() -> Void)? = nil) {
DispatchQueue.global(qos: .background).async {
background?()
if let completion = completion {
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
completion()
})
}
}
}
}
결과물