# Android 연동

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

푸시 알림을 연동하기 전, 반드시 SDK를 설치 및 초기화하여야 하며, Marketap 서버에서 푸시를 보낼 때 사용할 인증서가 등록되어있어야 합니다. 관련 내용은 아래 문서를 통해 확인해주세요.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Android SDK 설치</td><td><a href="../../sdk-integrating/initialize/android">android</a></td></tr><tr><td>Android 인증서 등록</td><td><a href="../certification/android">android</a></td></tr></tbody></table>

## 1. Google Firebase 연동하기

Marketap은 안드로이드 푸시를 지원하기 위해서 Firebase Cloud Messaging을 사용하고 있습니다. 따라서 안드로이드 프로젝트에 Firebase가 추가되어야 합니다. 자세한 내용은 구글의 [가이드 문서](https://firebase.google.com/docs/android/setup?hl=ko)를 참고해주세요.

{% hint style="warning" %}
FCM 푸시 메세지를 사용하기 위해서는 구글 플러그인 설치가 필요합니다.

```kts
id("com.google.gms.google-services") version "4.4.2"
```

{% endhint %}

## 2. 권한 설정하기

<figure><img src="https://content.gitbook.com/content/TQoY0rYrzNUQxhlUfYFm/blobs/KSIzYy1xtcuzEFUJhJvr/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202025-02-24%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.35.59.png" alt=""><figcaption><p>AndoirdManifest.xml 파일</p></figcaption></figure>

이어서, AndroidManifest.xml 파일에 아래 권한을 추가합니다.

```xml
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
```

## 3. Firebase Messaging Service 연동하기 <a href="#id-4" id="id-4"></a>

Marketap에서 푸시를 사용하기 위해서는 앱의 푸시 이용 상황에 따른 설정이 필요합니다.

{% tabs %}
{% tab title="신규 연동" %}
Marketap은 FCM 기반 푸시 메시지를 수신하고 클릭을 처리하기 위한 전용 서비스를 제공합니다. `MarketapFirebaseMessagingService` 클래스를 AndroidManifest.xml 파일에 등록해 주세요.

```xml
<service
    android:name="com.marketap.sdk.client.push.MarketapFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
```

{% endtab %}

{% tab title="기존 서비스와 함께 사용" %}
이미 앱에서 FirebaseMessagingService를 사용 중이라면, Marketap에서 제공하는 `MarketapFirebaseMessagingService.handleMarketapRemoteMessage()` 메서드를 통해 Marketap 푸시만 안전하게 처리할 수 있습니다.

```kotlin
// Kotlin 예시
class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        super.onMessageReceived(remoteMessage)

        if (MarketapFirebaseMessagingService.handleMarketapRemoteMessage(this, remoteMessage)) {
            // Marketap 메시지를 처리했습니다.
            // 추가 처리는 필요하지 않습니다.
        } else {
            // Marketap 메시지가 아닙니다.
            // 다른 푸시 핸들러가 있다면 이 메시지를 전달하세요.
        }
    }
}
```

```java
// Java 예시
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        if (MarketapFirebaseMessagingService.handleMarketapRemoteMessage(this, remoteMessage)) {
            // Marketap 메시지를 처리했습니다.
            // 추가 처리는 필요하지 않습니다.
        } else {
            // Marketap 메시지가 아닙니다.
            // 다른 푸시 핸들러가 있다면 이 메시지를 전달하세요.
        }
    }
}
```

{% endtab %}
{% endtabs %}

## 4. 앱 푸시 수신 설정 (선택)

푸시 알림을 발송하려면 사용자에게 수신 동의를 받아야 합니다. 관련 권한을 앱에서 직접 관리하거나, 원하는 타이밍에 `Marketap.requestAuthorizationForPushNotifications` 함수를 통해 권한을 요청할 수 있습니다.

{% hint style="warning" %}
마켓탭은 따로 호출이 없다면 권한을 요청하지 않습니다. 반드시 필요한 타이밍에 직접 함수 호출을 통해 사용자에게 푸시 수신 권한을 받아주세요.
{% endhint %}

{% tabs %}
{% tab title="kotlin" %}

```kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val permissionButton = findViewById<Button>(R.id.permissionButton)
        permissionButton.setOnClickListener {
            Marketap.requestAuthorizationForPushNotifications(this)
        }
        // ...
    }
    
    // ...
}
```

{% endtab %}

{% tab title="Java" %}

```java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button permissionButton = findViewById(R.id.permissionButton);
        permissionButton.setOnClickListener(view -> {
            Marketap.requestAuthorizationForPushNotifications(this);
        });

        // ...
    }

    // ...
}
```

{% endtab %}
{% endtabs %}

## 5. 클릭 액션 커스텀하기 (선택)

푸시 캠페인에 클릭 액션 URL이 설정되어 있는 경우, 마켓탭 SDK는 기본 동작으로 `ACTION_VIEW` 인텐트를 실행하여 해당 URL을 처리합니다.

실행된 URL은 앱의 딥링크 처리 Activity(예: `intent-filter`에 등록된 Activity의 `onCreate` 또는 `onNewIntent`)에서 수신하여 처리할 수 있습니다.

이 기본 동작을 비활성화하고 클릭 시 액션을 직접 제어하려면, 아래 페이지 안내에 따라 clickHandler 기반 커스텀 연동을 진행해주세요.

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

## 6. 이어서 진행하기

아래 카드를 통해 Android에 필요한 연동을 이어서 하실 수 있습니다. Marketap SDK가 지원하는 기능 및 연동 순서는 [functions](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/sdk-integrating/functions "mention") 페이지를 확인해주세요.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Push Notification 테스트</td><td><a href="../test/android-push">android-push</a></td></tr><tr><td>In-App Message 테스트</td><td><a href="android">android</a></td></tr><tr><td>고급 기능 설정</td><td><a href="../../advanced-usage/overview">overview</a></td></tr></tbody></table>
