> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fairytech.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Android Setup

> SDK 연동을 위한 사전 준비 및 설정

# 설치하기

## 사전 준비

아래 항목을 `eng@fairytech.ai`로 전달해 주시면, 프로젝트 설정 후에 `Project ID`, `SDK API Key`, `Maven Secret Key`를 회신드리도록 하겠습니다.

* 개발용 인증서 SHA-1 키해시 및 앱 패키지명
* 배포용 인증서 SHA-1 키해시 및 앱 패키지명
* (FCM 혹은 캐시백 이용시) 푸쉬 알림 설정을 위한 service account key.json

## STEP 1) SDK dependency 추가

`settings.gradle` 또는 `build.gradle` 에 MomentSDK를 다운로드 받을 maven repository를 추가해주세요.

<Note>
  `${MAVEN_SECRET}`에는 사전에 전달드린 Maven Secret Key 값을 넣어 주시면 됩니다.
</Note>

```kotlin theme={null}
// 1) maven repository 추가
repositories {
    maven {
        url "https://asia-northeast3-maven.pkg.dev/moment-prod-16047/moment-x"
        // TODO: Replace MAVEN_SECRET.
        credentials {
            username = "_json_key_base64"
            password = "${MAVEN_SECRET}"
        }
        authentication {
            basic(BasicAuthentication)
        }
    }
}
```

`build.gradle` 에 moment dependency를 추가해주세요. 추가 후 `Sync Project with Gradle Files` 를 실행해 dependency가 다운로드 되는지 확인해주세요.

```kotlin theme={null}
dependencies {
    implementation "ai.fairytech:moment-x:${LATEST_VERSION}"
}
```

## STEP 2) Project ID, API Key 설정

`AndroidManifest.xml`에 `PROJECT_ID`, `API_KEY`를 추가해주세요.

<Note>
  `${PROJECT_ID}`, `${SDK_API_KEY}`에는 사전에 전달드린 값을 넣어 주시면 됩니다.
</Note>

```xml theme={null}
<application ...>
    <meta-data
        android:name="ai.fairytech.moment.PROJECT_ID"
        android:value="${PROJECT_ID}" />
    <meta-data
        android:name="ai.fairytech.moment.API_KEY"
        android:value="${SDK_API_KEY}" />
</application>
```

## STEP 3) Proguard rule 적용

```kotlin theme={null}
-keep class ai.fairytech.moment.** { *; }
-keep interface ai.fairytech.moment.** { *; }
```

# SDK 설정

## STEP 1) 초기화

앱 시작 시점에 SDK를 초기화합니다. `Application#onCreate` 에서 호출합니다.

```kotlin theme={null}
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Moment.initialize(this)
    }
}
```

## STEP 2) Config 설정

Moment 서비스를 시작하기 전, 실행에 필요한 config를 설정합니다. ([스타터내 예시 코드](https://github.com/fairytech-external/android-x-starter/blob/eedd27ba080e3581afacb165ea2f31dd601d9756/app/src/main/java/ai/fairytech/moment/sample/ui/main/BaseMainFragment.kt#L207))

* `notificationChannelId`, `notificationId`, `notificationIconResId`
  * 인식 푸시알림을 위한 notificationChannel 정보입니다.
  * 사용자에게 실시간 알림을 heads-up 으로 보여주기 위해 `notificationChannelId`로 넘겨주는 알림 채널을 생성할 때, importance를 `IMPORTANCE_HIGH` 이상으로 설정해주셔야 합니다.
    * foreground service 를 위한 notificationChannel 정보입니다. 해당 알림의 경우 foreground service 가 실행 중이라는 사실을 유저에게 알리기 위해 제공됩니다.
* `serviceNotificationChannelId`, `serviceNotificationId`, `serviceNotificationIconResId`, `serviceNotificationTitle`, `serviceNotificationText`

```kotlin theme={null}
// Kotlin
MomentSDK.Config(applicationContext)
	.notificationChannelId(NotificationController.NOTIFICATION_CHANNEL_ID) // 알림 채널 아이디
	.notificationId(NotificationController.NOTIFICATION_ID) // 알림 아이디
	.notificationIconResId(R.drawable.baseline_person_24) // 알림 스몰 아이콘
	.serviceNotificationChannelId(NotificationController.SERVICE_NOTIFICATION_CHANNEL_ID) // 서비스를 위해 필요한 채널아이디
	.serviceNotificationId(NotificationController.SERVICE_NOTIFICATION_ID)
	.serviceNotificationIconResId(R.drawable.baseline_person_24) // 서비스 알림 스몰 아이콘
	.serviceNotificationTitle("인식 서비스")
	.serviceNotificationText("인식 서비스가 동작 중입니다")
	
// Java
new MomentSDK.Config(applicationContext)
	.notificationChannelId(NotificationController.NOTIFICATION_CHANNEL_ID) // 알림 채널 아이디
	.notificationId(NotificationController.NOTIFICATION_ID) // 알림 아이디
	.notificationIconResId(R.drawable.baseline_person_24) // 알림 스몰 아이콘
	.serviceNotificationChannelId(NotificationController.SERVICE_NOTIFICATION_CHANNEL_ID) // 서비스를 위해 필요한 채널아이디
	.serviceNotificationId(NotificationController.SERVICE_NOTIFICATION_ID)
	.serviceNotificationIconResId(R.drawable.baseline_person_24) // 서비스 알림 스몰 아이콘
	.serviceNotificationTitle("인식 서비스")
	.serviceNotificationText("인식 서비스가 동작 중입니다")
```

<Warning>
  `notificationChannelId`로 넘겨주는 알림 채널을 생성할 때, importance를 `IMPORTANCE_HIGH` 이상으로 설정해주셔야 합니다.

  (그래야 사용자에게 heads up 알림으로 알림이 나가게 됩니다.)
</Warning>
