[Flutter] flutter 인앱결제 구현 (1) - 앱빌드

soonmuu·2023년 3월 10일
0

flutter 인앱결제

목록 보기
1/2
post-thumbnail

전체 흐름

앱 - 인앱결제 호출 > 영수증 검증 - 결제데이터 저장

  1. 구글 플레이스토어에 등록할 abb 파일 생성, 앱스토어에 등록할 빌드파일 xcode에서 생성
  2. 결제 항목 생성 (각 스토어에서 등록)
    • 안드로이드와 iOS에서 각각 결제 항목을 생성하고, 항목에 대한 ID와 가격 등의 정보를 설정합니다.
  3. 결제 초기화 (프론트에서 호출)
    • 마켓과 연동하여 결제를 처리할 수 있도록 구글 플레이 스토어 또는 앱스토어에서 제공하는 API를 사용하여 인앱 결제를 구현하기 전에 초기화를 해야 합니다.
  4. 결제 호출 (프론트에서 호출)
    • 애플리케이션에서 인앱 결제를 호출하기 위해 구매할 결제 항목의 ID와 결제 처리를 위한 콜백 함수 등의 정보를 제공합니다
  5. 결제 검증 (백엔드에서 처리)
    • 인앱 결제가 성공적으로 처리되면 이를 검증하여 애플리케이션 내부에서 해당 아이템에 대한 사용 권한을 부여합니다

[안드로이드] abb 파일 생성

flutter app bundle 추출

패키지명 설정시 new와 같은 java 키워드 또는 숫자로 시작하는 이름은 패키지명으로 사용불가능하다. (플레이스토어에 등록이 안된다) 대신 언더바는 가능하다

keystore 설정

아래 공식 문서를 참고했다
https://flutter-ko.dev/docs/deployment/android#keystore-%EB%A7%8C%EB%93%A4%EA%B8%B0

1. 관리자 권한으로 터미널을 열어 아래 명령어를 실행한다

  • 맥/리눅스
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
  • 윈도우
keytool -genkey -v -keystore 경로/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

* 경로 찾는법
flutter doctor -v 명령어를 실행하여 ‘Java binary at: 경로’ 를 찾는다
해당경로에서 java를 포함하고 있는 디렉토리 즉 jre/bin/java 로 끝나면 jre/bin 까지로 경로를 작성해준다

2. 해당 명령어가 성공적으로 실행되면 아래와 항목을 채워준다

키 저장소 비밀번호 입력:  
새 비밀번호 다시 입력: 
이름과 성을 입력하십시오.
  [Unknown]:  name
조직 단위 이름을 입력하십시오.
  [Unknown]:  none
조직 이름을 입력하십시오.
  [Unknown]:  none
구/군/시 이름을 입력하십시오?
  [Unknown]:  Seoul
시/도 이름을 입력하십시오.
  [Unknown]:  Seoul
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:  KR
CN=name, OU=none, O=none, L=Seoul, ST=Seoul, C=KR이(가) 맞습니까?
  [아니오]:  y

3. 안드로이드 설정

3-1. key.properties 파일 생성

android/key.properties 파일을 생성한다

storePassword=2번에서 입력한 비밀번호
keyPassword=2번에서 입력한 비밀번호
keyAlias=key
storeFile=파일위치

파일위치에 공백이 있을경우 C:/Program\ Files/ 와같이 역슬래시 후 공백을 넣어주면 된다

3-2

android/app/build.gradle 파일 수정

  // android 블럭 위에 추가
  def keystoreProperties = new Properties()
  def keystorePropertiesFile = rootProject.file('key.properties')
  if (keystorePropertiesFile.exists()) {
  	keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
  }

android {
	...
    // 해당블럭 삭제
    // buildTypes {
    //    release {
    //        // TODO: release 빌드 버전을 위한 서명 구성을 추가하세요.
    //        // 현재는 `flutter run --release`가 디버그용 키로 서명되어 동작합니다.
    //        signingConfig signingConfigs.debug
    //    }
    // }
   
   // 아래 signingConfigs, buildTypes 블럭으로 수정
   signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile file(keystoreProperties['storeFile'])
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }

4. 앱 빌드

