반응형
IAP 이슈 정리
* 발생 현상
카드 결제 정보가 유효하지 않은 경우 IAP 시도시, 사용자는 카드 결제 정보를 Appstore를 통해 이동하여 입력 후 해당 IAP 프로세스를 진행함.
앱내에서는 PaymentCanceled 값이 Delegate를 통해 전달되어 개발자측에서는 Fail로 판단.
- PaymentCanceled 값은 IAP 프로세스를 사용자의 의도에 의해 취소하였는지에 대한 enum값입니다.
- 개발자측의 자체 트랜젝션 내에서는 IAP에 대한 값을 Delegate에 의존하고 있으므로 CS를 받았을 때, 사용자 취소로 인하여 충전이 안되었다고 판단할 수 밖에 없습니다.
- (카드 결제 정보 입력후 결제가 실제로 되었는지 여부를 판단하기 위해 결제 영수증을 받아보는법, 혹은 결제 승인 문자를 캡쳐하는 수밖에는 방법이 없는걸까요..?)
* Apple측의 입장
iOS 9부터 해당 이슈 시작 (2015년도)
불완전한 IAP 프로세스에 대하여
paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])
로 0 (PaymentCanceled)가 전달됩니다.이 불완전한 프로세스의 특이점은 하나의 IAP 트랜젝션에 대하여 2가지의 값이 전달된다는 것입니다.
- 카드 결제 정보가 유효하지 않은 상태에서 IAP 프로세스 진행시 처음에는 결제가 유효하지 않으므로 PaymentCanceled 값이 전달됩니다. (즉, 실패이죠)
- 카드 결제가 유효하지 않으니 입력을 해야한다는 팝업이 뜨고, 그 뒤에 앱을 벗어나 AppStore로 진입하여 결제 정보를 입력케 합니다.
- 카드 정보를 입력 후 설정이 완료되며 구매가 진행됩니다.
- 앱스토어에서 자동적으로 앱으로 진입하지 않고, 사용자가 지정하여 앱으로 진입하였을때 Observer를 통해 purchased 값이 전달됩니다.
- 또한, 이 시점에서 영수증을 갱신하면 성공적으로 결제된 영수증이 보여집니다.
현재 Fix되지 않은 버그이며 이 상황에 대하여 아래와 같은 임시조치를 취하고 있습니다.
결제 정보를 입력 후 결제를 진행하는 등의 불완전한 트랜젝션에 대해 Non-Consumable 상품과 동일한 복원절차를 진행합니다.
- 원래 Consumable 상품에 대하여 복원절차는 진행하지 않아야 올바른 프로세스 입니다.
인앱 프로세스 중 purchased 값이 전달되는 시점에서 실패 영수증을 갱신하면 성공적으로 결제된 영수증으로 업데이트 되어 보여집니다.
* 다른 개발자들은 어떻게 하고 있나..
- 앱 시작시 진행하는 미충전 인앱 결제 복원 프로세스를 진행함.
- 앱에서 카드 결제 정보를 입력하러 갈 때, 앱은 Background 상태가 됩니다.
- 그리고 카드 결제 정보를 입력 후 앱으로 진입 시 Foreground 상태가 됩니다.
- didFinishLaunchingWithOptions 에서만 진행했던 인앱 복원 절차를 Background -> Foreground 로 변화할때도 진행합니다.
- FinishTransaction을 Delay 합니다.
- Background에서 Foreground로 될 때 까지 트랜젝션을 끝내는 FinishTrasnsaction을 Delay 합니다.
- 첫번째로 넘어오는 PaymentCancel값을 무시하고 두번째로 받는 purchased, failed 값만을 처리합니다.
* 참고 및 Apple Staff의 답변
반응형
'개발' 카테고리의 다른 글
아이폰 xs, xs max, xr (0) | 2018.09.13 |
---|---|
UIViewController 일부 해석 (0) | 2018.09.03 |
iOS 앱 스토어에 배포시 필요한 사항들! (1) | 2018.06.19 |
Developer.apple Team agent 변경 (0) | 2018.05.29 |
safari에서 DeveloperTool에 디바이스가 안뜨는 이슈 (0) | 2017.12.21 |
댓글