Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
관리 메뉴

Leo

In App Purchase (3) 본문

개발 정리/Flutter

In App Purchase (3)

dohyxx 2024. 11. 14. 00:24

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