flutter build appbundle 명령어로 앱을 빌드할 수 있다
오류 없이 빌드되었다면 아래 경로에서 abb 파일을 얻을 수 있다
build\app\outputs\bundle\release\app-release.aab

- 빌드된 앱을 플레이스토어에 등록

플레이스토어 콘솔 > 해당앱 > 수익창출 > 제품 > 인앱 상품 > 상품만들기 과정으로 인앱상품 등록

  • 인앱상품 등록시 제품 id는 코드 구현시 필요한 부분이니 유의하여 등록해야한다.
  • 상품 세부정보 이름은 상품 리스트를 직접 불러올 시 노출되는 부분이다.
  • 상품 세부정보 설명또한 불러와서 활용할 수 있다

ios 앱빌드

  1. App Store Connect에서 앱 등록하기
  2. Xcode 프로젝트 설정하기
  3. 앱 아이콘 추가하기
  4. 빌드 아카이브 생성하기
  5. TestFlight에 앱 배포하기

참고한 사이트
https://actumn.tistory.com/101
https://0urtrees.tistory.com/59

- 빌드된 앱을 xcode를 활용해 TestFlight에 빌드

  • flutter build ios
  • xcode Product Achieve > 빌드 성공후 Distribute App > (next ... next) > upload

위 두가지 단계를 성공했다면 apple store connect 해당 앱 TestFlight에 해당 버전이 올라와 있을 것이다.
수출규정문서를 작성해주고 테스트 그룹을 등록해주면 TestFlight에서 앱을 테스트해볼 수 있다.

- App Store Connect에서 앱 내 구입 등록

  1. 유형 - 소모품 (포인트와 같은 형태) / 비소모품 (한번 구입시 계속 사용)
  2. 제품 ID - 안드로이드의 제품 id와 같은 역할이다 추후 코드에 사용된다
  3. 식별정보 - 안드로이드의 상품 상세 이름과 같다 title 형태로 불러와 사용할 수 있다.
  4. 초안으로 가서 추가적으로 입력해준다
    • 사용 가능 여부
    • 가격 변경 일정(가격) - 가격 더보기시 더 세밀한 가격 선택이 가능하다
    • App Store 현지화 결제시 사용할 문구
    • ! 심사 정보 - 어느페이지에서 결제되는지 캡처와 설명을 추가해서 심사해야한다.
      (첫빌드 심사시 함께 제출한다

- 인앱결제 사용시 유료앱 계약 필요

꼭 유료앱 계약 상태가 "활성" 인지 체크 후 인앱결제 테스트 진행

만약 유료앱 계약이 안되어있으면 앱 코드가 정상적이여도 인앱결제 상품이 불러와지지 않는다.

App Store Connect > 계약, 세금 및 금융거래 페이지에 무료앱과 유료앱 두가지 계약이 있다
인앱결제를 사용하려면 유료앱 계약을 활성화 하여야 한다.
처음 입력정보를 입력하고 나중에 세금처리 까지 입력하고 나면 진행상태가 활성으로 바뀐다 만약 사용자 정보 대기중 또는 다른 상태이면 다음 단계로 넘어갈 수 있도록 추가 정보를 넣어줘야한다.

샌드박스 아이디 생성으로 결제 테스트

  • App Store Connect > 사용자 및 엑세스 > Sandbox 테스터 에서 테스터를 등록해준다
  • 이메일등록시 애플아이디로 사용하지 않는 이메일을 등록해준다
  • appstore가 있는 실기기에서 테스트해야하며 설정 > App Store > 최하단 샌드박스 계정에 해당 이메일로 다시 로그인해준다 (비밀번호는 Sandbox 테스터 등록할때 등록한 비밀번호)

앱 심사 제출시 앱 내 구입 추가

  • 앱 내 구입 상품 등록후 메타데이터를 다 등록하고 나면 제출 준비 완료 라고 표시가된다
  • App Store > 제출버전 페이지로 가서 (앱 심사 항목 입력페이지) 하단으로 스크롤 하면 아래 '앱 내 구입 또는 구독' 섹션이 보인다. 이곳에 앞서 등록한 앱 내 구입 항목을 등록하고 심사를 넣어야 한다

참고
https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-for-review

profile
프론트엔드

0개의 댓글