콘텐츠로 이동
동의 화면으로 연동하기 (launchUI)

동의 화면으로 연동하기 (launchUI)

페어리가 제공하는 동의 화면으로 X 서비스 시작하기 (동의 화면 제공형 · ConsentUI)

동의 화면 제공형 연동은 크게 세 단계로 이루어집니다.

  1. 앱 시작 시점에 init 호출
  2. 페어리 UI 진입 시점에 setUserIdlaunchUI 호출
  3. 로그아웃/탈퇴 시점 처리

STEP 1) 앱 시작 시점에 init 호출하기

섹션 제목: “STEP 1) 앱 시작 시점에 init 호출하기”

Application#onCreate 에서 init 을 호출합니다. init 은 SDK 기본 초기화를 수행하고, 인식 서비스가 비정상 종료됐던 경우 서비스를 자동으로 재시작합니다.

class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val moment = MomentSDK.getInstance(this)
moment.init(
config,
object : MomentSDK.RestartResultCallback {
override fun onSuccess(resultCode: MomentSDK.RestartResultCode) {
if (resultCode == MomentSDK.RestartResultCode.SERVICE_RESTARTED) {
// 인식 서비스가 재시작되었습니다.
}
}
override fun onFailure(exception: MomentException) {
// 초기화/재시작에 실패했습니다.
}
}
)
}
}

STEP 2) 페어리 UI 진입 시점에 setUserId → launchUI 호출하기

섹션 제목: “STEP 2) 페어리 UI 진입 시점에 setUserId → launchUI 호출하기”

사용자가 페어리 서비스 화면(동의/설정/캐시백 등)에 진입하는 시점에 setUserId 로 사용자를 설정한 뒤 launchUI 를 호출합니다.

  • launchUI(config, redirectTo, callback) method reference
  • redirectTo/basic-sdk/consent 를 입력하면 권한 동의 페이지로 이동합니다.
// NOTE: userId를 설정하지 않으면 launchUI가 실패합니다.
momentSdk.setUserId("...", object : MomentSDK.ResultCallback {
override fun onSuccess() {
momentSdk.launchUI(
momentSdkConfig,
"/basic-sdk/consent",
object : MomentSDK.ResultCallback {
override fun onSuccess() {}
override fun onFailure(exception: MomentException) {}
}
)
}
override fun onFailure(exception: MomentException) {}
})

STEP 3) 동의 화면 종료 시점에 변경 값 조회하기 (Optional)

섹션 제목: “STEP 3) 동의 화면 종료 시점에 변경 값 조회하기 (Optional)”

웹뷰가 종료된 시점을 브로드캐스트로 수신해, 변경된 동의/권한 상태를 앱에서 읽을 수 있습니다.

AndroidManifest.xml 파일에 receiver 를 추가합니다.

<application
...>
<receiver
android:name="..."
android:enabled="true"
android:exported="false"
>
<intent-filter>
<action android:name="ai.fairytech.moment.action.CASHBACK_PAGE_CLOSED" />
</intent-filter>
</receiver>
</application>
class WebViewClosedReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != "ai.fairytech.moment.action.CASHBACK_PAGE_CLOSED") return
val moment = MomentSDK.getInstance(context.applicationContext)
// 인식 서비스 실행 여부 - boolean
val isRunning = moment.isRunning()
// App Usage 권한 설정 여부 - boolean
// 해당 권한이 없으면 인식 서비스를 실행할 수 없습니다.
val isAppUsagePermissionGranted = MomentSDK.isAppUsagePermissionGranted(context.applicationContext)
// Notification 권한 설정 여부 - boolean
// 해당 권한이 없으면 인식 서비스가 실행 중이어도 알림을 보낼 수 없습니다.
val isNotificationPermissionGranted = MomentSDK.isNotificationPermissionGranted(context.applicationContext)
val pendingResult = goAsync()
moment.getConsent(object : MomentSDK.CallbackWithResult<GetUserConsentResponse> {
override fun onSuccess(result: GetUserConsentResponse) {
// result 처리
pendingResult.finish()
}
override fun onFailure(exception: MomentException) {
// exception 처리
pendingResult.finish()
}
})
}
}
  • 인식 서비스를 유지하는 경우 (기본 권장): 아무것도 호출하지 않아도 됩니다.
  • 인식 서비스를 종료하는 경우: wipeData() 로 로컬 데이터를 삭제한 뒤 stop() 을 호출합니다.
momentSdk.wipeData()
momentSdk.stop()

사용자가 서비스에서 탈퇴하는 경우 withdrawUserConsentAndStop() 을 호출합니다. 모든 동의가 철회되고 인식 서비스가 종료됩니다.

momentSdk.withdrawUserConsentAndStop(object : MomentSDK.ResultCallback {
override fun onSuccess() {}
override fun onFailure(exception: MomentException) {}
})