스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
AdAttributionKit 소개
개인정보를 보호하는 광고 어트리뷰션을 위한 새로운 iOS 프레임워크인 AdAttributionKit을 소개합니다. AdAttributionKit에서 재참여, 클릭스루 어트리뷰션(맞춤형 크리에이티브 지원 포함), JWS 형식의 노출 및 포스트백 등을 지원하는 방법을 알아봅니다. AdAttributionKit 구현 테스트에 대한 인사이트와 AdAttributionKit을 적용한 코드 스니펫 및 모범 사례를 자세히 살펴보세요.
챕터
- 0:00 - Introduction
- 2:05 - Fetching ads
- 3:55 - Displaying ads
- 8:18 - Postbacks
- 16:28 - Re-engagement
- 21:09 - Testing AdAttributionKit
리소스
- AdAttributionKit
- Attributing ads with SKAdNetwork and Private Click Measurement
- Forum: App & System Services
관련 비디오
WWDC22
-
다운로드
안녕하세요 App Store Engineering 팀의 Nikhil입니다 오늘은 AdAttributionKit을 소개합니다 Apple의 모든 활동에서 개인정보 보호는 아주 중요합니다 개인정보 보호 광고 어트리뷰션은 사용자의 개인정보를 보호하면서 광고 어트리뷰션을 가능하게 합니다
개인정보 보호 광고 어트리뷰션은 군중 익명성을 기반으로 구축됩니다
대략적으로 군중 익명성은 전환 수가 적을 때 광고 네트워크와 광고주에게 더 적은 데이터를 전송합니다
군중 규모가 커질수록 더 많은 데이터가 반환됩니다
군중 규모가 최고 수준을 넘어서면 광고 네트워크와 광고주에게 반환되는 데이터 양이 최대가 됩니다
SKAdNetwork는 Apple 최초의 개인정보 보호 광고 어트리뷰션 프레임워크로 군중 익명성을 기반으로 합니다 오늘 제가 소개할 AdAttributionKit은 새로운 iOS 및 iPadOS용 광고 어트리뷰션 프레임워크로 SKAdNetwork의 기반 위에 구축되었습니다 먼저 광고 어트리뷰션에 대해 개괄적으로 설명해 보겠습니다
광고 네트워크는 광고를 생성하고 서명하고 퍼블리셔 앱에 게재합니다
퍼블리셔 앱은 사용자에게 광고를 표시합니다
사용자가 광고의 앱을 설치하고 일정 기간 동안 앱을 사용하여 측정 기간이 지나게 되면 전환 정보가 포함된 포스트백이 광고 네트워크에 전송됩니다
이러한 흐름을 유념하면서 오늘 다룰 주제는 다음과 같습니다 먼저 광고 불러오기와 AdAttributionKit의 새로운 광고 노출 형식에 대해 알아보겠습니다 그런 다음 광고 표시에 대해 살펴보고 그 다음에는 포스트백에 대해 살펴보겠습니다 그 다음 재참여를 살펴보고 AdAttributionKit 테스트를 간략하게 살펴보겠습니다
먼저 광고 불러오기입니다 광고는 어트리뷰션 흐름의 입력입니다 퍼블리셔 앱은 광고 네트워크에서 광고 데이터를 가져옵니다 이 광고 데이터는 간결한 JWS 형식입니다 이제 필드를 살펴보겠습니다 다음은 JSON 형식의 광고 노출입니다
몇 가지 중요한 필드만 보겠습니다
‘advertised-item-identifier’는 광고 중인 앱의 앱 ID입니다
‘publisher-item-identifier’는 광고를 표시하는 앱의 앱 ID입니다
‘source-identifier’는 4자리 정수 값으로 광고의 캠페인 관련 정보를 나타내는 데 사용됩니다 이 필드는 SKAdNetwork 4.0과 동일한 동작을 유지합니다
JSON의 필드는 세션에 링크된 AdAttributionKit 문서에 설명되어 있습니다
이 구조를 염두에 두고 광고 노출에 대해 알아보겠습니다 AppImpression 인스턴스는 광고 노출을 나타냅니다 이러한 인스턴스는 광고의 간결한 JWS 표현으로 초기화됩니다 이전 섹션에서 다룬 내용이죠
이제 간결한 JWS에서 앱 노출을 만드는 방법을 보여드리겠습니다
먼저 광고의 간결한 JWS 표현을 가져옵니다 fetchAdImpressionJWS() 메서드는 구현된 상태로 표시되지 않는데 광고 제공업체 또는 광고 네트워크와 통합하는 방법은 이 메서드에 달려있지 않기 때문입니다
그런 다음 이 jwsString을 AppImpression 이니셜라이저에 전달합니다 이 AppImpression 인스턴스로 광고를 표시하는 방법을 다음 섹션에서 설명하겠습니다
AdAttributionKit은 광고를 표시하는 세 가지 방법을 지원합니다 내 앱에 표시하고자 하는 광고를 살펴보겠습니다
첫 번째 광고는 클릭 가능한 맞춤형 크리에이티브입니다 맞춤형 클릭 광고를 탭하면 광고된 앱을 설치할 수 있는 마켓플레이스로 이동합니다
다음은 다른 화면의 뷰스루 광고입니다 이러한 유형의 광고 콘텐츠의 예로는 비디오 광고가 있습니다
또 다른 광고 유형은 단순히 광고되는 앱을 추천하는 광고입니다 이 경우 SKOverlay를 사용하면 내 앱의 컨텍스트 내에서 배너로 표시됩니다
SKStoreProductViewController는 앱 컨텍스트 내에 있으면서 전체 화면 표시 모델에 가깝습니다 SKOverlay와 SKStoreProductViewController 모두 iOS 디자인 언어를 공유하며 앱에 쉽게 적용하고 플러그인할 수 있습니다
맞춤 클릭 광고 구현 방법은 다음과 같습니다
먼저 customAdView를 만듭니다
그런 다음 UIEventAttributionView의 인스턴스를 생성하고 광고 보기의 하위 보기로 추가합니다
UIEventAttributionView는 모든 뷰의 상단에 있어야 합니다 사용자 상호작용을 수신하기 위해서죠
광고 뷰가 설정되었으니 이제 광고 탭 차례입니다 사용자가 광고 뷰를 탭하면 appImpression 인스턴스를 가져와서 거기에 handleTap() 메서드를 호출합니다
handleTap은 appImpression 인스턴스가 초기화된 후 15분 이내에 호출되어야 합니다 15분이 지나면 새 appImpression 인스턴스를 생성합니다
클릭이 발생하고 handleTap 메서드를 호출하면 AdAttributionKit은 광고된 앱을 설치할 수 있는 마켓플레이스로 사용자를 이동시킵니다
뷰스루 광고의 경우는 비디오 광고 사용법과 비슷하지만 모든 맞춤형 광고 표시에 적용할 수 있다는 점이 다릅니다
간단한 타임라인을 사용하여 관련된 이벤트와 API 호출을 시각화해 보겠습니다
광고 표시가 시작되면 appImpression 인스턴스에서 beginView() API를 호출하고
광고 표시가 완료되면 appImpression 인스턴스에서 endView() API를 호출합니다
비디오 뷰스루 광고의 경우 비디오 재생이 시작되면 appImpression 인스턴스에서 beginView()를 호출하고, 재생이 끝나면
appImpression 인스턴스에서 endView()를 호출합니다 뷰스루 광고에는 몇 가지 주의해야 할 사항이 있습니다 맞춤형 광고 콘텐츠는 최소 2초 동안 표시되어야 합니다 즉, beginView()와 endView() 호출 사이의 시간이 최소 2초 이상이어야 합니다 이러한 유형의 광고 콘텐츠에 대한 업계 표준과 일치하죠
beginView와 endView는 appImpression과 동일한 인스턴스에서 호출해야 하며
동일한 광고 네트워크는 광고된 동일한 앱에 대해 동시에 여러 개의 뷰스루 광고 표시 오픈 뷰를 가질 수 없습니다 모든 시작 호출은 종료 호출로 균형을 이루어야 합니다
SKOverlay로 이동합니다
SKOverlay 구현은 AdAttributionKit에서 SKAdNetwork와 동일한 패턴을 따릅니다 AppConfiguration의 인스턴스로 SKOverlay를 설정합니다
AppConfiguration의 새로운 appImpression 속성에 appImpression 인스턴스를 설정하게 됩니다
마지막으로 SKStoreProductViewController입니다 SKStoreProductViewController의 설정은 SKAdNetwork에서의 설정 방식과 유사합니다
loadProduct 메서드가 호출되어 표시할 제품 페이지 UI를 준비합니다
가장 큰 차이점은 loadProduct 메서드에서 appImpression 인스턴스를 전달할 노출 매개변수입니다
다음은 포스트백입니다
포스트백은 어트리뷰션 시스템의 결과물입니다 포스트백은 광고 네트워크로 전송되는 전환 신호입니다 또한 선택적으로 광고된 앱의 개발자에게도 전송될 수 있습니다
AdAttributionKit은 포스트백을 서명된 간결한 JWS와 서명되지 않은 필드의 조합으로 전송합니다 이것은 서명된 부분입니다
몇 가지 중요한 필드에 집중해 보겠습니다
‘conversion-type’ 필드는 이 포스트백을 생성한 전환 유형 정보를 전달합니다 이 필드의 값은 download, redownload 또는 re-engagement가 될 수 있습니다
‘marketplace-identifier’ 필드에는 전환이 발생한 마켓플레이스의 식별자가 포함됩니다 이 예시에서는 다운로드가 Apple App Store에서 이루어지므로 이 필드의 값은 ‘com.apple.AppStore’입니다
‘publisher-item-identifier’는 원본 광고를 보여준 앱의 식별자입니다 군중 익명성 수준이 낮으면 포스트백에 포함되지 않습니다
‘source-identifier’는 최소 2자리 최대 4자리 수입니다 군중 익명성에 따라 포스트백에 포함되는 숫자가 결정됩니다
이제 포스트백 요청 본문의 나머지 부분을 살펴보겠습니다
‘jws-string’ 키는 방금 다룬 JSON의 JWS의 간결한 표현을 담고 있습니다 간결하게 보여주기 위해 실제 문자열이 아닌 플레이스홀더를 표시하고 있습니다
‘ad-interaction-type’ 키에는 사용자가 광고와 상호작용한 방식에 대한 정보가 저장됩니다 여기 들어갈 수 있는 값은 ‘click’과 ‘view’입니다 이 키에 대해서는 다음 섹션에서 자세히 설명하겠습니다
‘conversion-value’ 키는 광고된 앱이 AdAttributionKit에 API 호출을 통해 결정한 전환 값을 포함합니다
‘conversion-value’ 키는 군중 익명성이 제어하는 필드로 포스트백에 반드시 포함되는 것은 아닙니다
군중 익명성으로 인해 데이터 허용량이 높지 않다면 ‘conversion-value’ 대신에 ‘coarse-conversion-value’ 값을 수신하게 될 수도 있습니다
전환 값이 전혀 수신되지 않을 수도 있고요
전체 포스트백 요청 본문으로 돌아가 두 가지 주제에 대해 자세히 살펴보고자 합니다 ‘conversion-value’와 ‘ad-interaction-type’입니다
첫 번째, 전환 값입니다 전환 값은 광고 효과를 측정하는 데 사용할 수 있습니다 달리 말하면 이 광고 캠페인이 광고 요구 사항에 얼마나 도움이 되었는지를 의미합니다 광고 비용 대비 수익, ROAS에 대한 정보를 도출하는 데에도 전환 값을 사용할 수 있습니다 이 휴리스틱은 광고 지출 및 관련 최적화를 결정할 때 매우 중요합니다 전환 값은 세부적일 수도 대략적일 수도 있습니다 이는 군중 익명성에 의해 결정됩니다 사용자 참여도를 측정하고 AdAttributionKit을 통해 ‘conversion-value’를 업데이트하는 3가지 시나리오를 살펴보겠습니다
먼저 살펴볼 것은 계정 생성 시나리오입니다
앱에서 계정 생성을 처리하는 메서드 내부에 있다고 해 봅시다
먼저 PostbackUpdate 구조체를 생성하고 Postback 유형에서 updateConversionValue 메서드를 호출해 업데이트를 실행합니다
PostbackUpdate 구조체의 속성을 더 자세히 살펴보겠습니다
첫 번째 인수는 fineConversionValue입니다 0에서 63 사이의 양의 정수로 두 값을 모두 포함합니다 fineConversionValue의 값은 내 광고 캠페인에 대해 의미가 있어야 하고 효과를 측정하는 방식에 대해서도 마찬가지입니다 일반적으로 전환 값에 대한 스키마가 결정되는 방식은 광고되는 앱 개발자인 저와 제가 선택한 광고 네트워크 함께 작업할 수 있는 MMP 간의 논의와 계획을 거쳐 결정됩니다
두 번째 인수는 포스트백을 잠그는 것입니다 포스트백 잠금은 AdAttributionKit 키트에 특정 전환 기간에 대한 전환 값 측정 및 기록이 완료되었음을 알리는 방법입니다 이렇게 하면 AdAttributionKit이 해당 포스트백을 중지시키고 전송을 즉시 예약할 수 있습니다
이를 다르게 생각해보면 매우 중요한 이벤트가 발생했고 이를 가능한 한 빨리 파악하고 싶다는 것입니다 이 이벤트의 시간적 긴급성은 해당 전환 기간의 다른 모든 측정보다 훨씬 중요합니다 따라서 저는 lock을 호출하고 AdAttributionKit은 이 포스트백을 중지시키고 예약합니다
계정 생성은 포스트백을 중지할 만한 가치가 없으므로 lock 인수에 false를 사용합니다
마지막 인수는 대략적인 변환 값으로 low, medium, high의 세 가지 문자열 값 중 하나가 될 수 있습니다 앞서 언급했듯 대략적인 값이 포스트백으로 전송되는 경우는 군중 익명성이 세부적인 값을 전송할 수 없다고 판단해서입니다
계정이 생성되고 사용자는 첫 번째 비디오를 시청합니다 이 동작은 가치가 높은 이벤트로 보이니 fineConversionValue를 38로 업데이트하겠습니다
비디오를 시청하는 사용자의 값은 포스트백을 잠글 만큼 충분히 높지 않으므로 해당 인수는 false입니다
그리고 군중 익명성 때문에 세부적인 값이 전달될 수 없는 경우 대체 측정값으로 coarseConversionValue를 medium으로 설정합니다
마지막으로 사용자가 비디오를 업로드합니다 저는 이를 가치가 매우 높은 참여로 간주하여 세부 값을 42로 업데이트합니다
비디오 제작은 가치가 매우 높은 이벤트이므로 포스트백을 가능한 한 빨리 받고 싶습니다 따라서 API의 lockPostback 인수로 포스트백을 잠급니다
포스트백을 잠근다고 해서 즉시 전송되는 것은 아닙니다 이러한 지연 전송 동작은 사용자 개인정보를 보호하기 위함입니다
다시 한 번 대비책으로 coarseConversionValue를 high로 설정했습니다
PostbackUpdate 구조체로 앱의 다양한 시나리오에 맞게 전환 값을 설정할 수 있습니다
마지막으로 포스트백의 광고 상호작용 유형입니다
AdAttributionKit은 사용자가 광고를 탭하는 것과 보기만 하는 것을 구분합니다 이 정보는 전환을 유도한 광고를 선택하는 데 매우 중요합니다
포스트백의 광고 상호작용 유형은 사용자와 광고의 상호작용에 따라 ‘click’ 또는 ‘view’ 값을 갖습니다 다양한 표시 방법에 대해 이 필드의 값을 검토해 보겠습니다
맞춤형 클릭 광고의 경우 광고를 보기만 해서는 노출이 생성되지 않습니다
광고를 탭하면 광고 상호작용 유형이 ‘click’이 됩니다
뷰스루 광고의 경우 광고를 보면 광고 상호작용 유형이 ‘view’가 됩니다 탭해도 노출이 발생하지 않습니다
SKOverlay의 경우 표시하면 광고 상호작용 유형이 ‘view’가 되고 탭하면 ‘click’이 됩니다
마찬가지로 SKStoreProductViewController도 보여주면 광고 상호작용이 ‘view’가 되고 탭하면 ‘click’이 됩니다
전환 값과 광고 상호작용 유형은 앱에서의 참여와 설치를 유도한 광고에 대한 세부 정보를 제공합니다 이제 더 새로운 부분인 재참여에 대해 알아보겠습니다 광고 어트리뷰션의 주 목적은 전환 이벤트를 노출 이벤트에 어트리뷰션하는 것입니다 지금까지의 예시에서는 설치를 전환 이벤트로 사용했습니다 대부분의 광고 캠페인의 초기 목표는 앱 설치를 유도하는 것입니다 설치는 사용자가 앱을 사용하는 여정의 첫 번째 단계이므로 당연한 일입니다
이제부터 이야기할 것은 새로운 유형의 전환 이벤트 재참여입니다 재참여 광고 캠페인은 사용자를 광고된 앱으로 돌아오게 만드는 것이 목표입니다
광고된 앱을 설치한 사용자가 앱 사용을 중단한 경우를 생각해 봅시다 광고된 앱은 이 사용자를 다시 확보하고자 합니다
그래서 기간 한정 특가를 제공하는 광고를 게재합니다 사용자가 광고를 탭하면 AdAttributionKit이 광고된 앱을 열면서 특가를 제공하는 페이지를 보여주고 재참여가 시작됩니다
재참여 광고 노출을 살펴보겠습니다 재참여에 대한 옵트인을 제공하기 위해 페이로드에 매개변수
‘eligible-for-re-engagement’를 추가합니다
이는 AdAttributionKit에 재참여 전환을 위해 광고 노출이 고려되어야 한다고 알려 줍니다
‘eligible-for-re-engagement’ 속성으로 구성된 광고 노출은 광고된 앱의 설치 여부에 따라 재참여 또는 설치로 간주됩니다
재참여 옵트인이 없는 일반 광고 노출의 경우 설치로만 간주됩니다
코드에서 재참여를 시작하기 위해
jwsString을 사용하여 AppImpression 인스턴스를 생성합니다 이 인스턴스는 재참여 옵트인이 포함된 JWS 노출입니다
그런 다음 광고 뷰의 탭 핸들러에서 먼저 사용자가 광고된 앱 내에서 이동하고자 하는 유니버설 링크를 가져옵니다
그런 다음 reengagementURL을 전달하는 appImpression 인스턴스에서 handleTap() 메서드를 호출합니다 AdAttributionKit에게 광고된 앱을 열도록 지시하는 호출입니다
광고된 앱이 열리면 재참여 URL이 앱으로 전달됩니다 재참여 URL에 추가된 쿼리 매개변수를 주목하세요 AdAttributionKit은 재참여 진행 중에 이 매개변수를 URL에 추가합니다
광고된 앱은 이 매개변수를 확인하여 AdAttributionKit 재참여에 의해 열린 것인지 알 수 있습니다
재참여와 호환되는 SKOverlay와 SKStoreProductViewController도 있습니다
두 가지 모두 설정 과정이 설치와 매우 유사합니다
광고된 앱에서 유니버설 링크를 열려면 SKOverlay의 adAttributionReengagementURL 속성을 사용하면 됩니다
SKStoreProductViewController의 경우 loadProduct 메서드에서 reengagementURL 매개변수를 사용할 수 있습니다 재참여 전환을 위해 전송되는 포스트백에 대해 이야기해 보겠습니다
포스트백의 전환 유형 키는 re-engagement 값을 갖습니다
재참여 전환의 상호작용 유형은 click만 가능합니다 뷰스루 재참여는 AdAttributionKit에서 지원되지 않습니다
전환 값을 업데이트하기 위한 첫 번째 호출은 전환 후 48시간 이내에 이루어져야 합니다
재참여 포스트백은 설치 포스트백과 별도로 선택적으로 업데이트할 수 있습니다 방법을 보여 드리겠습니다
앞에서 본 PostbackUpdate 구조체를 다시 가져왔습니다
conversionTypes 매개변수를 사용하여 업데이트할 포스트백을 제어합니다
재참여 포스트백만 업데이트하려면 conversionTypes에 .reengagement 값을 사용합니다
설치 포스트백만 업데이트할 때는 conversionTypes에 .install 값을 사용합니다
모든 포스트백을 업데이트할 때는 conversionTypes에 .install과 .reengagement를 모두 사용합니다 AdAttributionKit은 conversionTypes가 nil인 경우 모든 포스트백을 업데이트합니다
여기에는 재참여도 포함되어 설치와 더불어 사용자들이 앱에 참여하는 방식에 대한 완전한 그림을 보여 줍니다 AdAttributionKit 테스트는 어려울 수 있습니다 필요성과 목적에 따라 비동기식으로 설계되었기 때문입니다
이러한 비동기적 특성은 개인정보 보호를 강화하기 위한 시간 무작위화로 인해 더욱 복잡해집니다 테스트를 쉽게 할 수 있도록 AdAttributionKit에 새로운 개발자 모드가 추가되었습니다
개발자 모드는 시스템에서 시간 무작위화를 제거하여 정해진 시간에 작업을 수행하도록 만듭니다 전환 기간이 단축되므로 전환 값 업데이트에 대한 테스트를 테스트하기 쉬운 시간대에 세 가지 기간 모두에서 할 수 있습니다
또한 개발자 모드는 포스트백 전송 속도를 높여 테스트에 도움을 줍니다 개발자 모드를 켜는 방법을 살펴보겠습니다
iOS 설정에서 개발자 메뉴로 이동하고 아래로 스크롤하여 AdAttributionKit 개발자 모드 스위치를 찾습니다
스위치를 켜면 AdAttributionKit이 개발자 모드에서 작동하기 시작합니다 시스템에서 소요 시간이 단축되어 더 빠르게 테스트할 수 있습니다
여기까지 iOS 및 iPadOS를 위한 Apple의 새로운 개인정보 보호 광고 어트리뷰션 프레임워크 AdAttributionKit을 설명드렸습니다
광고 네트워크가 이미 SKAdNetwork에 등록되어 있다면 추가 등록이 필요하지 않습니다 등록되어 있지 않다면 먼저 AdAttributionKit으로 광고 네트워크를 등록하세요
등록한 뒤 새로운 JWS 형식의 광고를 게재하고 AdAttributionKit으로 광고를 표시하세요
광고된 앱의 경우 전환 값을 업데이트하기 위해 새로운 AdAttributionKit API를 채택하세요
서버 측에서는 새로운 JWS 형식 포스트백을 수신하고 분석을 위해 이를 파싱합니다
오늘 설명한 모든 기능에 대해 AdAttributionKit은 SKAdNetwork와 완벽하게 상호 운용됩니다 SKAdNetwork에 대한 자세한 정보는 WWDC22의 ‘SKAdNetwork의 새로운 사항’ 세션을 참고하세요
마지막으로 AdAttributionKit 통합을 시작할 때 매우 유용한 리소스인 AdAttributionKit 문서도 확인해 보시기 바랍니다 오늘 시간 내주셔서 감사합니다!
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.