Class
MomentSDK
- Full reference
- Description
- MomentSDK 싱글톤 인스턴스를 반환함. 최초 호출 시 인스턴스 생성, 이후 호출은 동일 인스턴스 재사용.w
applicationContext를 추출해 내부적으로 저장하며 inspector를 enable시킴.
- Parameters
contextapplicationContext추출에 사용되는 Context. activity context 전달해도 됨.
- Returns
MomentSDK싱글톤 인스턴스.
- Description
- 서비스를 시작시키는 method로, 이 method가 성공적으로 완료된 후부터 사용자가 접속한 비즈니스를 인식할 수 있음.
- 필수 권한 체크 → recognition rules 캐시/서버 로드 → config 검증 → config 영속화 → API alarm 스케줄링 → external recognition service 시작 순으로 진행.
- Parameters
config- 서비스를 시작할 때 필요한 설정값들. 알림 채널/ID/아이콘 등 (
Config참고).
- 서비스를 시작할 때 필요한 설정값들. 알림 채널/ID/아이콘 등 (
callback- 서비스 시작 결과를 알려주는 callback.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 start가 deactivate된 경우 (서버 kill-switch)ErrorCode.APP_USAGE_PERMISSION_REQUIRED- x flavor에서 사용 통계 접근 권한이 없는 경우ErrorCode.VPN_PERMISSION_REQUIRED- vpn flavor에서 VPN 권한이 없는 경우ErrorCode.SERVICE_ALREADY_STARTING- start가 이미 진행 중이거나 서비스가 이미 실행 중인 경우ErrorCode.EMPTY_USER_ID- standard campaign이 있는 프로젝트에서 userId가 설정되지 않은 경우ErrorCode.INVALID_CONFIG- serviceNotificationChannelId / serviceNotificationId / serviceNotificationIconResId 등 필수 필드가 누락되었거나 잘못된 경우ErrorCode.SERVICE_START_FAILED- foreground service 시작에 실패한 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없거나 timeout 발생ErrorCode.AUTHENTICATION_FAILED- API 인증 실패 (HTTP 403)ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우 (HTTP 429)ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우 (HTTP 502/503/504)ErrorCode.ERROR_OCCURRED- 알 수 없는 에러가 발생한 경우
- Description
- service를 중지시키는 method로, stop이 불린 후부터는 사용자가 접속한 비즈니스를 인식할 수 없음.
- 내부적으로
SHOULD_SERVICE_BE_RUNNINGflag를 false로 설정 후 host app lifecycle tracker 해제, BubbleService 중지, foreground recognition service 중지, internal alarm cancel 순으로 진행.
- Parameters
callback- 서비스 중지 결과를 알려주는 callback.
- onFailure ErrorCode
ErrorCode.SERVICE_STOP_FAILED- foreground service 중지에 실패한 경우ErrorCode.ERROR_OCCURRED- 예상치 못한 에러가 발생한 경우
- Description
- 이전에 start()를 호출한 적이 있으나 서비스가 꺼져 있는 경우 external 인식 서비스의 재시작을 시도함. 앱에서 적절한 시점(e.g.
Application.onCreate)에 이 메소드를 호출하면 서비스 restart를 시도함. - 호출 컨텍스트(interactive caller + foreground 여부)에 따라 즉시 bootstrap 또는 jitter delay bootstrap을 선택. 동시 업데이트/대량 부팅 시 서버 herd 방지.
- 이전에 start()를 호출한 적이 있으나 서비스가 꺼져 있는 경우 external 인식 서비스의 재시작을 시도함. 앱에서 적절한 시점(e.g.
- Parameters
config- 서비스 재시작 시 사용할 설정값. null이면 저장된 config 사용.
callback- 재시작 결과를 알려주는 callback. 성공 시
RestartResultCode반환.
- 재시작 결과를 알려주는 callback. 성공 시
- onSuccess RestartResultCode
RestartResultCode.SERVICE_SHOULD_NOT_BE_RUNNING- 서비스가 꺼져 있어야 하는 상태 (start 호출된 적 없음)RestartResultCode.SERVICE_ALREADY_RUNNING- service가 이미 실행 중이라 별도 처리 안 한 경우RestartResultCode.SERVICE_RESTARTED- service가 꺼져 있어서 start 시도 후 재시작 성공
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우 (서버 kill-switch)MomentSDK.start에서 발생할 수 있는 모든 ErrorCode- 재시작 시도 시 start와 동일한 실패 사유
- Description
- recognition service가 실행 중인지 확인. activity manager의 running service 리스트를 조회함.
shouldDenyAll킬스위치가 켜진 상태면 항상 false 반환.
- Returns
- 서비스가 실행 중이면 true, 아니면 false. 예외 발생 시도 false 반환 (안전).
- Description
- SDK 내부에 구현된 Activity (
FullWebViewActivity)를 실행하여 페어리 제공 웹뷰를 띄움. - 호출 시 config를 파일에 영속화 후 deviceConfig에서 받은 cashback main URL로 웹뷰 진입.
redirectTo가 주어지면 해당 path 로 redirect. - 사용자가 웹뷰를 닫으면
finishCallback.onFinish()가 호출됨.
- SDK 내부에 구현된 Activity (
- Parameters
config- 서비스를 시작할 때 필요한 설정값.
redirectTo- 웹뷰 진입 후 redirect할 path (예:
/basic-sdk/consent). 비어 있으면 default page.
- 웹뷰 진입 후 redirect할 path (예:
callback- 웹뷰 activity 실행 성공/실패 callback. webview 진입 시점까지의 결과만 통보.
finishCallback- 웹뷰 activity가 finish 되었을 때 호출되는 callback. nullable.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우 (shouldDenyAll)ErrorCode.EMPTY_USER_ID- userId가 설정되지 않은 경우ErrorCode.INVALID_CONFIG- config의 필수 필드가 누락되었거나 잘못된 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 설정 파일 저장 실패 또는 알 수 없는 에러
- Description
- 현재 활성 상태인 cashback 웹 UI(
FullWebViewActivity)를 닫음. - UI가 active 상태가 아니어도 desired state (UI 닫힘)이 이미 달성된 것으로 보고
onSuccess()호출.
- 현재 활성 상태인 cashback 웹 UI(
- Parameters
callback- 닫기 결과 callback. UI 닫기에 실패한 경우 onFailure.
- onFailure ErrorCode
ErrorCode.ERROR_OCCURRED- 예상치 못한 에러로 UI 닫기 실패
- Description
- 사용자 식별에 사용되는 userId를 SDK 로컬에 설정함.
MomentSDK.start를 호출하기 전/후 모두 호출 가능. - userId 설정 후 백그라운드로 adId 업로드 (변경 있을 때만).
- userId를 빈 문자열로 입력하면 실패함.
- 사용자 식별에 사용되는 userId를 SDK 로컬에 설정함.
- Parameters
userId- 사용자 식별에 사용되는 unique id. 빈 문자열 불가.
callback- 결과 callback.
- onFailure ErrorCode
ErrorCode.EMPTY_USER_ID- userId가 빈 문자열인 경우ErrorCode.ERROR_OCCURRED- 예상치 못한 에러
- Description
setUserId를 통해 저장된 userId를 반환.MomentSDK.start전/후 모두 호출 가능.shouldDenyAll킬스위치가 켜진 상태면 빈 문자열 반환. 예외 발생 시도 빈 문자열 반환.
- Returns
- 저장된 userId. 없으면 빈 문자열.
- Description
- 호스트 앱에서 전달한 device advertising ID (ADID)를 SDK에 설정함.
MomentSDK.start전/후 모두 호출 가능. isAdTrackingEnabled=false,adId가 빈 값, 또는 zeroed-out 값("00000000-0000-0000-0000-000000000000")이면 저장/업로드 안 함 (사용자 추적 거부).- 값이 변경되었을 때만 백그라운드에서 서버로 업로드.
- 호스트 앱에서 전달한 device advertising ID (ADID)를 SDK에 설정함.
- Parameters
adId- advertising ID 문자열.
isAdTrackingEnabled- 사용자가 ad tracking에 동의한 경우 true. false면 adId를 저장/업로드하지 않음.
callback- 결과 callback.
- onFailure ErrorCode
ErrorCode.ERROR_OCCURRED- 예상치 못한 에러
- Description
- 사용자의 demographics 정보 (생년, 성별)를 서버에 업로드함.
- 모든 필드가 null이면 no-op으로
onSuccess()호출. birthYear가 1900~현재년도 범위를 벗어나면 실패.
- Parameters
userAttributesUserAttributes.Builder로 구성된 사용자 속성 객체.
callback- 업로드 결과 callback.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우ErrorCode.EMPTY_USER_ID- userId가 설정되지 않은 경우ErrorCode.INVALID_USER_ATTRIBUTES- birthYear가 1900 ~ 현재년도 범위를 벗어난 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 알 수 없는 에러
- Description
- 버블 알림을 보낼지 일반 알림을 보낼지 설정함.
MomentSDK.start전/후 모두 호출 가능. 콜백 없는 fire-and-forget. shouldDenyAll킬스위치 상태면 no-op.
- 버블 알림을 보낼지 일반 알림을 보낼지 설정함.
- Parameters
sendBubble- true면 버블 알림, false면 일반 알림.
- Description
- 현재 project에서 지원하는 cashback program 리스트를 callback으로 전달.
- 이미 종료된 cashback (첫 product의 endDate가 현재 시각 이전)은 필터링.
- callback의
onSuccess에서List<CashbackProgram>을 받을 수 있음.
- Parameters
callback- cashback 리스트 또는 실패 사유를 받는 callback.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 listCashback이 deactivate된 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 알 수 없는 에러
- Description
- 사용자가 선택한 캐시백의 businessId를 받아 해당 캐시백을 받을 수 있는 웹사이트/앱을
FullWebViewActivity로 띄움. - businessId 또는 userId가 비어 있으면 실패.
- 사용자가 선택한 캐시백의 businessId를 받아 해당 캐시백을 받을 수 있는 웹사이트/앱을
- Parameters
businessId- 사용자가 클릭한 캐시백의 business id.
callback- 실패/성공 결과 callback.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우ErrorCode.EMPTY_CASHBACK_BUSINESS_ID- businessId가 빈 문자열인 경우ErrorCode.EMPTY_USER_ID- userId가 설정되지 않은 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 알 수 없는 에러
- Description
- 현재 userId의 사용자 동의 상태를 생성하거나 업데이트하는 method (upsert).
request.items에 명시된 동의 항목들이 서버에 그대로 저장됨.withdraw_all=true로 설정하면 서버에서 모든 동의 항목 일괄 철회 (items는 무시됨).- 호출 성공 시 서버에 저장된 최종 동의 상태가
onSuccesscallback으로 반환됨.
- Parameters
request- 저장할 동의 정보를 담은
SubmitUserConsentRequest객체.
- 저장할 동의 정보를 담은
callback- 결과 callback (
CallbackWithResult<SubmitUserConsentResponse>).
- 결과 callback (
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 알 수 없는 에러
- Description
- 현재 userId에 저장된 사용자 동의 상태를 서버에서 조회.
UserConsent.isGranted(code)로 특정 동의 항목의 동의 여부 조회 가능. 해당 code의 동의 항목이 없으면 null 반환.
- Parameters
callback- 결과 callback.
onSuccess(result: UserConsent)로 현재 동의 상태 전달.
- 결과 callback.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 알 수 없는 에러
- Description
- 현재 userId의 모든 사용자 동의를 철회. 내부적으로
setConsent와 동일 endpoint를withdraw_all=true로 호출함. - 부분 철회는
setConsent의 items 에서 원하는 code들을is_granted=false로 보낼 것.
- 현재 userId의 모든 사용자 동의를 철회. 내부적으로
- Parameters
callback- 결과 callback.
- onFailure ErrorCode
ErrorCode.API_NOT_ACTIVATED- 현재 프로젝트에서 deactivate된 경우ErrorCode.NETWORK_CONNECTION_REQUIRED- 인터넷 연결이 없는 경우ErrorCode.AUTHENTICATION_FAILED- API 인증 실패ErrorCode.TOO_MANY_REQUESTS- API를 과도하게 호출한 경우ErrorCode.TEMPORARY_SERVER_ERROR- 페어리 서버에 일시적으로 문제가 생긴 경우ErrorCode.ERROR_OCCURRED- 알 수 없는 에러
- Description
- SDK의 project ID를 설정함.
AuthManager를 통해 SharedPreferences에 저장. - 일반적으로
AndroidManifest.xml의 meta-data로 설정하지만 런타임 변경이 필요할 때 사용.
- SDK의 project ID를 설정함.
- Parameters
projectId- 설정할 project ID 문자열.
- Description
- SDK의 API key를 설정함.
AuthManager를 통해 SharedPreferences에 저장.
- SDK의 API key를 설정함.
- Parameters
apiKey- 설정할 API key 문자열.
- Description
- 현재 SDK에 설정된 project ID를 반환.
- Parameters
appContext- application context.
- Returns
- 현재 project ID. 없으면 빈 문자열.
- Description
- 현재 SDK에 설정된 API key를 반환.
- Parameters
appContext- application context.
- Returns
- 현재 API key. 없으면 빈 문자열.
- Description
- 호스트 앱이 App Usage 권한(
PACKAGE_USAGE_STATS)을 갖고 있는지 알려주는 util method. shouldDenyAll킬스위치가 켜진 상태면 false 반환.
- 호스트 앱이 App Usage 권한(
- Parameters
context- 권한 확인에 사용되는 null이 아닌 context.
- Returns
- 권한이 있으면 true, 아니면 false.
- Description
- VPN 권한 상태를 확인하는 util method (vpn flavor용).
shouldDenyAll킬스위치가 켜진 상태면 false 반환.
- Parameters
context- 권한 확인에 사용되는 null이 아닌 context.
- Returns
- 권한이 있으면 true, 아니면 false.
- Description
- 앱에서 사용자에게 알림을 보낼 수 있는지를 알려주는 util method.
- runtime notification permission은 Android API level 33부터 도입된 개념이므로 API level에 따라 아래의 값을 리턴함.
- API level ≥ 33: notification permission이 있는지
- API level < 33: notification을 보낼 수 있는지
- Parameters
context- 권한 확인에 사용되는 null이 아닌 context.
- Returns
- 알림 표시 가능하면 true, 아니면 false.
- Description
MomentSDK.Config
Config 자기 자신을 반환하므로 chaining 가능합니다.
<aside>❗
notificationChannelId로 넘겨주는 알림 채널을 생성할 때, importance를 IMPORTANCE_HIGH 이상으로 설정해주셔야 합니다. (그래야 사용자에게 heads-up 알림으로 알림이 나가게 됩니다.)
</aside>
MomentException
UserAttributes
Enum
ErrorCode
- Full reference
API_NOT_ACTIVATED— 현재 프로젝트가 서버 kill-switch 또는 device 상태(rooted)에 의해 deactivate된 경우.APP_USAGE_PERMISSION_REQUIRED— x flavor에서PACKAGE_USAGE_STATS권한이 없는 경우.VPN_PERMISSION_REQUIRED— vpn flavor에서 VPN 권한이 없는 경우.NETWORK_CONNECTION_REQUIRED— 인터넷 연결 없음 또는 timeout (TimeoutException / IOException).SERVICE_START_FAILED— foreground service 시작에 실패한 경우.SERVICE_STOP_FAILED— foreground service 중지에 실패한 경우.SERVICE_ALREADY_STARTING— start가 이미 진행 중이거나 서비스가 실행 중인 경우.PROJECT_ID_REQUIRED— projectId가 설정되지 않은 경우.API_KEY_REQUIRED— apiKey가 설정되지 않은 경우.GET_SIGNING_KEY_FAILED— signing key 조회에 실패한 경우.AUTHENTICATION_FAILED— API 인증 실패 (HTTP 403).EMPTY_USER_ID— userId가 설정되지 않거나 빈 문자열인 경우.EMPTY_CASHBACK_BUSINESS_ID— cashback businessId가 빈 문자열인 경우.INVALID_CONFIG—Config의 필수 필드가 누락되었거나 잘못된 경우.INVALID_USER_ATTRIBUTES—UserAttributes검증 실패 (birthYear가 1900~현재년도 범위 밖).CASHBACK_NOT_FOUND— 주어진 businessId의 cashback이 존재하지 않는 경우.TOO_MANY_REQUESTS— API를 과도하게 호출한 경우 (HTTP 429).TEMPORARY_SERVER_ERROR— 서버 일시 오류 (HTTP 502/503/504).ERROR_OCCURRED— 알 수 없는 / 분류되지 않은 에러.EMPTY_DEVICE_TOKEN— push device token이 비어 있는 경우.PUSH_NOT_SUPPORTED— push 미지원 빌드 또는 환경.
Gender
MomentSDK.RestartResultCode
- Full reference
SERVICE_SHOULD_NOT_BE_RUNNING— 서비스가 꺼져 있어야 하는데init이 호출된 경우 (start가 호출된 적 없거나 명시적 stop 이후).SERVICE_ALREADY_RUNNING— service가 켜져 있고 이미 실행 중인 경우 (재시작 불필요).SERVICE_RESTARTED— service가 꺼져 있어서 재시작을 시도했고 성공한 경우.
Callback
MomentSDK.CallbackWithResult<T>
MomentSDK.ResultCallback
MomentSDK.UiFinishCallback
launchUI 로 띄운 페어리 제공 웹뷰가 finish 되었을 때 트리거됩니다.
MomentSDK.RestartResultCallback
MomentSDK.ListCashbackResultCallback
Data
UserConsent
isGranted(code)는 해당 code의 동의 항목이 없으면 null, 있으면 그 항목의 동의 여부 (true/false)를 반환합니다. 호스트 앱은 null vs false를 구분해서 UI를 결정할 수 있습니다.
TERMS_OF_SERVICE— 서비스 이용 약관PERSONAL_INFO— 개인정보 수집/이용MARKETING_PUSH— 마케팅 정보 수신MARKETING_PERSONAL_INFO— 마케팅 활용을 위한 개인정보 처리NIGHTTIME_PUSH— 야간 알림 수신PARTNER_THIRD_PARTY_PROVISION— 제3자 제공 동의 (파트너)
SubmitUserConsentRequest
items에 명시한 동의 항목만 서버에 upsert됩니다 (항목별 부분 업데이트 가능).withdrawAll=true로 설정하면 items 는 무시되고 모든 동의 항목이 일괄 철회됩니다. (SDK.withdraw가 내부적으로 이 형태로 호출함)
SubmitUserConsentResponse
setConsent 의 onSuccess callback으로 전달됩니다.
ConsentItemValue
CashbackProgram
productsList는 비어 있을 수 없으며, 항상[0]번 index가 main product로 취급됨.- 모든 항목이 동일한 프로그램을 공유하는 경우
[0]번 index에target = ""로 데이터가 들어가 있음.