인앱 결제 시 finishTransaction() 을 해주지 않아
계속 이전 구매를 완료하지 못하고 있었다
모바일 기기에서 사용자가 결제 과정을 모두 마치고 구매 승인 까지 완료하면
해당 결제의 완료 여부, 거래에 대한 정보를 currentPurchase 로 보낸다
이 응답 정보를 담은 currentPurchase 을 finishTransaction() 에 담아
요청을 보내 구매 트랜잭션의 종료를 Apple Store 에 알려야 한다
이 때 finishTransaction() 으로 트랜잭션 완료를 보내지 않으면
완료될 때 까지 앱이 실행될 때마다 거래 정보를 응답으로 보낸다..
그럼 해당 구매 트랜잭션이 완료되지 않은 것이기 때문에 아이템 구매는 하였으나
결제는 이루어지지 않는다
-> 매번 접속 시 if (currentPurchase) 이면 finishTransaction 으로 검증, 트랜잭션 종료를 해주면 좋을 것 같다
조금 로직이 다르지만 if (currentPurchase) 만 추가하면 될듯..
React.useEffect(() => {
// ... listen to currentPurchase, to check if the purchase went through
if (currentPurchase) {
validateReceiptIos({
receiptBody: { 'receipt-data': currentPurchase.transactionReceipt },
isTest: true,
}).then(res => {
console.log(res.transactionReceipt);
});
finishTransaction({
purchase: currentPurchase,
isConsumable: true,
}).then();
}
}, [currentPurchase]);
const handlePurchase = (itemId: string) => {
requestPurchase({
sku: itemId,
}).then();
};
한번 등록한 아이템 ID는 아이템을 삭제해도 다시 사용할 수 없으니 조심..