동의 화면으로 연동하기 (launchUI)
동의 화면으로 연동하기 (launchUI)
페어리가 제공하는 동의 화면으로 X 서비스 시작하기 (동의 화면 제공형 · ConsentUI)
사전 준비
섹션 제목: “사전 준비”동의 화면 제공형 연동은 크게 세 단계로 이루어집니다.
- 앱 시작 시점에
init호출 - 페어리 UI 진입 시점에
setUserId→launchUI호출 - 로그아웃/탈퇴 시점 처리
STEP 1) 앱 시작 시점에 init 호출하기
섹션 제목: “STEP 1) 앱 시작 시점에 init 호출하기”Application#onCreate 에서 init 을 호출합니다. init 은 SDK 기본 초기화를 수행하고, 인식 서비스가 비정상 종료됐던 경우 서비스를 자동으로 재시작합니다.
init(config, callback)method reference
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 referenceredirectTo에/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) {}})