[react-native][IOS]react-native-iap 간단하게 인앱결제 복원하기 구현

binary_rho·2023년 10월 19일
0

fitnee

목록 보기
1/5

안드로이드의 경우에는 앱을 삭제했다가 다시 설치해도 구매했던 구독을 자동으로 불러와 적용해주지만, IOS는 자동으로 복원되지 않기 때문에 복원하기 버튼을 만들고 이를 구현해줘야한다.
이 복원하기 기능이 없을 경우에는 앱 심사에서 반려당하므로 구현해줘야하는데, 현재 개발 중인 앱의 경우에는 프리미엄 구독 기능이 있기 때문에 꼭 이를 구현해줘야했다.
우리는 React-native로 개발했고, react-native-iap라는 인앱결제용 라이브러리를 이용했다.

영수증 정보나, 세부 사항을 함께 적용하면 좋지만 나는 일단 간단하게 restore함수를 구현했다.

const restorePurchase = async () => {
   setRestoreLoading(true)
   try {
     const purchases = await getAvailablePurchases()
     setRestoreLoading(false)
     console.log(purchases)
   } catch (err) {
     console.warn(err)
   }
 }

진짜 엄청 간단하게 구현해봤는데, 여기서 getAvailablePurchases() 함수가 이용자의 그 전 purchased product의 모든 리스트, 즉 구매했던 목록들을 불러와준다고 한다. restore 함수의 목적은 단순히 구매했었는지의 여부를 확인해주는 것이기 때문에 간단하게 구현했다. 이는 subscription을 구매했을 경우에만 필요하다. 단순히 선결재의 경우에는 필요없는 것 같다.

백엔드에 구매 여부를 전달하기 위해서는 이 함수의 여러 속성들을 활용해 구현하면 될 것 같다.
https://react-native-iap.dooboolab.com/docs/old-to-remove-available-purchase
여기있는 공식 문서를 활용하면 구현하는데 더 도움이 될 것 같다!~!!!

https://deku.posstree.com/ko/react-native/react-native-iap/#%EB%B3%B5%EC%9B%90
이 분의 블로그와 공식문서를 참고해서 적은 코드와 주석

  const restorePurchase = async () => {
    setRestoreLoading(true)
    try {
      const purchases = await getAvailablePurchases()
      //transactionReceipt -> iOS: The receipt. Android: Stringified JSON of the original purchase object.
      let receipt = purchases[0].transactionReceipt
      //purchaseToken -> A token that uniquely identifies a purchase for a given item and user pair.
      if (Platform.OS === 'android' && purchases[0].purchaseToken) {
        receipt = purchases[0].purchaseToken
        //purchaseToken은 android에만 있음.
      }
      AsyncStorage.setItem('receipt', receipt)
      //server에 receipt를 전달해서 저장하면 될듯...?! 일단 AsyncStorage에 저장...!!
      setRestoreLoading(false)
      console.log(purchases)
    } catch (err) {
      console.debug('restorePurchases')
      console.warn(err)
    }
  }
profile
tistory로 옮겨갔어요 .. ! https://2wlslog.tistory.com/

0개의 댓글