TIL: RN | [iOS] 인앱 결제 react-native-iap 아이템 재구매 - 221129

Lumpen·2022년 12월 29일
0

TIL

목록 보기
217/242

인앱 결제 시 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는 아이템을 삭제해도 다시 사용할 수 없으니 조심..

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글