Leo
In App Purchase (3) 본문
2. Requesting purchase

- 사용자 가 구입할 상품을 선택했을 때(구매 버튼 클릭), 결제 요청 보내기
a. Store에 결제 요청
유저가 결제하기 버튼을 누르면, 클라이언트는 `buyConsumable()` 함수를 통해 Store에 결제 요청을 보냅니다.
유저를 조금 더 명확하게 식별하기 위해 `applicationUserName` 데이터를 지정해줍니다.
지정하지 않으면 나중에 서버에서 거래 내역을 찾거나 유저를 식별할 때, 조금 번거로울 수 있습니다.
`parameter` 타입은 `PurchaseParam` 입니다.

b. 결제 상태에 대한 알림 수신
App Store에서 transaction 업데이트를 수신하고, 이를 핸들링하기 위해 trandsaction listener를 등록합니다.

해당 listener를 통해 결제 상태를 수신합니다.
[결제 Status]
- PurchaseStatus.purchased 결제 완료
- PurchaseStatus.canceled 결제 취소
- PurchaseStatus.error 결제 오류
- PurchaseStatus.restored 결제 복원

정상적으로 구매가 완료되었다면, 결제 상태는 `PurchaseStatus.purchased`로 수신됩니다.
결제 완료 후, 클라이언트는 서버로 영수증 검증 요청을 보내야 합니다.
[Backend]
백엔드는 결제 정보에 대한 알림을 `server notification API` 를 통해 수신 받습니다.
결제가 진행될 때, 서버는 두 가지 일을 병행해야 합니다.
- 클라이언트로부터 영수증 정보를 받는다.
- Store로부터 해당 거래에 대한 정보가 담긴 알림을 수신 받는다. (only Android)
- *iOS는 소모품 상품에 대한 결제에서는 알림이 수신되지 않고, Subscriptions 상품에서만 전달해줍니다.
Server는 영수증 정보에 담긴 `originalTransactionId`(원거래 ID)로 Store에 검증 요청을 보낸 후, 검증 결과를 클라이언트에 전달합니다. 해당 내용은 '영수증 검증' 단계에서 다시 다루겠습니다.
[참고]
https://pub.dev/packages/in_app_purchase
https://developer.apple.com/documentation/appstoreservernotifications/app_store_server_notifications_v2
https://eunjo-princess.tistory.com/19
'개발 정리 > Flutter' 카테고리의 다른 글
[Branch] App Link (2) (2) | 2024.11.21 |
---|---|
[Branch] App Link (1) (0) | 2024.11.16 |
In App Purchase (4) (1) | 2024.11.15 |
In App Purchase (2) (1) | 2024.11.13 |
In App Purchase (1) (11) | 2024.11.13 |