# Marketap SDK 기능 연동

## 사전 작업 <a href="#pre-work" id="pre-work"></a>

SDK의 기능을 본격적으로 연동하기 전, SDK 설치 및 초기화 단계를 완료해주세요.

{% content-ref url="initialize" %}
[initialize](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/sdk-integrating/initialize)
{% endcontent-ref %}

## 권장 기능 연동 순서 <a href="#integration" id="integration"></a>

## 1. 푸시를 사용하는 경우

자체적인 푸시 기능을 사용하고자 하는 경우, 푸시 연동을 스킵하여도 됩니다.

{% hint style="success" %}
푸시는 권한을 동의한 유저에게 무료로 메세지를 전달할 수 있는 중요한 Offsite 채널입니다. Marketap은 데이터 기반 오디언스 및 캠페인 기능을 최대로 활용하기 위해서 푸시 기능 연동을 권장하고 있습니다.
{% endhint %}

푸시의 경우, SDK 설치에 이어서 추가적인 연동 절차가 필요합니다. 아래 문서를 통해서 푸시 연동을 완료해주세요.

{% content-ref url="../push-notification/overview" %}
[overview](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/push-notification/overview)
{% endcontent-ref %}

## 2. SDK에서 이벤트 및 유저 데이터 연동

### 2-1 이벤트 및 유저 관련 문서 확인

**SDK의 주요 기능 중 하나인 이벤트 연동을 진행합니다.**

Marketap은 SDK에서 바로 코드를 작성하기 보다는, Marketap의 데이터 수집 방법에 대한 문서를 먼저 읽는 것을 권장합니다. 아래 문서를 참고하여, Marketap이 어떻게 SDK를 통해 이벤트를 수집하는지를 확인하세요.

{% content-ref url="../taxonomy/sdk" %}
[sdk](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/sdk)
{% endcontent-ref %}

**SDK에서 중요한 개념 중 하나는 유저와 기기간의 관계에 대한 설명입니다.**

Marketap이 특정 유저에게 푸시를 보내기 위해서는, 유저가 로그인되어있는 기기가 어떤 것인지 식별해야 하며, 해당 내용을 올바르게 숙지해야만 적절한 유저에게 캠페인을 집행할 수 있습니다.

{% content-ref url="../taxonomy/sdk/user-profile/device" %}
[device](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/sdk/user-profile/device)
{% endcontent-ref %}

### 2-2 데이터 정합 확인

SDK에서 코드 작성을 마무리 하였더라도, 해당 데이터가 오타나 누락 없이 Marketap으로 잘 전송되는지 반드시 확인해야 합니다. 아래 문서를 통해 데이터 연동을 마무리 한 후 체크해야할 내용을 확인하세요.

{% content-ref url="../taxonomy/validation" %}
[validation](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/validation)
{% endcontent-ref %}

### 2-3 인앱메세지 테스트

SDK는 주기적으로 서버를 통해 해당 기기에서 노출해야할 인앱메세지를 조회하며, 정해진 상황에 도달하면 앱 내에 배너, 풀스크린 등 화면을 노출합니다. 이벤트를 연동한 후, 연동된 이벤트에 맞춰서 인앱메세지 캠페인이 잘 노출되는지 또한 확인이 필요합니다.

{% content-ref url="../in-app-message/in-app-campaign" %}
[in-app-campaign](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/in-app-message/in-app-campaign)
{% endcontent-ref %}

### 2-4 고급 기능 설정

SDK는 사용성을 위해 커스텀한 기능 설정을 제공하고 있습니다.

SDK의 동작을 올바르게 설정했는지 디버깅하고자 하는 경우, 아래 내용을 참고하여 로그 레벨을 설정해주세요.

{% content-ref url="../advanced-usage/log-level" %}
[log-level](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/advanced-usage/log-level)
{% endcontent-ref %}

웹뷰를 통해 앱을 구현하는 고객사의 경우 아래 웹뷰 브릿지의 내용을 참고하여 이벤트를 수집해주세요.

{% content-ref url="../advanced-usage/webview-bridge" %}
[webview-bridge](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/advanced-usage/webview-bridge)
{% endcontent-ref %}

푸시나 인앱메세지를 클릭하였을 때 동작을 수정하고자 하는 고객사의 경우 아래 커스텀 클릭 핸들러의 내용을 참고하여 설정해주세요.

{% hint style="warning" %}
**웹뷰를 통해 앱을 구현하는 웹앱 고객사의 경우, 커스텀 클릭 핸들러 구현을 강력히 권장드립니다.**\
SDK 기본 동작에서 웹 링크(http/https)는 외부 브라우저로 열리며, 푸시 및 인앱메시지 모두 동일하게 적용됩니다. 웹뷰 기반 앱에서는 사용자가 앱을 이탈하지 않도록 반드시 직접 처리하는 것을 권장드립니다.
{% endhint %}

{% content-ref url="../advanced-usage/custom-click-handler" %}
[custom-click-handler](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/advanced-usage/custom-click-handler)
{% endcontent-ref %}

## 3. 서버 데이터 연동

### 3-1 API를 통한 S2S 데이터 연동

SDK에서 수집할 수 없는 데이터나 서버를 통해 수정된 유저 정보가 있는 경우, API를 통해 데이터를 전송할 수 있습니다.

{% hint style="warning" %}
서버로 수집되는 이벤트는 인앱메세지 캠페인 노출 조건을 만족하더라도 아무 동작도 하지 않습니다. 인앱 메세지를 노출하는 용도로 연동한 이벤트는 서버로 수집하는 경우 유의하세요.
{% endhint %}

{% content-ref url="../taxonomy/server" %}
[server](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/server)
{% endcontent-ref %}

### 3-2 유저 데이터 마이그레이션

처음 마켓탭에 연동되는 경우, 플랫폼에는 수집된 데이터가 부족합니다. 이때 이미 가지고 있는 유저 데이터를 마이그레이션하여 데이터가 부족한 상황에서도 마케터가 캠페인을 집행하도록 도울 수 있습니다.

{% content-ref url="../taxonomy/server/user-event/migration" %}
[migration](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/server/user-event/migration)
{% endcontent-ref %}

### 3-3 체크리스트 확인

API를 통해 서버로 데이터를 전송하였을 때에도, 반드시 연동 후 체크리스트를 통해 누락이 있는지 확인하여야 합니다.

{% content-ref url="../taxonomy/validation" %}
[validation](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/validation)
{% endcontent-ref %}
