얼마 전 다른 회사의 SDK 를 연동하여 우리 회사 앱 설치 광고 업무를 해본 적이 있다. (AOS 만)
또한 다른 업체의 API 를 통해서도 모바일 앱 설치 광고를 해본 적이 있는데 (API 를 호출해서 여러 광고 리스트를 불러오는 형태 - 모바일 앱 설치 광고는 CPI 라고 불리는 것을 이때 알기 시작했다) 이때 심사 리젝도 당해보면서 상황이 겹겹이 겹치다 보니 대체 모바일 앱 설치 광고는 어떻게 구현하는 것인가.. 에 대한 호기심이 생겼다.
나는 이 기회를 바탕으로 모바일 앱 설치 광고에 대해 공부해서 정보 공유 글을 공유하려고 했는데 며칠을 공부해도 구현 방법을 찾지 못하였다.
(내가 못 찾는 걸 수도 있다..)
결국 내가 알아본 정보를 최대한 활용하여 기록 글의 형태로 가기로 맘을 먹었다. 나중에 경력 쌓고 보면 이 글이 조금 도움되지 않을까?
나의 앱을 설치 광고를 하려면 (AOS)
먼저 A업체는 A업체의 sdk 를 우리 회사 앱에 연동할 것을 권고했다. 또한 build.gradle 안에 install referrer 를 기재할 것을 요구했다.
install_referrer 란 앱 설치에 대한 정보를 알 수 있는 API 이다.
그래서 회원가입 시, 다른 회사 sdk 의 메서드 호출 (업체쪽 백엔드 API 호출과 앱 설치에 관한 정보를 보냄) 로 참여 캠페인 id 같은 것을 전송하여 해당 광고를 통해 설치된 것인지 확인했던 것으로 추측한다.
Android의 "Install Referrer"는 사용자가 앱을 설치하기로 결정한 원인이 된 마케팅 캠페인 또는 광고 소스를 식별하는 데 사용되는 데이터입니다.
Google은 개발자가 Install Referrer 정보를 쉽게 사용할 수 있도록 "Google Play Referrer API"를 제공합니다. 이 API를 통해 앱은 Google Play Store로부터 설치 참조 정보를 안정적이고 정확하게 검색할 수 있으며, 이 데이터는 앱 설치 후 처음 실행될 때 앱으로 전송됩니다.
다른 업체 앱 설치 광고 - CPI 형태
위와 같이 다른 업체의 API 를 통해 광고 목록을 불러왔고 그 중 CPI 라는, 앱 설치 광고를 불러오는 옵션 파라미터가 있었다.
안드로이드만 CPI 우선 적용하기로 했는데 -> 왜냐하면 찾아보니 query all package 라는 권한만 허용하면 유저 폰에서 설치된 앱 목록을 조회할 수 있기 때문이다.
하지만 앱 리젝을 당하게 되버리는데…
찾아보니 안드로이드 21 부터 Query_all_package 권한은 제한적으로 사용된다. 즉, 정말 필요한 목적이 아니면.. (예를 들어 은행 앱에서 보안 관련 목적으로 백신앱 설치 요구 등) 이 권한은 사용할 수 없게 된다.
그렇게 CPI 형태는 최종적으로 빼기로 결정되었다.
(안드로이드 21 부터 CPI 를 지원하지 않는 업체들이 생긴 것으로 보아 이는 불가능한 것으로 보인다)
앱 설치 광고가 여전히 존재하는 이유?
CPI 는 뺐지만 왜인지 모르겠으나 앱 설치 광고는 일부 보이기도 했다.
그렇다면 이러한 앱 설치 광고는 어떻게 구현되었을까?
안드로이드
안드로이드는 쉽게 이해할 수 있었다.
앞서 우리 회사 앱 설치 광고를 연동해둔 경험 덕에 install referrer 를 사용한 것이 아닐까 생각한다.
대신 광고를 할 업체의 sdk 를 일일히 연동해두어야 하는 단점은 있을 것 같다.
IOS (부제 1. 디퍼드 딥링크란?)
IOS 가 어떻게 구현될 수 있는지 알기가 힘들었다.
일단 앱 설치 광고는 디퍼드 딥링크로 거의 모두 구현되어 있다.
디퍼드 딥링크란 사용자가 모바일 앱을 아직 설치하지 않았을 때에도 특정 앱 내 콘텐츠나 페이지로 직접 이동할 수 있게 하는 기술이다.
일반적인 딥링크는 이미 앱을 성치한 사용자가 특정 url 을 클릭할 때 앱의 특정 페이지로 바로 이동할 수 있게 해주지만 디퍼드 딥링크는 한 단계 더 나아가, 앱을 설치하지 않은 사용자에게도 앱 스토어로 리디렉션하여 앱 설치 페이지를 보여준다.
디퍼드 딥링크 과정을 상세히 말하면 다음과 같다.
- 링크 클릭
- 앱 스토어 리디렉션: 사용자가 앱 설치를 하지 않았더면 사용자를 앱 스토어로 리디렉션 해준다.
- 앱 설치 및 실행
- 특정 콘텐츠로 이동: 사용자가 처음 클릭했던 딥링크 정보를 기반으로 사용자를 그에 상응하는 특정 콘텐츠나 페이지로 안내한다.
즉 여기서 중요한 정보를 알 수 있게 되는데 앱 스토어로 리디렉션하고 설치해도 링크 정보는 유실되지 않는다는 점이다.
알고 보니 파이어베이스 dynamic link 또한 디퍼드 딥링크에 속한다는 것을 알게 되면서 무심코 우리 회사 앱 내 서비스 중 친구 초대 (사용자가 링크를 타고 들어오면 입력창에 추천인 코드가 기재되도록 구현) 가 생각났다.
좋은 기능이라 생각되는데 단점을 꼽자면 파이어베이스 등을 연동해야 한다는 점이 단점이 될 수 있겠다
IOS (부제 2. 앱 최초 설치는 어떻게 판별할 것인가? -> 키체인?)
디퍼드 딥링크를 통해 광고 링크를 타고 들어와 최초 회원가입 같은 경우는 회원 정보를 바탕으로 최초인지 아닌지 알 수 있는데
앱만 키고도 최초 설치인지 아닌지는 어떻게 알 수 있는걸까?
1. 키체인
찾아본 결과, 키체인이 그나마 유력한 후보였다
키체인에 저장된 정보는 앱을 삭제해도 기본적으로 기기에 남아있다.
이는 앱 재설치 시, 이전 사용자 정보나 설정을 복원하기 위함이다!
키체인 한계점
그러나 앱을 제거하고 기기의 설정을 초기화하면 키체인 데이터는 삭제될 수 있다.
또한 사용자가 iCloud 키체인 동기화를 활성화한 경우, 키체인 데이터가 여러 기기에 걸쳐 동기화될 수 있다
이는 여러 기기에서 앱을 사용하는 경우 최초 설치 여부를 판별하는데 영향을 줄 수 있다.
개인적으로 키체인이 해결책이라고 하기에는 찜찜한 느낌이 들었다.
iCloud 키체인 동기화 활성화하면 여러 기기에 걸쳐 동기화가 되는데 그럼 최초 설치 여부 판별이 잘 안되지 않을까?
찾다보니 특이했던 점 (추적 동의..?)
우리 회사 앱의 앱 설치 광고에서 2가지 업체가 비슷한 양상을 보였다.
A 업체
A 업체는 매체 앱이고, B 업체는 광고주 앱이다.
A 업체는 A 업체(매체 앱)에서 무조건 앱 추적 동의를 허용해야 하고, B 업체 앱(광고주)에서는 앱 추적 동의를 할 필요 없고 앱만 키면 되는 조건이었다.
C 업체
C 업체는 매체 앱이고, D 업체는 광고주 앱이다.
C 업체는 C 업체에서 무조건 앱 추적 동의를 허용해야 하고 D 업체 앱에서는 앱 추적 동의도 무조건 해야 한다.
즉 양측 앱에서 무조건 앱 추적 동의를 해야 한다.
-> 그렇다면 앱 추적 동의는 idfa 수집이니 이 idfa 정보를 바탕으로 최초 앱 설치 유무 정보도 수집될 수 있는 것인가?
-> 근데 idfa 는 사용자가 재설정 가능하다.
-> 또한 chatgpt 는 이와 관련해서는 idfa 를 통해 최초 앱 설치 유무 판별은 불가능하다고 답을 했다.
서드파티 모바일 애널리틱스 (이것이 진정한 해결책..?)
두 가지 업체의 공통점은 서드파티 모바일 애널리틱스를 활용했다는 점이었다.
대표적으로 Appsflyer, Adjust, Branch 같은 플랫폼이 있다.
AppsFlyer는 모바일 앱의 마케팅 캠페인 성과를 측정하고 분석하는 데 중점을 둔 애트리뷰션(platform attribution) 및 마케팅 분석 플랫폼입니다. 광고 네트워크가 광고주와 매체 사이에서 광고를 직접 중개하는 역할을 한다면, AppsFlyer는 광고주가 다양한 마케팅 채널과 캠페인을 통해 얻은 결과를 정확하게 측정하고 분석할 수 있도록 도와줍니다.
모바일 앱에서 여러 광고를 쉽게 구현할 수 있게 해주고 이에 대한 광고 성과를 정확하게 측정하고 분석할 수 있게 해주는 전문적인 중개 앱이라고 생각하면 된다.
실제 내 앱에서 광고를 눌렀을 때 appsflyer 링크가 보였었다.
챗지피티는 서드파티 추적 서비스를 통해 이전 앱 설치 여부를 판단할 수 있다고 한다. 근데 그게 어떻게 가능한지는 아직 잘 모르겠다.
일단 챗지피티가 말하는 대로의 과정을 정리해보면 아래와 같다.
- 디퍼드 딥링크 생성 및 배포: 광고주는 특정 캠페인이나 광고에 대해 유니크한 디퍼드 딥링크를 생성합니다. 이 링크는 사용자가 광고를 클릭했을 때 실행되며, 사용자가 앱을 이미 설치했는지 여부와 관계없이 적절한 액션(앱 스토어 리디렉션, 특정 앱 페이지로의 이동 등)을 유도합니다.)
- 사용자의 광고 클릭 추적: 사용자가 디퍼드 딥링크를 클릭하면, 이 정보는 추적 플랫폼에 의해 기록됩니다. 클릭 정보에는 클릭 시각, 딥링크 URL, 광고 캠페인 ID 등이 포함될 수 있습니다.
- 앱 설치 및 첫 실행 추적: 사용자가 앱을 설치하고 처음으로 실행할 때, 추적 플랫폼의 SDK(앱에 통합된)가 이 정보를 포함하여 서버로 보냅니다. 이 데이터에는 앱 설치 ID, 설치 시간, 기기 정보, 그리고 사용자가 처음에 클릭했던 광고에 대한 정보가 포함될 수 있습니다.
- 유니크 설치 판별: 추적 플랫폼은 수집된 데이터를 분석하여, 특정 기기에서의 앱 설치가 최초인지 여부를 결정합니다. 이 과정은 클릭한 광고와 앱 설치 간의 관계를 매칭시키고, 기기 식별자나 기타 메타 데이터를 통해 해당 기기에서의 이전 앱 설치 기록을 확인하여 수행됩니다.
- 분석 및 리포팅: 앱 설치가 최초인 경우, 추적 플랫폼은 이 정보를 광고주에게 리포트합니다. 이 데이터를 통해 광고주는 광고 캠페인 효과를 측정하고, 마케팅 전략을 최적화할 수 있습니다.
챗지피티가 그렇다고 하니, 서드파티 플랫폼을 통해 최초 설치 유무를 알 수 있는건가 싶지만 여전히 미궁 속에 있다.
여기에 대해서 좀 더 파보아야 할 것 같다는 생각은 들었다.
번외편. SKAdNetwork
찾다보니 SKAdNetwork 란 것도 발견했다.
사실 처음엔 SKAdNetwork 를 이용한게 아닐까 생각했었는데 SkAdNetwork 는 사용자의 정보를 알 수 없다는 특징이 있어서 위에서 제외시키고 번외편으로 따로 포스팅한다. (사용자를 특정해서 리워드를 지급하는 광고는 아닌 것 같다)
SKAN의 풀네임은 Store Kit Ad Network 이다.
프라이버시 이슈로 iOS 14.5 이후로 ATT (App Tracking Transparency) 정책이 도입됐고, 광고식별자인 IDFA를 제대로 활용하지 못하게 되는 와중에, ATT 동의/개인정보 포함 없이도 어느 정도의 전환 트래킹이 가능한 대안으로 Apple이 2018년에 일찍이 제시한 것이다.
우선 Store Kit 은 애플에서 제공하는 공식 프레임워크로, 아래의 기능들을 수행할 수 있다.
- In-App Purchase : Offer and promote in-app purchases for content and services.
- App transaction : Verify the customer’s app purchase with an App Store-signed transaction.
- Ad network attribution : Validate advertisement-driven app installations.
- Recommendations : Provide recommendations for third-party content.
- Reviews : Request App Store reviews and ratings from your customers.
- Messages : Display App Store messages in your app.
이 중 SKAdNetwork 라는 Class 가 있는 형태고, "이용자 개인정보를 보호하면서도 광고 캠페인의 효과를 측정할 수 있는 API"로 소개되고 있다. IDFA 활용과 달리, SKAdNetwork API를 호출할 땐 ATT 동의가 선행되지 않아도 괜찮다.
참여자
먼저, 이 API 는 아래처럼 세 종류의 참여자가 있다.
a. 광고를 내보내고, 광고의 결과로 전환conversion이 이루어졌을 때 install-validation 포스트백을 수취하는 Ad Network
b. Ad Network로부터 광고를 받아서 자신의 지면에 노출하는 Source Apps (= 매체 앱)
c. 해당 광고에서 홍보되는 대상인 Advertised Apps (= 광고주)
참여자의 역할을 아래에 살펴보면,
AdNetwork
SKAN에 참여하는 애드 네트워크이다 (ex. 구글, 페이스북 등). 기존 애드네트워크가 SKAN에 참여하기 위해서는 아래의 내용을 진행해야 한다.
- 애플개발자페이지에서 애드네트워크 등록 신청서를 작성하고 제출합니다.
- 발급받은 skadnetwork id를 매체앱(Source app)에 전달합니다.
- skadnetwork id는 "example.skadnetwork"의 형태를 가집니다.
- 애드네트워크가 승인한 광고를 매체앱에 전달합니다.
- 어트리뷰션이 발생하면 애플로부터 인스톨 포스트백을 받습니다.
- 수신한 포스트백의 유효성을 검증하고 리포팅합니다.
매체 앱
실제로 유저들에게 SKAN광고를 노출하는 지면을 소유한 매체 앱이다. SKAN 광고를 노출하기 위해서 아래의 과정을 수행한다.
- 애드네트워크로부터 받은 skadnetwork id를 자신의 앱의 info.plist에 등록합니다.
- 애드네트워크가 승인한 SKAN 광고 데이터를 수신하여 사용자들에게 노출합니다.
광고주 앱
SKAN을 통해 앱 인스톨이 발생하는 광고주 앱이다. SKAN 광고를 진행하기 위해서 아래의 과정을 수행한다.
- 앱이 설치되고 실행이 될 때 NetworkAttribution() 혹은 updateConversionValue(_:)를 호출합니다.
- updateConversionValue(_:)를 호출하여 리텐션 측정을 위한 컨버젼 밸류를 업데이트합니다.
Timer 존재의 이유
다시 위의 과정을 살펴보자.
여기서 특이점이 있는데 바로 Start timer 부분이다. 이 부분에 타이머가 있는 이유가 애플다운 이유인 것 같아(?) 이것도 정리해본다.
1. 프라이버시 보호
- 익명화: 타이머는 광고 클릭과 연관된 사용자의 행동을 익명화하는 데 도움을 준다. 일정 시간이 지난 후에 데이터를 집계하여 전송함으로써, 개별 사용자의 행동을 직접적으로 추적하고 식별하는 것을 방지한다.
2. 데이터 정확성
- 전환 가치 최적화: 광고주는 전환 이벤트 발생 후 일정 시간 동안 최고의 전환 가치를 보고하기 위해 전략을 조정할 수 있다. 타이머는 이러한 전환 가치 최적화 과정에 시간적 유연성을 제공한다.
- 복수 전환 관리: 사용자가 여러 전환 이벤트를 발생시키는 경우, 타이머는 가장 가치 있는 전환 이벤트가 선택되고 보고되도록 한다. 타이머 기간 동안 가장 높은 전환 가치가 기록된다.
3. 전송 지연
- 지연된 데이터 전송: 타이머는 전환 데이터의 즉각적인 전송을 지연시켜, 광고 네트워크와 광고주가 실시간으로 사용자 데이터를 추적하는 것을 방지한다. 이는 프라이버시 중심의 접근 방식을 강화한다.
4. 전환 데이터의 집계
- 데이터 집계: 타이머 기간 동안 여러 사용자의 데이터가 집계되어, 광고 네트워크에는 익명화된 형태의 집계 데이터가 제공됩니다. 이는 개별 사용자를 식별할 수 있는 정보 없이도 광고 캠페인의 성과를 평가할 수 있게 한다.
따라서 SKAdNetwork의 타이머 메커니즘은 광고 캠페인의 성과 측정과 사용자 프라이버시 보호 사이의 균형을 맞추는 데 중요한 역할을 한다.
정리
긴 시간을 투자했지만 결국 모바일 앱 설치 광고는 어떤 방식으로 구현되는지 알지 못하였다.
그래도 이것저것 찾아보며 새로운 지식을 습득했던 것 같다! 또한 찾아보며 기존 지식도 정리가 되어서 나름 호기심에 잘 시달렸던 것 같다(?) (디퍼드 링크라든가, idfv, sknetwork id 같은 것들..)
다른 업체에서 어떻게 해결했는지 너무 알고 싶다... 어떻게 최초 앱 설치를 판별할 수 있었던 걸까? 너무 궁금한데..
언젠간 알 수 있을거라 기대한다.