Class
MomentCashbackService
class MomentCashbackService {
private init() {}
// 사용자 ID 설정 (콜백 있음)
func setUserId(_ userId: String, onComplete: CashbackCallbackPayload) {}
// 캐시백 리스트 불러오기
func listCashback(onComplete: @Sendable @MainActor @escaping (Result<[CashbackProgramType], Error>) -> Void) {
}
- Full reference
func listCashback(onComplete: @Sendable @MainActor @escaping (Result<[CashbackProgramType], Error>) -> Void) {Argument
- Returns
- .success (list)
- .failure(error)
- Returns
CashbackViewController
UIKit에서 캐시백 서비스 UI를 론칭할때 사용하는 클래스
public class CashbackViewController: UIViewController {
// retun값을 받을 delegate
public weak var delegate: CashbackViewControllerDelegate?
// Redirect하고 싶은 URL
public var redirectTo: String?
}
CashbackViewControllerDelegate
CashbackViewController 콜백 delegate protocol
public protocol CashbackViewControllerDelegate: AnyObject {
// UI 화면에서 종료시 불림
func cashbackViewControllerDidFinish(_ viewController: CashbackViewController)
// UI 화면에서 에러가 발생했을 때
func cashbackViewController(_ viewController: CashbackViewController, didFailWithError error: CashbackError)
}
CashbackError
// WARNING: case가 불러와지지 않습니다. CashbackError.rawValue (0,1, ...)로 이용이 필요합니다
public enum CashbackError: Error {
/**
* @case userIdNotFound
* @discussion Indicates that no user ID could be found or retrieved,
* which is necessary for Moment cashback service activation.
*/
case userIdNotFound = 0
/**
* @case initializationError
* @discussion Indicates that an error occurred during CashbackUI initialization.
* @param error The underlying error regarding initialization.
*/
case initializationError(Error)
}
Callback
CashbackCallbackPayload
/// Simple callback payload for SDK operations
public struct CashbackCallbackPayload: Sendable {
public let success: Bool
public let message: String
}
- Full reference
case success:- Description
- method 호출이 성공했을 때 불림.
fun onFailure(exception: MomentException)- Description
- method 호출이 실패했을 때 불림.
- Description
Data
Moment가 제공하는 Cashback program 상세 페이지에서는 각 data들을 아래와 같이 사용하고 있습니다.CashbackProgramType
public struct CashbackProgramType {
// 프로그램의 비즈니스 ID
public var businessId: String
// 프로그램의 비즈니스 명칭
public var businessName: String
// 비즈니스 이미지 URL
public var businessImageUrl: String
// 비지니스가 속한 카테고리
public var category: BusinessCategoryType
/*
* 운영 사이트의 URL
* e.g., "<https://www.lotteon.com/p/display/main/lotteon>"
*/
public var url: String
/*
* 프로그램 이름
* e.g., "상품 판매 프로그램", "커미션 프로그램"
*/
public var programName: String
/*
* 적립 불가능한 경우들 (markdown string)
* NOTE: listCashback 호출 시, 항상 빈 string을 반환합니다.
* e.g., "임직원몰, 상품권, e쿠폰, 순금, 롯데온 앱에서 구매 시"
*/
public var displayAllowedCases: String
/*
* 유의사항 (markdown string)
* NOTE: listCashback 호출 시, 항상 빈 string을 반환합니다.
* e.g.,
* "* 구매금액에서 적립금, 즉시할인, 쿠폰, 배송비, 상품 결제 금액의 10% 부가세 제외된 실 구매금액을 기준으로 적립됩니다.
* * 쇼핑비서를 통한 결제 건에 한해 적립 되오니 반드시 쇼핑비서를 통해 결제해주세요."
*/
public var displayCaution: String
/*
* products = [
* {
* target: string, // "옥스포드 신발, 운동화"
* startDateTimestampMillis: number, // 1689064080859
* endDateTimestampMillis: number, // 1689064090012
* commissionType: enum, // CPS
* commission: CashbackCommission, // {"3.5", "%"}
* platforms: enum, // MOBILE_WEB (string enum)
* transactionCreated: CashbackTransactionTrigger, // {"PURCHASED", {"3", "시간"}}
* transactionConfirmed: CashbackTransactionTrigger, // {"PURCHASED", {"2", "달"}}
* }, ...
* ]
*
* products는 비어있을 수 없음. 항상 [0]번 index가 main product로 취급됨.
* 모든 항목이 동일한 프로그램을 공유하는 경우
* [0]번째 index에 target = ""로 데이터가 들어가 있음.
*/
public var products: [CashbackProductType]
}
CashbackProductType
public struct CashbackProductType {
/*
* 적립 대상
* target = "" 일 경우 전체
* e.g., "옥스포드 신발, 운동화"
*/
public var target: String
// 프로그램 시작 일자 (timestamp millis)
public var startDateTimestampMillis: Int64
// 프로그램 종료 일자 (timestamp millis)
public var endDateTimestampMillis: Int64
/*
* 커미션 유형
* e.g., CashbackCommissionType.CPS, CashbackCommissionType.CPA, etc.
*/
public var commissionType: CashbackCommissionType
/*
* 커미션: 커미션 값 + 커미션 유닛
* e.g. (2.5 + %), (3000 + KRW)
*/
public var commission: CashbackCommission
}
CashbackCommission
public struct CashbackCommission {
/*
* 커미션의 값에 해당하는 필드
* e.g., "2.5"
*/
public var amount: String
/*
* 커미션 단위
* e.g., PERCENTAGE_COMMISSION_UNIT (1), KRW_COMMISSION_UNIT (2)
*/
public var unit: CashbackCommissionUnit
}
CashbackCommissionType
// WARNING: case가 불러와지지 않습니다. CashbackCommissionType.rawValue (1,2, ..)로 이용이 필요합니다
public enum CashbackCommissionType {
/// 알 수 없음 / 미분류
case unknown = 0
/* Cost Per Sale */
case CPS
/* Cost Per Action */
case CPA
/* Cost Per Click */
case CPC
/* Cost Per iMpression */
case CPM
}
BusinessCategoryType
// WARNING: case가 불러와지지 않습니다. BusinessCategoryType.rawValue (1,2, ..)로 이용이 필요합니다
public enum BusinessCategoryType: Int, Sendable, CaseIterable {
/// 알 수 없음 / 미분류
case unknown = 0
/// 음식, 식품 관련 (예: CJ더 마켓 등)
case food
/// 종합 쇼핑몰, 온라인몰
case mall
/// 문화, 도서 (예: Yes24, 교보문고)
case culture
/// 여행, 항공, 숙박, 교통
case travel
/// 전자제품, 가전
case electronics
/// 유아, 아동 용품
case infant
/// 건강, 헬스케어, 의료
case health
/// 패션, 의류, 잡화
case fashion
/// 뷰티, 화장품, 미용
case beauty
/// 금융, 보험, 투자
case finance
/// 리빙, 가구, 생활용품
case living
/// 교육, 학습, 자기계발
case education
/// 기타
case etc
}