애뮬레이터에서 인앱결제가 포함된 프로젝트를 실행하려고하면 런타임에러가 발생한다.
E/flutter (20728): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)]
Unhandled Exception: PlatformException(error, Attempt to invoke virtual method
'void android.app.Activity.startActivity(android.content.Intent)'
on a null object reference, null, java.lang.NullPointerException:
Attempt to invoke virtual method 'void android.app.Activity.startActivity(android.content.Intent)' on a null object reference
테스트용 결제 환경
playstore등의 설치 환경이 애뮬레이터에서 제공되어 있지 않습니다.
결제 서비스 제한
일부 인앱 결제 서비스 제공업체는 애뮬레이터에서의 인앱 결제를 제한합니다.
보안 및 불법 결제 방지를 위한 조치입니다.
결제 테스트 제한
외부 앱(카드사 / 간편결제 앱)으로 이동해 결제 테스트하는 것이 제한됩니다.
이동이 가능하더라도 애뮬레이터에서는 공동 인증서(구 공인인증서) 설정이 안되니,
(일반결제가 아니고서야) 인증 자체가 안됩니다.
코드에 인앱결제가 포함되어 있다면 실기기에서 실행이 잘 되겠지만, 애뮬레이터에서 실행하고 싶다면, 애뮬레이터 빌드 시, 인앱결제 코드가 실행되지 않도록 방지할 수 있습니다.
코드 작성
import 'package:device_info/device_info.dart';
import 'package:flutter/services.dart';
Future<void> makeInAppPurchase() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
if (!await deviceInfo.isPhysicalDevice) {
// 애뮬레이터 또는 시뮬레이터에서 실행 중인 경우 예외 처리
throw PlatformException(
code: 'NOT_SUPPORTED',
message: '인앱 결제는 실제 디바이스에서만 지원됩니다.',
);
}
// 인앱 결제 코드 실행
}