카테고리 없음

나에게 아직은 어려운 앱 설치 광고

ji-hyun 2024. 3. 17. 21:54

얼마 전 다른 회사의 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 을 클릭할 때 앱의 특정 페이지로 바로 이동할 수 있게 해주지만 디퍼드 딥링크는 한 단계 더 나아가, 앱을 설치하지 않은 사용자에게도 앱 스토어로 리디렉션하여 앱 설치 페이지를 보여준다.

 

 

디퍼드 딥링크 과정을 상세히 말하면 다음과 같다.

 

  1. 링크 클릭
  2. 앱 스토어 리디렉션: 사용자가 앱 설치를 하지 않았더면 사용자를 앱 스토어로 리디렉션 해준다.
  3. 앱 설치 및 실행
  4. 특정 콘텐츠로 이동: 사용자가 처음 클릭했던 딥링크 정보를 기반으로 사용자를 그에 상응하는 특정 콘텐츠나 페이지로 안내한다.


즉 여기서 중요한 정보를 알 수 있게 되는데 앱 스토어로 리디렉션하고 설치해도 링크 정보는 유실되지 않는다는 점이다.
알고 보니 파이어베이스 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 링크가 보였었다.

 

 

 

 

 

챗지피티는 서드파티 추적 서비스를 통해 이전 앱 설치 여부를 판단할 수 있다고 한다. 근데 그게 어떻게 가능한지는 아직 잘 모르겠다.

일단 챗지피티가 말하는 대로의 과정을 정리해보면 아래와 같다.

 

 

  1. 디퍼드 딥링크 생성 및 배포: 광고주는 특정 캠페인이나 광고에 대해 유니크한 디퍼드 딥링크를 생성합니다. 이 링크는 사용자가 광고를 클릭했을 때 실행되며, 사용자가 앱을 이미 설치했는지 여부와 관계없이 적절한 액션(앱 스토어 리디렉션, 특정 앱 페이지로의 이동 등)을 유도합니다.)
  2. 사용자의 광고 클릭 추적: 사용자가 디퍼드 딥링크를 클릭하면, 이 정보는 추적 플랫폼에 의해 기록됩니다. 클릭 정보에는 클릭 시각, 딥링크 URL, 광고 캠페인 ID 등이 포함될 수 있습니다.
  3. 앱 설치 및 첫 실행 추적: 사용자가 앱을 설치하고 처음으로 실행할 때, 추적 플랫폼의 SDK(앱에 통합된)가 이 정보를 포함하여 서버로 보냅니다. 이 데이터에는 앱 설치 ID, 설치 시간, 기기 정보, 그리고 사용자가 처음에 클릭했던 광고에 대한 정보가 포함될 수 있습니다.
  4. 유니크 설치 판별: 추적 플랫폼은 수집된 데이터를 분석하여, 특정 기기에서의 앱 설치가 최초인지 여부를 결정합니다. 이 과정은 클릭한 광고와 앱 설치 간의 관계를 매칭시키고, 기기 식별자나 기타 메타 데이터를 통해 해당 기기에서의 이전 앱 설치 기록을 확인하여 수행됩니다.
  5. 분석 및 리포팅: 앱 설치가 최초인 경우, 추적 플랫폼은 이 정보를 광고주에게 리포트합니다. 이 데이터를 통해 광고주는 광고 캠페인 효과를 측정하고, 마케팅 전략을 최적화할 수 있습니다.

 

 

챗지피티가 그렇다고 하니, 서드파티 플랫폼을 통해 최초 설치 유무를 알 수 있는건가 싶지만 여전히 미궁 속에 있다.

여기에 대해서 좀 더 파보아야 할 것 같다는 생각은 들었다.

 

 

 

 

 

 

 


