Appearance
상품목록 가져오기
getProductItemList
getProductItemList
는 인앱 결제로 구매할 수 있는 상품 목록을 담은 함수예요. 상품 목록을 화면에 표시할 때 사용해요.
시그니처
typescript
function getProductItemList(): Promise<{ products: IapProductListItem[] } | undefined>;
반환값
- Promise<{ products: IapProductListItem[] } | undefined>
상품 목록을 포함한 객체를 반환해요. 앱 버전이 최소 지원 버전(5.219.0)보다 낮으면
undefined
를 반환해요.
프로퍼티
typescript
interface IapProductListItem {
sku: string;
displayAmount: string;
displayName: string;
iconUrl: string;
description: string;
}
- IapProductListItem
인앱결제로 구매할 수 있는 상품 하나의 정보를 담은 객체예요. 상품 목록을 화면에 표시할 때 사용해요.
- sku필수 · string
상품의 고유 ID예요.
IAP.createOneTimePurchaseOrder
를 호출할때 사용하는productId
와 동일한 값이에요.
displayAmount필수 · string화면에 표시할 상품 이름이에요. 상품 이름은 앱인토스 콘솔에서 설정한 값이에요.
displayName필수 · string통화 단위가 포함된 가격 정보예요. 예를 들어
"1,000원"
으로 가격과 통화가 함께 표시돼요.
iconUrl필수 · string상품 아이콘 이미지의 URL이에요. 아이콘은 앱인토스 콘솔에서 설정한 이미지예요.
description필수 · string상품에 대한 설명이에요. 설명은 앱인토스 콘솔에서 설정한 값이에요.
예제
구매 가능한 인앱결제 상품목록 가져오기
tsx
import { IAP, IapProductListItem } from "@apps-in-toss/web-framework";
import { Button, List, ListRow } from "@toss-design-system/mobile";
import { useEffect, useState } from "react";
function IapProductList() {
const [products, setProducts] = useState<IapProductListItem[]>([]);
async function buyIapProduct (productId: string) {
try {
await IAP.createOneTimePurchaseOrder({
productId,
});
console.error("인앱결제에 성공했어요");
} catch (error) {
console.error("인앱결제에 실패했어요:", error);
}
};
useEffect(() => {
async function fetchProducts() {
try {
const response = await IAP.getProductItemList();
setProducts(response?.products ?? []);
} catch (error) {
console.error("상품 목록을 가져오는 데 실패했어요:", error);
}
}
fetchProducts();
}, []);
return (
<List>
{products.map((product) => (
<ListRow
key={product.sku}
left={<ListRow.Image type="square" src={product.iconUrl} />}
contents={
<ListRow.Texts
type="3RowTypeA"
top={product.displayName}
middle={product.description}
bottom={product.displayAmount}
/>
}
right={
<Button size="medium" onClick={() => buyIapProduct(product.sku)}>
구매하기
</Button>
}
/>
))}
</List>
);
}
tsx
import { IAP, IapProductListItem } from "@apps-in-toss/framework";
import { Button, List, ListRow } from "@toss-design-system/react-native";
import { useEffect, useState } from "react";
function IapProductList() {
const [products, setProducts] = useState<IapProductListItem[]>([]);
async function buyIapProduct (productId: string) {
try {
await IAP.createOneTimePurchaseOrder({
productId,
});
console.error("인앱결제에 성공했어요");
} catch (error) {
console.error("인앱결제에 실패했어요:", error);
}
};
useEffect(() => {
async function fetchProducts() {
try {
const response = await IAP.getProductItemList();
setProducts(response?.products ?? []);
} catch (error) {
console.error("상품 목록을 가져오는 데 실패했어요:", error);
}
}
fetchProducts();
}, []);
return (
<List>
{products.map((product) => (
<ListRow
key={product.sku}
left={
<ListRow.Image type="square" source={{ uri: product.iconUrl }} />
}
right={
<Button size="medium" onPress={() => buyIapProduct(product.sku)}>
구매하기
</Button>
}
contents={
<ListRow.Texts
type="3RowTypeA"
top={product.displayName}
middle={product.description}
bottom={product.displayAmount}
/>
}
/>
))}
</List>
);
}