private val iapHelper: IapHelper = IapHelper.getInstance(context)
운영 모드 설정
IAP는 세 가지 운영 모드를 지원합니다. 하나는 아이템 구매에 대한 청구를 활성화하는 것이고, 다른 두 가지는 아이템 구매에 대한 앱 사용자의 청구 없이 IAP 기능을 테스트하는 것입니다.
setOperationMode()를 호출하지 않으면, 운영 모드는 기본적으로 OPERATION_MODE_PRODUCTION으로 설정됩니다. (테스트는 지원하지 않지만, 베타 테스트 및 일반적인 앱 배포는 가능합니다).
주의베타 테스트 또는 일반적인 배포를 위해 앱을 제출하기 전에 운영 모드가 OPERATION_MODE_PRODUCTION로 설정되어 있는지 확인하세요. 즉, Seller Portal에서의 앱 상태가 Registering 또는 Updating 일 때만 OPERATION_MODE_TEST 또는 OPERATION_MODE_TEST_FAILURE로 설정해야 합니다.
모드
설명
OPERATION_MODE_PRODUCTION
startPayment() 요청은 지정된 대로 처리되고, 성공적인 요청에 대해서는 금융 거래가 발생하고, 실제 결과가 반환됩니다 (성공 또는 실패).
참고: 모든 IAP SDK 요청에 대해:
OPERATION_MODE_PRODUCTION 모드에서 구매한 아이템만 소유한 아이템으로 간주됩니다.
OPERATION_MODE_TEST
startPayment() 요청은 지정된 대로 처리되고, 금융 거래는 발생하지 않습니다 (라이선스 테스터는 구매 비용이 청구되지 않습니다). 그리고 항상 결과는 성공으로 반환됩니다. OPERATION_MODE_TEST 모드의 결제창에 대한 자세한 내용은 아래를 참조하세요.
참고: 모든 IAP SDK 요청에 대해:
OPERATION_MODE_TEST 모드에서 구매한 아이템만 소유한 아이템으로 간주됩니다.
인앱 아이템을 구매하려면, 사용자는 Seller Portal에서 앱의 라이선스 테스터 로 등록해야 합니다. 이 모드에서 라이선스 테스터는 항상 인앱 아이템을 무료로 받습니다. 다른 모든 사용자는 인앱 아이템을 구매하려고 하면 오류 메시지가 표시됩니다.
OPERATION_MODE_TEST_FAILURE
모든 IAP SDK 요청이 실패합니다. 이는 앱이 부적절한 입력 및 사용자 동작과 같은 오류를 처리할 수 있는지 확인하기 위한 부정적인 테스트입니다.
메모OPERATION_MODE_TEST 이 설정된 경우, 아래 팝업 및 결제창의 우측 상단에 Sandbox가 표시되어 사용자에게 구매 비용이 청구되지 않음 을 나타냅니다.
요청
public void setOperationMode( OperationMode _mode )
매개변수
매개변수
유형
설명
_mode
운영 모드
(필수) IAP SDK API 요청 처리를 제어하는 IAP 운영 모드: OPERATION_MODE_PRODUCTION OPERATION_MODE_TEST OPERATION_MODE_TEST_FAILURE
요구소비되지 않은 소모품이나 비소모품, 구독 여부를 확인하려면, 애플리케이션을 실행할 때마다 getOwnedList()를 호출해야 합니다.
getOwnedList()는 앱 사용자가 이전에 구매하여 현재 가지고 있는 인앱 아이템 목록을 반환합니다:
아직 사용되지 않았고 소비 처리되지 않은 소모품
비소모품
무료 체험 또는 구독 중인 구독 상품
취소된 구독 항목은 구독 기간이 종료될 때까지 포함됩니다.
구독 가격이 변경되는 경우, 새로운 가격, 갱신 날짜, 사용자 동의 등의 정보가 포함됩니다.
getOwnedList() 는 또한 OnGetOwnedListListener 인터페이스에서 지정한 데이터와 처리 결과를 반환합니다.
메모구매한 소모품을 다시 구매하려면 consumePurchasedItems()를 호출하여 소비 처리를 해야하며, 이는 앱 사용자가 앱에서 아이템을 사용하기 전이나 후에 수행할 수 있습니다. 시스템 과부하나 오작동을 방지하기 위해 소비 처리가 되지 않은 모든 소모품 리스트는 한 번의 consumePurchasedItems() 함수 호출로 일괄 처리하는 것을 권장합니다.
요청
public boolean getOwnedList
(
String _productType,
OnGetOwnedListListener _onGetOwnedListListener
)
매개변수
매개변수
유형
설명
_productType
String
(필수) 반환할 인앱 아이템 유형: item: 소모품 및 비소모품 subscription: 구독 상품 all: 소모품, 비소모품 및 구독 상품
_onGetOwnedListListener
(필수) 반환할 데이터 및 처리 결과를 지정하는 OnGetOwnedListListener 인터페이스
반환값
true - 요청이 서버로 성공적으로 전송되었고, 결과는 OnGetOwnedListListener 인터페이스 리스너로 전송됩니다.
PRICE_INCREASE_USER_AGREEMENT_REQUIRED: 기존 가입자의 동의가 필요한 가격 인상 사용자는 구독을 갱신하기 전에 인상된 가격을 명시적으로 수락해야 합니다.
PRICE_INCREASE_NO_USER_AGREEMENT_REQUIRED: 기존 구독자가 아무런 조치를 취하지 않아도 가격이 인상됩니다. 사용자가 거부하지 않는 한, 다음 정기 구독료 결제 시기에 새로운 가격이 청구됩니다.
PRICE_DECREASE: 다음 정기 구독 결제 기한이 되면 기존 구독자에게 가격 인하가 적용됩니다.
코드 조각
Java
iapHelper.getOwnedList(HelperDefine.PRODUCT_TYPE_ALL, new OnGetOwnedListListener() {
@Override
public void onGetOwnedProducts(@NonNull ErrorVo errorVo, @NonNull ArrayList<OwnedProductVo> ownedList) {
if (errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) {
for (OwnedProductVo item : ownedList) {
if (item.getIsConsumable()) {
// TODO: Consume the consumable item not yet consumed
}
// TODO: Check if the subscription price has changed and user consent is required
SubscriptionPriceChangeVo subscriptionPriceChangeVo = item.getSubscriptionPriceChange();
}
} else {
// TODO: Handle the error
}
}
});
Kotlin
iapHelper.getOwnedList(IapHelper.PRODUCT_TYPE_ALL)
{ errorVo: ErrorVo, ownedList: ArrayList<OwnedProductVo> ->
if (errorVo.errorCode == IapHelper.IAP_ERROR_NONE) {
for (item in ownedList) {
if (item.isConsumable) {
// TODO: Consume the consumable item not yet consumed
}
// TODO: Check if the subscription price has changed and user consent is required
val subscriptionPriceChangeVo = item.subscriptionPriceChange
}
} else {
// TODO: Handle the error
}
}
인앱 아이템 세부 정보 가져오기
getProductsDetails()는 앱에 등록된 하나 이상 또는 모든 인앱 아이템에 대한 정보를 반환합니다. OnGetProductsDetailsListener 인터페이스에서 지정한 아이템 데이터와 처리 결과를 반환합니다.
요청
public void getProductsDetails
(
String _productIds,
OnGetProductsDetailsListener _onGetProductsDetailsListener
)
매개변수
매개변수
유형
설명
_productIds
String
(필수) 다음 중 하나로 지정된 하나 이상의 인앱 아이템 ID::
앱 내 모든 아이템을 지정하는 빈 문자열 ("")
하나 이상의 고유합 인앱 아이템 ID (쉼표로 구분) (예: "coins,blocks,lives")
Seller Portal (Applications 페이지 > 앱 상태 클릭 > In App Purchase 탭 > Item ID)에서 아이템 ID를 가져올 수 있습니다.
_onGetProductsDetailsListener
(필수) 반환할 데이터 및 처리 결과를 지정하는 OnGetProductsDetailsListener 인터페이스
true: 실패 후, 오류 팝업이 표시됩니다. false: 실패 후, 오류 팝업이 표시되지 않습니다.
ProductVo
Getter
반환 유형
설명
getItemId()
String
인앱 아이템의 고유 ID
getItemName()
String
인앱 아이템 이름
getItemPrice()
Double
현지 통화로 표시된 인앱 아이템의 현재 현지 가격 (예: 7.99)
참고: 표시될 때 항상 소수점 오른쪽에 있는 두 숫자를 포함합니다 (통화 기호는 표시하지 않음). 예를 들어, 현지 가격이 8유로인 경우 "8.00"이 표시됩니다. 가격이 정수일 때 소수점과 소수점 오른쪽에 있는 두 숫자를 표시하지 않으려면, 대신 getItemPriceString()을 사용하세요.
getItemPriceString()
String
현지 통화 기호 및 가격 (현지 통화 형식):
통화 기호 + 가격 (예: £7.99)
가격 + 통화 기호 (예: 66815₫)
참고: 표시될 때 가격이 정수이면 소수점과 소수점 오른쪽의 두 자리는 표시되지 않습니다. 예를 들어, 현지 가격이 8유로이면 "€8"이라는 값이 표시됩니다. 소수점 오른쪽의 두 자리를 표시하려면(가격이 정수더라도) 대신 getItemPrice()를 사용하세요.
true: 실패 후, 오류 팝업이 표시됩니다. false: 실패 후, 오류 팝업이 표시되지 않습니다.
PurchaseVo
Getter
반환 유형
설명
getItemId()
String
인앱 아이템의 고유 ID
getItemName()
String
인앱 아이템 이름
getItemPrice()
Double
현지 통화로 표시된 인앱 아이템의 현재 현지 가격 (예: 7.99)
참고: 표시될 때 항상 소수점 오른쪽에 있는 두 숫자를 포함합니다(통화 기호는 표시하지 않음). 예를 들어, 현지 가격이 8유로인 경우 "8.00"이 표시됩니다. 가격이 정수일 때 소수점과 소수점 오른쪽에 있는 두 숫자를 표시하지 않으려면, 대신 getItemPriceString()을 사용하세요.
getItemPriceString()
String
현지 통화 기호 및 가격 (현지 통화 형식):
통화 기호 + 가격 (예: £7.99)
가격 + 통화 기호 (예: 66815₫)
참고: 표시될 때 가격이 정수이면 소수점과 소수점 오른쪽의 두 자리는 표시되지 않습니다. 예를 들어, 현지 가격이 8유로이면 "€8"이라는 값이 표시됩니다. 소수점 오른쪽의 두 자리를 표시하려면(가격이 정수더라도) 대신 getItemPrice()를 사용하세요.
IAP 6.0부터 사용되지 않음 getPurchaseId()에서 반환된 구매 ID를 사용하여 구매를 확인하기 위한 IAP server API를 호출하려면, 구매 확인을 참조하세요.
getPassThroughParam()
String
앱이 인앱 구매 및 결제 거래에 할당한 고유 식별자입니다. PassThroughParam 매개변수가 입력되지 않으면, 빈 문자열 ("")이 반환됩니다.
getItemImageUrl()
String
아이템 이미지 및 썸네일의 URL
getItemDownloadUrl()
String
인앱 아이템을 다운로드할 URL
getOrderId()
String
주문의 고유 식별자
getJsonString()
String
전송되는 JSON 전체 데이터
코드 조각
Java
iapHelper.startPayment("Nuclear", "pLKjLKjLJL87=76df56rf+4f5", new OnPaymentListener() {
@Override
public void onPayment(@NonNull ErrorVo errorVo, @Nullable PurchaseVo purchaseVo) {
if (errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) {
if (purchaseVo != null) {
String passThroughParam = _purchaseVo.getPassThroughParam();
// TODO: If you have set a PassThroughParameter in the request,
// you can verify the PassThroughParameter here.
if (purchaseVo.getIsConsumable()) {
String purchaseId = purchaseVo.getPurchaseId();
// TODO: Consume the consumable item by calling `consumePurchasedItems()`
}
} else {
// TODO: Handle the error
}
}
});
Kotlin
iapHelper.startPayment("Nuclear", "pLKjLKjLJL87=76df56rf+4f5")
{ errorVo: ErrorVo, purchaseVo: PurchaseVo? ->
if (errorVo.errorCode == IapHelper.IAP_ERROR_NONE) {
if (purchaseVo != null) {
val passThroughParam: String = purchaseVo.passThroughParam
// TODO: If you have set a PassThroughParameter in the request,
// you can verify the PassThroughParameter here.
if (purchaseVo.isConsumable) {
val purchaseId: String = purchaseVo.purchaseId
// TODO: Consume the consumable item by calling `consumePurchasedItems()`
}
}
} else {
// TODO: Handle the error
}
}
메모앱에서 아이템을 구매하려고 하면 아래와 유사한 팝업창이 나타날 수 있습니다. 삼성 계정에 로그인해야 합니다.
구매한 소모품 소비
consumePurchasedItems()는 구매한 하나 이상의 소모품을 소비된 것으로 처리하여, 다시 구매할 수 있게 합니다. 앱 사용자는 아이템을 사용했을 수도 있고 사용하지 않았을 수도 있습니다. OnConsumePurchasedItemsListener 인터페이스에서는 지정한 아이템 데이터와 처리 결과를 반환합니다.
메모구매한 소모품은 구매를 확인한 후 즉시 소비 처리하고, 소비되지 않은 모든 소모품 리스트는 시스템 과부하나 오작동을 방지하기 위해 한번의 consumePurchasedItems() 함수 호출로 일괄 처리하는 것을 권장합니다.
요청
public boolean consumePurchasedItems
(
String _purchaseIds,
OnConsumePurchasedItemsListener _onConsumePurchasedItemsListener
)
매개변수
매개변수
유형
설명
_purchaseIds
String
(필수) 소비 처리 할 소모품의 구매에 대한 하나 이상의 고유 식별자 값 (쉼표로 구분)
_onConsumePurchasedItems
(필수) 반환할 데이터 및 처리 결과를 지정하는 OnConsumePurchasedItemsListener인터페이스
반환값
true: 요청이 서버로 성공적으로 전송되었고, 결과는 OnConsumePurchasedItemsListener 인터페이스 리스너 로 전송됩니다.
true: 실패 후, 오류 팝업이 표시됩니다. false: 실패 후, 오류 팝업이 표시되지 않습니다.
ConsumeVo
Getter
반환 유형
설명
getPurchaseId()
String
인앱 아이템 구매 거래에 대해 Samsung IAP가 할당한 고유 식별자
getStatusCode()
int
Status code 0 : 성공 1 : 잘못된 purchaseID 2 : 주문 실패 3 : 비소모품 4 : 이미 소비됨 5 : 권한이 없는 사용자 9 : 예상치 못한 서비스 오류
getStatusString()
String
Status message 0 : "success" 1 : "Can't find order with this purchaseID." 2 : "Can't consume this purchase because it's not successful order." 3 : "This type of item is not consumable." 4 : "This purchase has been consumed already." 5 : "Can't consume this purchase because the user is not authorized to consume this order." 9 : "service error"
getJsonString()
String
전송되는 JSON 전체 데이터
코드 조각
Java
final String PURCHASEID = "d215d9abcd17b12578a21c0ea7d8821747b64939732a3243b538d8bcae245590";
iapHelper.consumePurchasedItems(PURCHASEID, new OnConsumePurchasedItemsListener() {
@Override
public void onConsumePurchasedItems(@NonNull ErrorVo errorVo, @NonNull ArrayList<ConsumeVo> consumeList) {
if (errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) {
for (ConsumeVo item : consumeList) {
// TODO: Get details of the consumption
}
} else {
// TODO: Handle the error
}
}
});
Kotlin
val PURCHASEID: String = "d215d9abcd17b12578a21c0ea7d8821747b64939732a3243b538d8bcae245590"
iapHelper.consumePurchasedItems(PURCHASEID)
{ errorVo: ErrorVo, consumeList: ArrayList<ConsumeVo> ->
if (errorVo.errorCode == IapHelper.IAP_ERROR_NONE) {
for (item in consumeList) {
// TODO: Get details of the consumption
}
} else {
// TODO: Handle the error
}
}
구독 프로모션 자격 확인하기
getPromotionEligibility()는 고객에게 적용되는 무료 체험판 및 신규 할인 혜택과 같은 구독의 가격 정책을 반환합니다. 이를 통해 각 고객에게 구매 시 적용 가능한 프로모션에 대해 알릴 수 있습니다. 고객은 결제 전에 사용 가능한 프로모션을 확인할 수 있으므로, 구매를 장려할 수 있습니다.
요청
public void getPromotionEligibility
(
String _itemIds,
OnGetPromotionEligibilityListener onGetPromotionEligibilityListener
)
매개변수
매개변수
유형
설명
_itemIds
String
(필수) 하나 이상의 고유한 인앱 아이템 ID. 여러 값은 쉼표로 구분됩니다. 예: "coins,blocks,lives"
_onGetPromotionEligibilityListener
(필수) 구독의 가격 정책 및 처리결과를 지정하는 onGetPromotionEligibility() 인터페이스
true: 실패 후, 오류 팝업이 표시됩니다. false: 실패 후, 오류 팝업이 표시되지 않습니다.
PromotionEligibilityVo
Getter
반환 유형
설명
getItemId()
String
인앱 아이템 ID
getPricing()
String
사용자에게 적용되는 가격 정책:
"FreeTrial" - 사용자가 구독을 무료로 사용할 수 있는 일정 기간입니다. 이 유형의 구독에 대한 자세한 내용은 무료 체험을 참조하세요.
"TieredPrice" - 제한된 기간 동안 할인된 가격을 청구하는 구독입니다. 이 유형의 구독에 대한 자세한 내용은 신규 할인 가격을 참조하세요.
"RegularPrice" - 구독 기간마다 정해진 가격을 청구하는 구독입니다. 이 유형의 구독에 대한 자세한 내용은 일반 정기 구독을 참조하세요.
코드 조각
Java
iapHelper.getPromotionEligibility("Nuclear, Claymore, SpeedUp", new OnGetPromotionEligibilityListener() {
@Override
public void onGetPromotionEligibility(@NonNull ErrorVo errorVo, @NonNull ArrayList<PromotionEligibilityVo> pricingList) {
if (errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) {
for (PromotionEligibilityVo pricing : pricingList) {
// TODO: Get the pricing options of the subscription
}
} else {
// TODO: Handle the error
}
}
});
Kotlin
iapHelper.getPromotionEligibility("Nuclear, Claymore, SpeedUp")
{ errorVo: ErrorVo, pricingList: ArrayList<PromotionEligibilityVo> ->
if (errorVo.errorCode == IapHelper.IAP_ERROR_NONE) {
for (item in pricingList) {
// TODO: Get the pricing options of the subscription
}
} else {
// TODO: Handle the error
}
}
true: 실패 후, 오류 팝업이 표시됩니다. false: 실패 후, 오류 팝업이 표시되지 않습니다.
PurchaseVo
Getter
반환 유형
설명
getItemId()
String
인앱 아이템의 고유 ID
getItemName()
String
인앱 아이템 이름
getItemPrice()
Double
현지 통화로 표시된 인앱 아이템의 현재 현지 가격 (예: 7.99)
참고: 표시될 때 항상 소수점 오른쪽에 있는 두 숫자를 포함합니다(통화 기호는 표시하지 않음). 예를 들어, 현지 가격이 8유로인 경우 "8.00"이 표시됩니다. 가격이 정수일 때 소수점과 소수점 오른쪽에 있는 두 숫자를 표시하지 않으려면, 대신 getItemPriceString()을 사용하세요.
getItemPriceString()
String
현지 통화 기호 및 가격 (현지 통화 형식):
통화 기호 + 가격 (예: £7.99)
가격 + 통화 기호 (예: 66815₫)
참고: 표시될 때 가격이 정수이면 소수점과 소수점 오른쪽의 두 자리는 표시되지 않습니다. 예를 들어, 현지 가격이 8유로이면 "€8"이라는 값이 표시됩니다. 소수점 오른쪽의 두 자리를 표시하려면(가격이 정수더라도) 대신 getItemPrice()를 사용하세요.
IAP 6.0부터 사용되지 않음 getPurchaseId()에서 반환된 구매 ID를 사용하여 구매를 확인하기 위한 IAP Server API를 호출하려면, 구매 확인을 참조하세요.
getPassThroughParam()
String
앱이 인앱 구매 및 결제 거래에 할당한 고유 식별자입니다. PassThroughParam 매개변수가 입력되지 않으면, 빈 문자열 ("")이 반환됩니다.
getItemImageUrl()
String
URL of the item’s image and thumbnail
getItemDownloadUrl()
String
인앱 아이템을 다운로드할 URL
getOrderId()
String
Unique identifier of the order
getJsonString()
String
전송되는 JSON 전체 데이터
코드 조각
Java
iapHelper.changeSubscriptionPlan(
"oldItem",
"newItem",
HelperDefine.ProrationMode.INSTANT_PRORATED_DATE,
"pLKjLKjLJL87=76df56rf+4f5",
new OnChangeSubscriptionPlanListener() {
@Override
public void onChangeSubscriptionPlan(@NonNull ErrorVo errorVo, @Nullable PurchaseVo purchaseVo) {
if (errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) {
if (purchaseVo != null) {
// TODO: Check details about your newly purchased subscription
String passThroughParam = purchaseVo.getPassThroughParam();
// TODO: If you have set a PassThroughParameter in the request,
// you can verify the PassThroughParameter here.
}
} else {
// TODO: Handle the error
}
}
});
Kotlin
iapHelper.changeSubscriptionPlan(
"oldItem",
"newItem",
HelperDefine.ProrationMode.INSTANT_PRORATED_DATE,
"pLKjLKjLJL87=76df56rf+4f5")
{ errorVo: ErrorVo, purchaseVo: PurchaseVo? ->
if (errorVo.errorCode == IapHelper.IAP_ERROR_NONE) {
if (purchaseVo != null) {
// TODO: Check details about your newly purchased subscription
val passThroughParam: String = purchaseVo.passThroughParam
// TODO: If you have set a PassThroughParameter in the request,
// you can verify the PassThroughParameter here.
}
} else {
// TODO: Handle the error
}
}
응답 코드
Reponse Code (Value)
설명
IAP_ERROR_NONE (0)
성공
IAP_PAYMENT_IS_CANCELED (1)
결제 취소됨
IAP_ERROR_INITIALIZATION (-1000)
IAP 초기화 중 오류
참고: 발생 가능한 오류 세부 정보:
10000 : IAP Client이 유효하지 않습니다.
10001 : Samsung Checkout app이 유효하지 않습니다.
10011 : 서비스 초기화에 실패했습니다. 다시 시도하세요.
IAP_ERROR_NEED_APP_UPGRADE (-1001)
IAP 업그레이드가 필요합니다
IAP_ERROR_COMMON (-1002)
IAP 실행 중 오류
참고: 발생 가능한 오류 세부 정보:
1005 : 구독 요금제 변경 요청 시, 지정한 기존 구독 상품이 존재하지 않습니다.
1006 : 구독 요금제 변경 요청 시, 지정한 기존 구독 상품을 구독하고 있지 않습니다.
1012 : 구독 요금제 변경 요청 시, 지정한 인앱 아이템이 구독 유형이 아닙니다.
1014 : 구독 요금제 변경이 이미 요청되었습니다.
7002 : 부정의심 거래로 차단되었습니다.
9000 : OPERATION_MODE_TEST_FAILURE가 설정된 경우, getOwnedList()가 실패합니다.
9005 : OPERATION_MODE_TEST_FAILURE가 설정된 경우, consumePurchasedItems()가 실패합니다.
9006 : PassThroughParam이 Base64로 인코딩되지 않았습니다.
9007 : PassThroughParam이 최대 길이를 초과했습니다.
9010 : 소모품이 아직 소비 처리되지 않았습니다.
9013 : OPERATION_MODE_TEST_FAILURE가 설정된 경우, getProductsDetails()가 실패합니다.
9014 : OPERATION_MODE_TEST_FAILURE가 설정된 경우, startPayment()가 실패합니다.
100010 : 운영 모드가 OPERATION_MODE_TEST로 설정되어 있고, 사용자가 라이선스 테스터가 아닌 경우 startPayment()는 실패합니다.
IAP_ERROR_ALREADY_PURCHASED (-1003)
비소모품을 재구매하거나 구독을 만료일 전에 재구매할 때 발생하는 오류입니다.
참고: 발생 가능한 오류 세부 정보:
9224 : 비소모품을 재구매하거나 구독을 만료일 전에 재구매할 수 없습니다.
IAP_ERROR_WHILE_RUNNING (-1004)
필수 정보 없이 결제를 요청할 때 발생하는 오류입니다.
IAP_ERROR_PRODUCT_DOES_NOT_EXIST (-1005)
요청한 인앱 아이템을 사용할 수 없는 경우 발생하는 오류입니다.
참고: 발생 가능한 오류 세부 정보:
9202 : 요청한 인앱 아이템은 앱이 배포된 국가 또는 기기에서 유효하지 않습니다. Seller Portal에서 앱 배포 조건을 확인하세요.
9207 : 요청하신 아이템 ID가 현재 운영 모드에 존재하지 않습니다. 아이템 ID를 확인하세요.
IAP_ERROR_CONFIRM_INBOX (-1006)
서버에 구매 요청을 한 후 앱이 구매 결과를 받지 못할 때 발생하는 오류입니다. 이 경우, 구매가 성공적으로 완료되었을 수 있으므로 구매를 요청한 아이템에 대한 확인이 필요합니다.
IAP_ERROR_ITEM_GROUP_DOES_NOT_EXIST (-1007)
인앱 아이템의 그룹 ID가 존재하지 않을 때 발생하는 오류입니다.
참고: 발생 가능한 오류 세부 정보:
9201 : 등록된 아이템 정보가 없습니다. Seller Portal에서 인앱 구매 활성화 및 아이템 등록을 확인하세요.
IAP_ERROR_NETWORK_NOT_AVAILABLE (-1008)
네트워크를 사용할 수 없을 때 발생하는 오류입니다.
IAP_ERROR_IOEXCEPTION_ERROR (-1009)
IOException
IAP_ERROR_SOCKET_TIMEOUT (-1010)
SocketTimeoutException
IAP_ERROR_CONNECT_TIMEOUT (-1011)
ConnectTimeoutException
IAP_ERROR_NOT_EXIST_LOCAL_PRICE (-1012)
해당 인앱 아이템은 해당 국가에서 판매되지 않습니다.
참고: 발생 가능한 오류 세부 정보:
9134 : 현지 가격이 존재하지 않습니다. (지원되지 않는 MCC)
IAP_ERROR_NOT_AVAILABLE_SHOP (-1013)
해당 국가에서는 IAP가 지원되지 않습니다.
참고: 발생 가능한 오류 세부 정보:
9259 : MCC는 유효하나 Galaxy Store는 지원되지 않습니다.
IAP_ERROR_INVALID_ACCESS_TOKEN (-1015)
삼성계정의 액세스 토큰이 유효하지 않습니다.
메모오류 코드에서 초기 슬래시 앞에 표시된 첫 번째 숫자 세트는 위의 응답 코드 설명에 있는 숫자 중 하나와 일치합니다.
예를 들어, 첫 번째 팝업 창에서 9224는 응답 코드 IAP_ERROR_ALREADY_PURCHASED 설명에 나타납니다. 두 번째 팝업 창에서 9014는 응답 코드 IAP_ERROR_COMMON설명에 나타납니다.
Manage Your Cookies
We use cookies to improve your experience on our website and to show you relevant
advertising. Manage you settings for our cookies below.
Essential Cookies
These cookies are essential as they enable you to move around the website. This
category cannot be disabled.
Company
Domain
Samsung Electronics
.samsungdeveloperconference.com
Analytical/Performance Cookies
These cookies collect information about how you use our website. for example which
pages you visit most often. All information these cookies collect is used to improve
how the website works.
Company
Domain
LinkedIn
.linkedin.com
Meta (formerly Facebook)
.samsungdeveloperconference.com
Google Inc.
.samsungdeveloperconference.com
Functionality Cookies
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and
tailor the website to provide enhanced features and content for you.
Company
Domain
LinkedIn
.ads.linkedin.com, .linkedin.com
Advertising Cookies
These cookies gather information about your browser habits. They remember that
you've visited our website and share this information with other organizations such
as advertisers.
Company
Domain
LinkedIn
.linkedin.com
Meta (formerly Facebook)
.samsungdeveloperconference.com
Google Inc.
.samsungdeveloperconference.com
Preferences Submitted
You have successfully updated your cookie preferences.