mock 결제 구조 파악
→ in_app_purchase 패키지 추가
→ purchaseStream 구독
→ 스토어 상품 조회 & 구매 요청
→ 서버 검증 연결
→ 구매 이력 동기화
DashPurchases가 mock 데이터로 동작in_app_purchase 패키지 추가 후 실제 스토어와 연결dispose에서 닫는 패턴 사용onDone, onError 처리도 함께 넣기_subscription = InAppPurchase.instance.purchaseStream.listen(
_handlePurchase,
onDone: () => _subscription.cancel(),
onError: (e) => print(e),
);
queryProductDetails()로 Play Console 상품 가져옴buyConsumable, 비소비형·구독 → buyNonConsumablependingCompletePurchase == true면 반드시 completePurchase() 호출source, productId, verificationData, userId를 서버로 전송IAPRepo로 서버 구매 상태를 다시 읽어와서 UI 복원결제는 클라이언트 코드보다 서버 검증 + 스토어 콘솔 세팅이 훨씬 많은 비중을 차지함.
stream 구독 패턴을 확실히 잡아두면 흐름 자체는 어렵지 않음.