iOS

[iOS/Swift]애드몹 광고 게재 제한 사례: 과도한 호출로 인한 무효 트래픽

ohlee52 2023. 10. 2. 00:05
반응형

애드몹정지타이틀

iOS 앱에 애드몹 배너광고를 추가한 지 4일만에 게재 제한을 먹었습니다.

애드몹 광고 게재 제한 캡쳐

클릭수 고작 3에 노출도 거의 안되는데,

내 기기도 테스터로 넣었는데,

너무 억울한 마음이 들었습니다.

하지만 꼼꼼히 살펴보니 정지 먹을 만 했더군요.(매번 내잘못인데 매번 남탓하게 됩니다) 

애드몹 광고 활동 캡쳐


이유: 과도한 요청

광고 노출에 비해 호출(요청)되는 양이 너무 많았습니다.

배너 하나 부르는데 통신이 여러번 시도되어서 무효 트래픽으로 잡힌 것 같더군요.

즉 코드를 잘못 짰습니다. 광고 잘 나오니 확인도 제대로 안하고 업데이트 한 죄였습니다.

 

구체적인 이유는 두가지 입니다.

1. 배너를 뷰컨트롤러 위에 추가한게 아니라, 테이블뷰의 헤더 안에다 넣었는데, 테이블뷰가 리로드 될 때마다 광고가 새로 호출이 되었습니다.

2. 반복코드를 줄이려고 배너 선언을 슈퍼클래스에 해두고 배너를 쓸 때마다 addSubview를 해서 썼는데, 안쓰는 뷰에서도 배너가 초기화 되면서 불필요한 호출이 생겼습니다.

 

이 두가지 때문에 과도한 광고 호출이 반복되었던 것입니다. 

그리고 2번째 문제 때문에 통신이 실패되는 로그도 있었습니다.(잘 돌아가니 무시했던게 화근이었죠.)

Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service

ProcessAssertion::acquireSync Failed to acquire RBS assertion 'WebProcess Suspended Assertion' for process with PID=27012, error: Error Domain=RBSAssertionErrorDomain Code=2 "Specified target process does not exist" UserInfo={NSLocalizedFailureReason=Specified target process does not exist}

문제해결

1. 배너광고를 테이블뷰 안에 넣지않고 뷰컨트롤러에 직접 추가해서 최상단에 고정시킴>>뷰컨트롤러 초기화 시에만 광고 호출

2. 슈퍼클래스의 배너 상수를 lazy 변수로 변경. >>lazy 변수는 쓰이지 않으면 초기화 되지 않으므로 배너 쓰일때만 광고 호출.

lazy var bannerView: GADBannerView = { 
        var view = GADBannerView(adSize: GADAdSizeBanner)
        view.translatesAutoresizingMaskIntoConstraints = false
        view.adUnitID = "ca-app-pub-3940256099942544/2934735716" //테스트광고id
        view.load(GADRequest())
        return view
    }()

이런 기초적인 실수를 하는 분들이 많지는 않을 거라고 생각하지만, 혹시나 해서 포스팅 합니다.

광고 정지먹으면 수정해도 바로 풀리지 않으니까요. 

 

PS. 구글 애드몹님. 죄송합니다. 정말로 고의가 아니었습니다. 한번만 봐주세요.

 

반응형