앱의 수익화는 앱을 유지하기 위해 정말 중요한 부분이라고 생각한다. 그래서 SeoulSalam에도 Google Admob을 이용해 광고를 게재중이었다
iOS 앱에 광고를 게재 하는 방법은 여러가지인데, 그 중 가장 인기있는 것은 Google Admob이다.
이전에는 애플에서 직접운영하는 iAD도 있었지만, deprecated 되었고, Amazon Mobile Ads도 몇 년 전에 deprecated되었다.
Meta Audience Network 또한 사용되지만, 필자 개인적인 경험으로는 TIN을 요구하는 것도 그렇고, 계좌 연결 그리고 앱 인증까지 Google AdMob 보다는 더 복잡한 부분이 있었다.
위 인증 상황을 해결하는 데에까지 총 7일 이상의 시간이 소요되었기 때문에, 그 사이에 AdMob인증이 완료되어 그쪽을 사용하는 것으로 했다.
따라서 지금부터 AdMob 연동을 설명하도록 하겠다.
우선 회원가입과 로그인을 끝내면 다음과 같은 메뉴를 좌측에서 볼 수 있다.
여기서 앱 추가를 하도록 하자. 그러면 플랫폼(iOS, 안드로이드)를 물어보고, 앱스토어에 이미 등록된 앱인지 물어볼 것이다. 지금 되어있지 않더라도 미리 광고단위를 만들고 test를 할 수 있기에, 현 시점에서 가능한 메뉴로 바로 만들어두도록 하자. 만약에 등록되어있는 앱이라면, 앱 이름으로 바로 접근할 수 있다.
그 후엔 광고 단위로 들어가 광고 단위 추가를 하도록 하자.
그러면 다음과 같은 종류의 광고 단위를 제시해준다.
그렇게 되면 1번 이미지도 돌아오게 되어서 광고단위의 이름 밑에 'ca-app-pub-000000000000' 형태로 아이덴티파이어가 생성이 될것이다.
그 후엔 Xcode를 켜준뒤에
SPM을 이용해 Google-Mobile-Ads-SDK를 추가해주고, Info를 SourceCode로 열어주자!
그리고 Info 에 아이덴티파이어를 다음과 같이 추가해주자.
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-000000000~00000000</string>
그리고 다음과 같이 App파일에 완료핸들러를 호출하도록 합시다.
import GoogleMobileAds
//...
init() {
GADMobileAds.sharedInstance().start(completionHandler: nil)
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
그리고 다음의 코드로 BannerAd 구조체를 만들어줬다. (함수로 배너 뷰를 생성해주는 코드도 있기도 하고 여러가지가 있으나, 필자는 개인적으로 이게 제일 편했다) 작성한지 몇달이 된 코드이기 때문에 참고한 출처도 같이 표시하고 싶으나 기억이 안나는 점 양해부탁드립니다...ㅜㅜ
import SwiftUI
import GoogleMobileAds
struct BannerAd: UIViewRepresentable{
var unitID: String
func makeCoordinator() -> Coordinator {
return Coordinator()
}
func makeUIView(context: Context) -> GADBannerView{
let adView = GADBannerView(adSize: GADAdSizeBanner)
adView.adUnitID = unitID
adView.rootViewController = UIApplication.shared.getRootViewController()
adView.delegate = context.coordinator
adView.load(GADRequest())
return adView
}
func updateUIView(_ uiView: GADBannerView, context: Context) {
}
class Coordinator: NSObject, GADBannerViewDelegate {
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
print("bannerViewDidReceiveAd")
}
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}
func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
print("bannerViewDidRecordImpression")
}
func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
print("bannerViewWillPresentScreen")
}
func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewWillDIsmissScreen")
}
func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewDidDismissScreen")
}
}
}
extension UIApplication{
func getRootViewController() -> UIViewController{
guard let screen = self.connectedScenes.first as? UIWindowScene else{
return .init()
}
guard let root = screen.windows.first?.rootViewController else{
return .init()
}
return root
}
}
그리고 불러오고 싶은 뷰에서
BannerAd(unitID: "ca-app-pub-00000000000/0000000")
.frame(height: 50)
위와같은 코드로 불러와준다면,
다음과 같이 테스트 버전으로 성공한 것을 볼 수 있다.
사실 캡쳐화면이 테스트모드인 데에는 이유가 있는데......
필자가 SeoulSalam 2.0 출시를 준비하면서 admob관련해서 실제 앱에서 어떻게 넘어가는지 테스트를 했었고...2~3번의 탭이 이어지자..
광고 Ban을 받아버렸다...ㅜㅜㅜㅜ
대략 한 달 넘게 걸린다는데....제발 돌아와줬으면 좋겠다...ㅠ
'iOS' 카테고리의 다른 글
StoreKit 2) 앱스토어 리뷰 가이드라인을 충족하는 In-App Purchase 구현 (0) | 2023.06.10 |
---|---|
오류해결 공유) The address you submitted couldn't be verified. Review the address, edit if needed, and click Add. (0) | 2023.06.10 |
TCA - Reducer -> ReducerProtocol (0) | 2023.06.09 |
TCA 뷰 컴포넌트 만들기 - Store vs ViewStore 그리고 @ObservedObject (0) | 2023.06.07 |
TCA(리덕스패턴)과 MVVM, 그리고 MVC [2 - 完] (0) | 2023.05.20 |