# 인앱메시지

인앱 메시지는 푸시 알림과 달리 앱이 켜진 상태에서 동작하므로 유저를 덜 방해하면서 콘텐츠를 보여줄 수 있습니다. DFINERY의 인앱메시지는 이벤트 기반으로 동작하며 자동으로 표시됩니다.

### Support Library 의존성 추가하기

DFINERY는 인앱메시지를 표시하는데 [Support Library](https://developer.android.com/jetpack/androidx/releases/core?hl=ko)를 필요로 하므로 다음의 일련의 단계를 완료하세요.

{% hint style="warning" %}
`androidx.core:core`는 `1.5.0` 이상 버전을 사용해야 합니다.
{% endhint %}

1. 앱의 모듈 디렉터리 내에 있는 `build.gradle` 파일을 엽니다.
2. dependencies에 Support Library 의존성을 추가합니다.

{% tabs %}
{% tab title="build.gradle" %}

```groovy
 dependencies {
    implementation 'androidx.core:core:1.9.0'
}
```

{% endtab %}

{% tab title="build.gradle.kts" %}

```groovy
 dependencies {
    implementation ("androidx.core:core:1.9.0")
}
```

{% endtab %}
{% endtabs %}

## 인앱메시지 하드웨어 가속

[하드웨어 가속 향상](https://developer.android.com/topic/performance/hardware-accel)을 설정해야 콘솔에서 보이는 모습과 동일하게 표시할 수 있으며, 애니메이션을 부드럽게 동작시킬 수 있습니다.

### Application 수준

Android 매니페스트 파일에서 다음 속성을 태그에 추가하고 전체 애플리케이션에 하드웨어 가속을 사용 설정합니다.

```xml
<application android:hardwareAccelerated="true" />
```

### Activity 수준

개별 Activity에 맞게 제어할 수도 있습니다. Activity 수준에서 하드웨어 가속을 사용 또는 중지하려면 요소의 `android:hardwareAccelerated` 속성을 사용할 수 있습니다.

```xml
<application>
    <activity />
    <activity android:hardwareAccelerated="true" />
</application>
```

## 인앱메시지 사용자 지정 부모 뷰 설정

SDK는 자동으로 표시되고 있는 Activity의 최상위 뷰를 찾아 인앱 메시지를 표시합니다. 만약 자동 설정을 사용하지 않으실 경우 `setCustomInAppMessageParentView()`를 사용하여 직접 표시할 부모 뷰를 설정 할 수있습니다.

```kotlin
Dfinery.getInstance().setCustomInAppMessageParentView(parentView);
```

## 딥 링크 데이터 활용

인앱메시지 버튼에 딥 링크를 등록했을 경우 클릭 시에 딥 링크에 설정된 [Activity](https://developer.android.com/reference/android/app/Activity)이 실행됩니다.

{% hint style="info" %}
Activity에 딥 링크를 연동하는 방법은 Android에서 제공하는 [앱 콘텐츠 딥 링크 만들기](https://developer.android.com/training/app-links/deep-linking?hl=ko)를 참고하여 주시기 바랍니다.
{% endhint %}

Activity에서 딥 링크 데이터를 가져오려면 다음과 같이 데이터를 가져올수 있습니다.

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

```java
public class MainActivity extends AppCompatActivity{
    @Override
    public void onCreate() {
        super.onCreate();
        if(getIntent() != null && getIntent().getData()!=null){
            Uri deeplink = getIntent().getData();
        }
    }
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
class MainActivity: AppCompatActivity(){
    override fun onCreate() {
        super.onCreate()
        intent?.let { 
            it.data?.let {
                val deeplink = it
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}
