일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- createml
- 코테
- coreml
- tabman
- github
- widgetkit
- Coding Test
- UITableView
- Complication
- UIStackView
- Delegate Pattern
- watchkit
- UIDatePicker
- task.yield()
- Sendbird
- spring
- Apple Developer Academy
- Project
- swift concurrency
- ios
- WWDC22
- Firebase
- SwiftUI
- Flutter
- cloud functions
- Tuist
- fcm
- Swift
- app intents
- backend
- Today
- Total
azhy의 iOS 이야기
[iOS] Google AdMob 앱에 애드몹 광고 달기 본문
2022년 7월 21일에 작성됨
Google AdMob에 앱 추가
Google AdMob 회원가입이 안되어있으면 홈페이지에서 회원가입을 해주시고 앱 추가를 클릭해 주세요.
만약 본인의 앱이 앱 스토어에 등록되어 있으면 첫 번째 선택, 아직 등록되지 않은 상태면 두 번째 선택을 해주세요.
앱 준비 상태에 관해 문서를 보면 "AdMob에서 새 앱을 설정할 때는 앱이 검토 및 승인을 거쳐야 광고가 게재될 수 있습니다." 그리고 앱을 검토받으려면 첫 번째에 "앱을 게시해야 합니다."라고 적혀있습니다.
즉, 만약 앱을 등록하지 않은 상태에서는 AdMob을 테스트로 실행시켜 보고 정식으로 앱을 등록시킨 다음 검토를 받으면 됩니다. ( 앱 스토어에 앱 연결하기 참고 )
광고 단위 추가
앱을 추가했으면 광고단위 추가 버튼을 클릭해 주세요.
다양한 광고들이 보입니다. 본인이 원하는 광고를 선택해 주시면 되는데, 저는 배너광고를 사용할 거라 배너를 선택하겠습니다. 다음에 광고 단위 이름을 설정해 주시면 1. 앱 ID, 2. 광고 단위 ID 가 보이는데 복사해서 준비해 주세요.
Xcode 세팅
// CocoaPods이나
pod 'Google-Mobile-Ads-SDK'
// SPM
https://github.com/googleads/swift-package-manager-google-mobile-ads.git
공식문서를 참고해서 CocoaPods이나 SPM을 이용해서 앱에 애드몹을 추가해 주세요.
// AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 구글 광고 초기화 -> 모바일 광고 SDK 초기화해줘야함. 이 작업은 한 번만 수행하면 됨 (최대한 빨리 호출하는게 좋다)
//
GADMobileAds.sharedInstance().start(completionHandler: nil)
return true
}
AppDelegate에서 구글 광고를 초기화해 주세요.
info.plist - GADApplicationIdentifier, value 값으로 위에서 복사한 1. 앱 ID를 입력해 주세요. 실제 광고든 테스트광고든 앱 ID는 동일하게 들어가 줘야 합니다.
두 번째 줄 GADIsAdManagerApp, true는 제가 진행하다가 어떤 에러가 떴는데 Ads SDK was initialized without AppMeasurement 스택오버플로우에서 해결방법을 찾아서 혹시나 같은 에러가 뜨신 분들은 GADIsAdManagerApp, true 도 같이 넣어주시고 아무 이상 없으신 분들은 그냥 넘어가셔도 됩니다.
이제 모든 기본 세팅이 끝났습니다. UIKit이랑 SwiftUI 코드 구성이 조금 다르다 보니 따로 두 가지 케이스 모두 다 한번 정리해 보겠습니다.
UIKit
private let demoAdmobView: GADBannerView = { // admob 부분
var view = GADBannerView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
...
override func viewDidLoad() {
view.addSubview(demoAdmobView)
demoAdmobView.widthAnchor.constraint(equalToConstant: GADAdSizeBanner.size.width).isActive = true
demoAdmobView.heightAnchor.constraint(equalToConstant: GADAdSizeBanner.size.height).isActive = true
demoAdmobView.adUnitID = "ca-app-pub-3940256099942544/2934735716" // test Key
demoAdmobView.rootViewController = self
demoAdmobView.load(GADRequest())
demoAdmobView.delegate = self
}
// GADBannerViewDelegate
//
extension ViewController : GADBannerViewDelegate {
public func adViewDidReceiveAd(_ bannerView: GADBannerView) {
bannerView.alpha = 0
UIView.animate(withDuration: 1) {
bannerView.alpha = 1
}
}
}
adUnitID 에는 테스트로 실행시키실 거면 테스트 광고 사용 설정을 보시고 테스트 키를 넣어주시면 되고, 실제 앱에 올라가는 광고를 넣으실 거면 위에서 복사한 2. 광고 단위 ID를 넣어주시면 됩니다. GADBannerViewDelegate 부분은 광고를 받아왔을 때 배너에 광고를 표시해 주기 위한 Delegate라고 하는데 광고 로드 시 발생하는 에러 같은 것도 처리가 가능하다고 합니다.
근데 저는 이거 없어도 광고가 떠서.. 정확하게 어떤 것을 하는 친구인지는 잘 모르겠네요.. adViewDidReceiveAd 말고도 그런 에러나 예외처리 분기를 다루는 메서드들이 존재하는 것 같습니다. 일단 이렇게만 설정하고 넘어가겠습니다.
SwiftUI
struct GADBanner: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> some UIViewController {
let view = GADBannerView(adSize: GADAdSizeBanner)
let viewController = UIViewController()
view.adUnitID = "ca-app-pub-3940256099942544/2934735716" // test Key
view.rootViewController = viewController
viewController.view.addSubview(view)
viewController.view.frame = CGRect(origin: .zero, size: GADAdSizeBanner.size)
view.load(GADRequest())
return viewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
}
}
...
@ViewBuilder func admob() -> some View {
// admob
GADBanner().frame(width: GADAdSizeBanner.size.width, height: GADAdSizeBanner.size.height)
}
var body: some View {
VStack {
...
admob()
} // VStack
} // body
UIKit에서 했던 거랑 마찬가지로 나중에 출시하면 adUnitId에 본인의 ID를 넣어주시면 됩니다. 그리고 저는 SwiftUI에서는 AppDelegate에서 진행한 광고초기화는 따로 안 해도 돌아가는 거 같습니다.. 만약 안되시면 광고초기화 코드를 한번 넣어서 실행시켜 보세요!
구글 애드몹 앱 검토
추가로 앱 스토어에 등록되지 않은 앱으로 진행하다가 앱 스토어에 등록을 하고 구글 애드몹에서 검토받는 방법을 알아보겠습니다.
앱 스토어에 등록되지 않은 상태면 저렇게 검토가 필요하다고 떠있습니다. 앱 스토어 옆에 추가 버튼을 클릭해 주세요.
여기서 본인 앱의 앱 스토어 링크나 스토어 ID를 입력하면 저렇게 앱이 나옵니다. 추가를 클릭하면
이렇게 앱이 업데이트되었다고 알림이 뜨고 구글은 앱을 검토합니다.
이렇게 준비 중에서 준비됨이라고 바뀌면 정상적으로 검토가 끝났고 애드몹을 사용할 수 있는 상태가 됐습니다.
이 상태에서 본인의 광고 단위 ID를 정상적으로 넣었다면 애드몹이 뜨실 겁니다.
'iOS' 카테고리의 다른 글
[iOS] 앱 심사 리젝 해결 - App Crash, Report 확인 (1) | 2024.11.13 |
---|---|
[iOS] 두 번째 앱 출시 후기 (0) | 2024.11.12 |
[iOS] WidgetKit[4] - Widget View 바로 업데이트 시키기 (0) | 2024.11.12 |
[iOS] WidgetKit[3] - App과 Extension, UserDefaults 공유하기 + Realm DB 공유 (0) | 2024.11.12 |
[iOS] WidgetKit[2] - TimelineEntry, TimelineProvider (3) | 2024.11.12 |