RN에서 인앱결제 구현하기 1 - 인앱결제 준비

인앱결제


인앱결제 구현할 일이 있어 관련 자료를 알아보던 중 react-native-iaphub를 사용하여 개발을 하기로 하였습니다. 물론 무료가 아니고 월 구독 요금제라 그렇게 싼 편은 아니지만 서버 검증까지 가능하여 빠르게 개발할 수 있을 거 같아 사용하여 개발을 진행하였습니다. 개발 부분은 걱정했던 만큼 어렵지 않았고 큰 어려움은 없었습니다. 라이브러리를 잘 만들어 두었고 문서 설명대로 설치하고 호출하니 바로 결제창이 나왔습니다. 하지만 이 인앱결제를 사용하기 위해 알아야 할 사항들이 너무 많아 그것들을 알아보고 적용하는데 시간이 많이 소요됐습니다.


인앱상품


먼저 인앱결제에는 크게 3가지 종류의 상품이 있으며 소모성, 비소모성, 구독권이 있습니다. 말 그대로 소모성은 사라지는 상품, 비소모성은 사라지지 않는 상품, 구독권은 우리가 잘 알고 있는 월 구독 상품입니다. 아직 구독권은 판매할 계획이 없어 소모성 상품과, 비소모성 상품을 판매하기로 하였습니다.


구매복원


인앱결제에 한에서 있는 기능입니다 (ios 같은 경우 필수적으로 구현을 해야 심사가 통과됩니다)

보통 인앱 결제를 할 때는 안드로이드는 구글 계정, 애플은 앱스토어 계정을 통해 결제를 하게 되는데 해당 계정으로 구매할 경우 앱 내의 어떤 계정을 로그인해도 “비소모품”에 한해서 구매한 상품이 복구되는 기능입니다.

즉, 예를 들어 애플 계정 “test@gmail.co.kr” 로 로그인 되어 있는 상태에서 해당 앱의 카카오를 통해 로그인한 후 비소품을 구매하면  페이스북, 네이버 등 다른 계정으로 로그인하여 구매 복원을 누를 경우 카카오를 통해 로그인해서 구매한 비소모품 모두가 복원이 됩니다. 안드로이드 또한 동일합니다.


환불정책


인앱 결제 환불은 판매자의 동의 없이 환불이 가능합니다.

구글은 구매 후 48시간 이내에 환불이 가능하고 시간이 지나도 환불 신청은 가능합니다.

애플은 구매 후 14일 이내에  환불이 가능합니다. 14일 이후에는 애플의 자체 판단에 의해 일방적 환불이 진행됩니다. 환불 진행 방법은 애플에서 결제한 것은 오직 앱스토어 즉 애플 고객센터를 통해서만 환불 진행이 가능합니다. 안드로이드에서는 플레이스토어 고객센터를 통한 방법과 판매자가 직접 환불 진행이 가능합니다.


상품등록


이제 판매할 상품을 등록해보겠습니다.


1. ios 상품 등록

앱스토어 커넥트에 들어가 상품을 추가할 앱을 클릭한 후 왼쪽 사이드바에 **"앱 내 구입"**을 클릭합니다.

그럼 위 사진과 같은 화면이 나오며 **"생성"**을 클릭합니다

이제 상품을 만들 수 있는 창이 나타납니다 유형에는 "소모품" 인지 "비소모품"인지 선택합니다(구독권 같은 경우는 따로 항목이 있습니다) 식별 정보에는 판매할 "상품이름"을 입력하고 제품ID에는 해당 상품의 고유 식별 번호를 만들어 추가해 주시면 됩니다 예를 들어 책의 바코드 같은 개념입니다.

구글에서 상품을 등록할 때도 제품 ID 값을 추가하는데 react-native-iaphub를 사용하기 위해 동일한 제품ID 를 사용하는게 좋습니다.


이제 해당 상품의 가격 및 추가 정보를 하나씩 추가해 보겠습니다. 먼저 해당 상품을 판매할 국가를 설정하는 사용 가능 여부를 설정하겠습니다.

위 사진과 같이 판매할 국가를 설정합니다.