번외편. 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에 참여하기 위해서는 아래의 내용을 진행해야 한다.

 

  1. 애플개발자페이지에서 애드네트워크 등록 신청서를 작성하고 제출합니다. 
  2. 발급받은 skadnetwork id를 매체앱(Source app)에 전달합니다. 
    1. skadnetwork id는 "example.skadnetwork"의 형태를 가집니다.
  3. 애드네트워크가 승인한 광고를 매체앱에 전달합니다.
  4. 어트리뷰션이 발생하면 애플로부터 인스톨 포스트백을 받습니다.
  5. 수신한 포스트백의 유효성을 검증하고 리포팅합니다.

 

 

 

매체 앱

실제로 유저들에게 SKAN광고를 노출하는 지면을 소유한 매체 앱이다. SKAN 광고를 노출하기 위해서 아래의 과정을 수행한다.

 

  1. 애드네트워크로부터 받은 skadnetwork id를 자신의 앱의 info.plist에 등록합니다.
  2. 애드네트워크가 승인한 SKAN 광고 데이터를 수신하여 사용자들에게 노출합니다.

 

 

 

광고주 앱

SKAN을 통해 앱 인스톨이 발생하는 광고주 앱이다. SKAN 광고를 진행하기 위해서 아래의 과정을 수행한다.

 

  1. 앱이 설치되고 실행이 될 때 NetworkAttribution() 혹은 updateConversionValue(_:)를 호출합니다.
  2. updateConversionValue(_:)를 호출하여 리텐션 측정을 위한 컨버젼 밸류를 업데이트합니다.

 

 

 

 

 

Timer 존재의 이유

 

다시 위의 과정을 살펴보자.

여기서 특이점이 있는데 바로 Start timer 부분이다. 이 부분에 타이머가 있는 이유가 애플다운 이유인 것 같아(?) 이것도 정리해본다.

 

 

 

1. 프라이버시 보호
- 익명화: 타이머는 광고 클릭과 연관된 사용자의 행동을 익명화하는 데 도움을 준다. 일정 시간이 지난 후에 데이터를 집계하여 전송함으로써, 개별 사용자의 행동을 직접적으로 추적하고 식별하는 것을 방지한다.

 


2. 데이터 정확성
- 전환 가치 최적화: 광고주는 전환 이벤트 발생 후 일정 시간 동안 최고의 전환 가치를 보고하기 위해 전략을 조정할 수 있다. 타이머는 이러한 전환 가치 최적화 과정에 시간적 유연성을 제공한다.
- 복수 전환 관리: 사용자가 여러 전환 이벤트를 발생시키는 경우, 타이머는 가장 가치 있는 전환 이벤트가 선택되고 보고되도록 한다. 타이머 기간 동안 가장 높은 전환 가치가 기록된다.

 


3. 전송 지연
- 지연된 데이터 전송: 타이머는 전환 데이터의 즉각적인 전송을 지연시켜, 광고 네트워크와 광고주가 실시간으로 사용자 데이터를 추적하는 것을 방지한다. 이는 프라이버시 중심의 접근 방식을 강화한다.

 


4. 전환 데이터의 집계
- 데이터 집계: 타이머 기간 동안 여러 사용자의 데이터가 집계되어, 광고 네트워크에는 익명화된 형태의 집계 데이터가 제공됩니다. 이는 개별 사용자를 식별할 수 있는 정보 없이도 광고 캠페인의 성과를 평가할 수 있게 한다.

 

 

 

따라서 SKAdNetwork의 타이머 메커니즘은 광고 캠페인의 성과 측정과 사용자 프라이버시 보호 사이의 균형을 맞추는 데 중요한 역할을 한다. 

 

 

 

 

 

 

정리

긴 시간을 투자했지만 결국 모바일 앱 설치 광고는 어떤 방식으로 구현되는지 알지 못하였다.

그래도 이것저것 찾아보며 새로운 지식을 습득했던 것 같다! 또한 찾아보며 기존 지식도 정리가 되어서 나름 호기심에 잘 시달렸던 것 같다(?) (디퍼드 링크라든가, idfv, sknetwork id 같은 것들..)

다른 업체에서 어떻게 해결했는지 너무 알고 싶다... 어떻게 최초 앱 설치를 판별할 수 있었던 걸까? 너무 궁금한데..

언젠간 알 수 있을거라 기대한다.