본문 바로가기

일::개발

Flutter: In App Purchase (0)

본격적으로 인앱구매 기능을 개발하기 전에 이것은 미리 적어두는 준비 과정과 유의 사항

 

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)

 

이렇게 하면 일단 구글 플레이스토어에 인앱상품을 제대로 만들었는지는 확인할 수 있다.