TIL: RN | 인앱 결제 react-native-iap (4) 영수증 - 221130

Lumpen·2022년 11월 30일
0

RN인앱결제

목록 보기
4/16

영수증 with IAPHUB

IAPHUB은 IOS/Android 영수증 유효성 검사를 처리하는 서비스입니다. 구매, 구독 갱신 등의 이벤트에서 서버에 자동으로 알림이 전달되도록 웹 훅을 설정할 수 있습니다.

API를 수동으로 호출하여 영수증을 처리하거나 IAPHUB가 내장된 React-native-iap의 래퍼에 불과한 React-native-iaphub 모듈을 사용할 수 있습니다.

with Google Play

안드로이드의 경우 구글-apis에서 access_token을 얻으려면 서비스 계정에서 별도의 json 파일이 필요하므로 서버리스 구현이 불가능하다.
당신은 당신만의 백엔드를 가지고 access_token을 얻어야 한다. access_token을 사용하면 단순히 validateReceiptAndroid()를 호출할 수 있습니다.
참고
https://stackoverflow.com/questions/35127086/android-inapp-purchase-receipt-validation-google-play
https://github.com/Bang9/android-get-access-token-example

with App Store

Local Validation

로컬 장치 암호화 유효성 검사는 현재 지원되지 않습니다. 자세한 내용은 https://developer.apple.com/documentation/appstorereceipts/validating_receipts_on_the_device을 참조하십시오.

Validating with the App Store

경고: 이 방법은 프로덕션 용도로는 권장되지 않으며 Apple은 다음 문서에서 이 방법에 대해 명시적으로 경고합니다. https://developer.apple.com/documentation/storekit/original_api_for_in-app_purchase/validating_receipts_with_the_app_store

이는 개발 라이프사이클을 통해 영수증 유효성 검사를 개발하고 테스트하는 편리한 방법으로 사용할 수 있습니다.

현재 앱스토어에서 영수증 유효성 검사는 validateReceiptIos()를 사용하여 로컬에서 가능합니다.

  • 첫 번째 매개 변수인 product()를 구입한 후 반환되는 transactionReceipt를 전달해야 합니다.
  • 두 번째 매개 변수는 테스트 환경인지 여부를 전달해야 합니다. true이면 샌드박스에 요청하고 false하면 생산에 요청한다.
const receiptBody = {
  'receipt-data': purchase.transactionReceipt,
  password: '******', // app shared secret, can be found in App Store Connect
};
const result = await RNIap.validateReceiptIos(receiptBody, false);
console.log(result);

자세한 내용은 가이드를 참조하십시오.
https://developer.apple.com/documentation/storekit/in-app_purchase/original_api_for_in-app_purchase/validating_receipts_with_the_app_store

구매 후가 아닌 다른 시간에 영수증을 받아야 할 때도 있을 것이다. 예를 들어, 사용자가 제품 구입 허가를 요청해야 하는 경우(흐름 구입 요청) 또는 불안정한 인터넷 연결이 있습니다.

이러한 경우에는 getReceipt라는 편리한 방법이 있습니다.IOS() - 언제든지 앱에 대한 최신 영수증을 받습니다. 응답은 base64로 인코딩됩니다.

iOS Purchasing process right way.

Issue regarding valid products

iOS에서는 일반적으로 앱 출시 프로세스에서 유효한 제품을 가져옵니다.
다시 가져오거나 유효한 구독을 가져오면 제품이 iOS 측(Objective-CNSMutableArray)의 어레이 개체에 추가됩니다.
이로 인해 제품 목록의 일부를 가져올 때 예기치 않은 동작이 발생합니다.
예를 들어, [A, B, C]의 제품이 있고 [A]만으로 fetch 함수를 호출하면 이 모듈은 [A, B, C]를 반환합니다.
This is weird, but it works.

그런데 이상한 결과가 나와서 우리는 유효한 제품을 모두 제거하는 새로운 방법을 만들었습니다.
해당 어레이의 모든 제품, 구독을 지우려면 제품 지우기를 호출하십시오.IOS(), 그리고 가져오기 작업을 다시 수행하면 기대했던 것을 받게 됩니다.

Example backend (Node.js)
Here you can find an example backend for idempotent validating of receipts on both iOS/Android and storing and serving subscription state to the client.

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

0개의 댓글