두 번째 항목인 가격 변경 일정을 통해 가격을 설정합니다 100원 단위로 가격을 조정할 수 있고 원하는 날짜 기간에 가격을 낮춰 판매할 수 있는 정책도 있습니다. 고유 ID 값은 변경할 수 없고 상품이름을 변경할 경우 새로운 심사를 받아야 하지만 가격은 추가 심사 없이 변경할 수 있습니다.

앱스토어의 국가에 따라 판매할 상품들 이름과 정보를 다르게 설정할 수 있습니다. 예를 들어 앱스토어 국가가 한국에서는 "상품1"라는 이름으로 상품을 판매하고 앱스토어 국가가 미국일 경우에는 같은 상품이지만 상품이름과 설명을 다르게 하여 판매 할 수 있습니다.

마지막으로 심사정보에서 해당 상품의 스크린샷과 소개 정보를 추가로 작성해 준 후 저장을 눌러주시면 됩니다. 이렇게 상품을 등록한 후 상품 리스트에 보면 "제출 준비 완료" 나오면 상품이 정상적으로 등록이 되었습니다. 최초의 상품을 추가할 경우 앱 심사와 함께 상품 심사를 같이 받아야 합니다.

최초 한 번의 상품 심사가 끝나면 앱 심사와 상품 심사는 따로 진행할 수 있습니다. 앱에 새로운 상품을 추가하지 않아도 상품 심사를 받을 수 있습니다.

참고로 "메타 데이터 누락" 이라는 표시가 생기면 이건 심사 정보에 스크린샷이 없어서 나오는 경고입니다.

2. 구글 상품 등록

구글 플레이 콘솔에 들어가서 해당 앱을 클릭한 후 왼쪽 사이드바에 있는 인앱 상품을 클릭합니다.

처음 결제 상품을 추가하게 되면 결제 프로필 이라는 것을 만들어야 하는데 "결제 프로필 만들기를" 클릭하여 필요한 정보들을 입력 후 만들면 됩니다.

결제 프로필이 정상적으로 잘 만들어진 후 상품 만들기를 클릭하여 상품 정보를 입력합니다.

애플 인앱 상품 등록과 마찬가지로 제품 ID와 이름(상품이름), 설명(상품설명), 가격 등을 설정하고 저장합니다. 구글 인앱 상품은 결제 프로필이 생성되고 최초의 한 번만 인앱 상품들을 심사하고 그 후에는 따로 심사를 하지 않습니다.

react-native-iaphub 를 사용하기 위해 제품 ID는 애플에서 설정한 제품 ID 값과 같은 것을 하는 게 좋습니다.


테스트 계정 등록


iOS 에서는 Test Flight 와 샌드박스를 통해 테스트 결제를 할 수가 있고 안드로이드는 내부 테스트를 통해 앱을 배포하여 결제를 테스트 할 수 있습니다. 테스트 과정에서는 비용이 청구되지 않습니다.

1. iOS 등록 방법

먼저 샌드박스 계정을 등록하여야 합니다.

app store connect에 로그인한 후 사용자 및 엑세스에 들어갑니다. 그다음 Sandbox 테스터 를 클릭하여 아래와 같이 계정을 생성합니다.

테스트 계정을 생성할 때는 애플 계정과 겹치지 않게 생성을 해야 합니다 즉 애플에 회원가입되지 않는 계정을 등록해야 합니다

2. 구매내역 삭제

테스트 환경에서는 환불을 할 수가 없어 환불 대신 해당 계정의 구매내역을 삭제하여 테스트해야 합니다.

샌드 박스 계정을 등록하는 화면에서 수정을 클릭하여 해당 계정을 선택한 다음 구입 내역 지우기 클릭하면 구매 내역이 삭제됩니다

테스트 플라이 환경에서는 자신의 애플 계정으로 로그인하여 결제가 진행되지만 돈은 빠져나가지 않기 때문에 안심하고 테스트를 진행하시면 됩니다.

3. Android 등록 방법

이번엔 안드로이드에서 테스트 할 수 있는 환경을 설정해 보겠습니다.

Play Console에 들어가서 해당 앱을 클릭 하여 내부 테스트에서 테스터 를 클릭하여 테스트 할 계정을 등록합니다 등록후 아래에 있는 링크 복사를 통해 해당 링크를 전달하여 동의를 받아야 합니다

그 후 플레이 스토어에 내부 테스트라는 문구가 있으면 설치하여 결제 테스트를 진행하면 됩니다.