본격적으로 인앱구매 기능을 개발하기 전에 이것은 미리 적어두는 준비 과정과 유의 사항
1. in_app_purchase 패키지를 사용한다.
스토어 설정을 제대로 했는지 확인하기 위해 앱 초기화할 때 인 앱 프로덕트 정보를 불러오는 것부터 해본다.
final InAppPurchase iap = InAppPurchase.instance;
List<ProductDetails> products = [];
List<PurchaseDetails> purchases = [];
late StreamSubscription<List<PurchaseDetails>> purchaseSubscription;
// 스토어에 만들어놓은 상품들의 ID
const ids = <String>{
'emp_premium_test',
'emp_premium_multiple',
'health_premium_consumable_test'
};
Future<String> initialize() async {
// .....
final available = await iap.isAvailable();
// 안드로이드에서는 isAvailable()을 먼저 호출해줘야 queryProductDetails()가 동작한다.
if (!available) {
// to do: available이 false일 때 처리
}
ProductDetailsResponse response = await iap.queryProductDetails(ids);
if (!response.notFoundIDs.isEmpty) {
// to do: 리턴된 response 내에 notFoundIDs 가 존재하는지 확인
}
// .....
}
대략 이 정도 해보면 되는데, queryProductDetails() 호출했을 때 response.productDetails 가 제대로 들어가있지 않은 경우에는 다음의 것을 확인해본다.
1) isAvailable() 이 true 를 반환하는가? 그렇다면 아마 product ID를 잘못 적었거나 스토어에서 제대로 만들지 못했을 가능성이 크다
2) isAvailable() 이 false인가? 에뮬레이터에서 테스트하고 있는가? 그렇다면 에뮬레이터에 Google Play Store Service가 설치되어 있는지 확인한다. Android Studio의 AVD Manager에서 아래 그림의 Pixel 4 처럼 "Play Store" 가 존재해야 한다.
없으면 다시 만들자.
3) Play Store 가 설치된 에뮬레이터로 해도 isAvailable() 이 false 인가? 그렇다면 플레이스토어에 License testing 자격이 있는 아이디로 로그인했는지 확인한다. Play Store Console 에서 "All apps" 의 "Setup" 에 있는 License testing 에 해당 아이디를 추가해주어야 한다. (https://codelabs.developers.google.com/codelabs/flutter-in-app-purchases#4)
이렇게 하면 일단 구글 플레이스토어에 인앱상품을 제대로 만들었는지는 확인할 수 있다.