[Flutter] 애뮬레이터에서 인앱결제 에러 임시 해결방안

hodu·2023년 7월 8일
0

Flutter

목록 보기
17/30

애뮬레이터에서 인앱결제가 포함된 프로젝트를 실행하려고하면 런타임에러가 발생한다.

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

에러가 발생하는 이유

  1. 테스트용 결제 환경
    playstore등의 설치 환경이 애뮬레이터에서 제공되어 있지 않습니다.

  2. 결제 서비스 제한
    일부 인앱 결제 서비스 제공업체는 애뮬레이터에서의 인앱 결제를 제한합니다.
    보안 및 불법 결제 방지를 위한 조치입니다.

  3. 결제 테스트 제한
    외부 앱(카드사 / 간편결제 앱)으로 이동해 결제 테스트하는 것이 제한됩니다.
    이동이 가능하더라도 애뮬레이터에서는 공동 인증서(구 공인인증서) 설정이 안되니,
    (일반결제가 아니고서야) 인증 자체가 안됩니다.


임시 해결 방안

코드에 인앱결제가 포함되어 있다면 실기기에서 실행이 잘 되겠지만, 애뮬레이터에서 실행하고 싶다면, 애뮬레이터 빌드 시, 인앱결제 코드가 실행되지 않도록 방지할 수 있습니다.

  1. 라이브러리 추가
    https://pub.dev/packages/device_info_plus

  2. 코드 작성

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: '인앱 결제는 실제 디바이스에서만 지원됩니다.',
    );
  }

  // 인앱 결제 코드 실행
}




참고 문서:
https://github.com/iamport/iamport_flutter/issues/24

profile
Flutter developer

0개의 댓글