본문 바로가기
개발 블로그/아이폰개발

[iOS 앱 내 구입] iOS 앱 내 결제 시스템 구현편

by snapshot 2019. 12. 13.

 

먼저 아이템 목록을 가져오는 Flow 이다

 

 

 

미리 AppStore Connect에서 만들어 놓은 아이템들이 있을 것이고 그것을 모두 다 사용해도 되지만 우리는 서버에서 시즌별, 또는 이벤트별 여러 아이템을 미리 만들어 놓았다. 그래서 서버 기반으로 아이템을 보여줄 목록을 받는다. 

 

  1. 모바일에서 사용할 아이템 리스트를 결제 페이지에서 받아 온다. 
  2. 아이템 목록(id와 설명) 을 받아오면 id를 배열로 StoreKit 을 통해서 아이템의 가격과 정보들을 다시 받는다.
  3. 우리 서버에서 받은 목록과 StoreKit에서 받은 목록을 모델링해서 유저에게 테이블뷰 리스트로 보여준다.

이렇게 하는 이유가 있다.

처음에 말했지만 아이템 목록을 앱 코드상에서 하드코딩으로 한다면 유연하게 아이템에 대한 이벤트를 하기가 쉽지 않다.

그래서 우리는 회사의 서버로 통해서 유저에게 보여주고 싶은 아이템 목록을 정리해서 받는다.

그래서 앱스토어는 기본적으로 달러이지만 원화로는 애플이 정한 환율로  보여진다.

그렇기 때문에 애플이 매년 아니면 분기마다 환율을 다르게 정할 수 있기 때문에 StoreKit을 통해서 보여주는게 맞는거 같다.

 

여기까지는 가격을 보여주는 리스트인다. 그래서 결과는 이렇다. 

 

 

 

이런식으로 순서도 정할 수 있다.

 

 

그리고 이제는 결제 Flow이다

 

 

  1. 우리의 결제는 회사 아이디로 결제관련 아이템을 관리를 해야 하기 때문에 위의 플로우 대로 하면 될 것이다. 
  2. 먼저 결제할 id를 StoreKit을 통해서 요청을 한다. 
  3. 구매가 되면 StoreKit 델리게이트에서 구매한 영수증이 내려온다. 앱 상에서는 읽을 수 없다. 
  4. base64로 된 영수증을 우리 회사 서버로 보낸다. 
  5. 영수증 검사는 앱에서 할 수 있다지만 탈옥을 했을지..혹시 모를 버그가 나오기 때문에 무조건 서버에서 하는게 낫다.
  6. 서버에서는 영수증을 보고 맞으면 유저에게 맞는 권한을 준다. 
  7. 서버에서 response를 받으면 승인 또는 거절을 받았을때 무조건 리프레쉬 해주는게 낫다. 
  8. 그리고 결제는 한 페이지가 아닌 여러 군데에서 권한에 맞게 페이지가 바뀌어야 하기 때문에 옵저버 패턴을 이용한 notification을 이용해서 화면 교체가 이루어 져야 하는 부분에 리프레쉬를 해주는걸 추천한다. 

예제코드는 다음에 시간이 나면..

 

그리고 앱스토에 승인 요청을 할 때 주의사항은

https://blog.lovenfree.com/165

 

[iOS 앱 내 구입] iOS 앱 내 결제 시스템을 구현하면서 필수 고려할 사항 정리

https://developer.apple.com/kr/in-app-purchase/ 앱 내 구입 - Apple Developer 개요 앱 내 구입을 통해 구독, 새로운 기능 및 서비스를 비롯하여 다양한 콘텐츠를 판매할 수 있습니다. 앱 내 구입은 네 가지의..

blog.lovenfree.com

요기에 적어 놨다. 끝!

 

 

아..결제 화면 캡쳐할래다가 홈버튼(아이폰7)에 지금 아주 살짝 댔는데..결제가 됐네..하..

댓글