핀수로그
  • [Android] Google Play Developer API으로 앱 출시하기
    2022년 05월 10일 23시 54분 05초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

     

      들어가며

      앱을 마켓에 배포하고 나서 앱이 업데이트가 되면 사용자들에게 업데이트를 안내해야한다.

      다 그런건지는 모르겠지만 앱을 다운받으면 자동 업데이트에 체크가 되어있긴 하던데..

      자동 업데이트를 선호하지 않아 해제해놓는 사용자가 있을 수 있기 때문에 인 앱 업데이트를 구현하고자 했다.

      공식문서를 참고하다 우선순위를 지정할 수 있다는 것을 보게 되었다.

       

      Google Play Developer API

      말 그대로 구글에서 제공하는 API로

      게시 및 앱 관리 작업을 실행할 수 있다고 한다.

       

      👉🏻 Subscriptions and In-App Purchases API

      : 인 앱 구매와 정기 결제 관리

       

      👉🏻 Publishing API

      : 앱 업로드 및 게시, 기타 게시 관련 작업 실행

       

       

      Publishing API

      앱 프로덕션 및 배포와 관련해 자주 실행하는 작업을 자동화할 수 있음

       

      플레이 콘솔과 API 연동하기

      공식문서를 참고한다.

      API를 사용하기 위해서는 플레이 콘솔과 연동해야한다.

      구글 플레이 콘솔 > 설정 > API 액세스를 클릭한다.

       

      구글 클라우드 플랫폼과 연결된 프로젝트가 없다면 새로 생성하거나

      기존 프로젝트가 있는 경우 연결해주면 된다.

      나의 경우 아무것도 없었기 때문에 새 프로젝트를 만들었다.

       

      그리고 서비스 계정을 생성한다.

       

       

      서비스 계정 생성하기

      3번은 비우고 넘어간다.

       

      서비스 계정이 생성된다.

      그리고 옆에 햄버거 버튼을 눌러 '키 관리'를 선택한다.

      키 추가를 눌러 키를 새로 만들어준다.

      p12로 만들었다. (JSON를 권장하길래 만들었는데 p12 쓰고 있음)

       

      OAuth2.0을 이용해서 인증하는 방법도 있긴한데

      난..잘..어떻게 하는지 모르겠어서 서비스 계정 키로 인증을 하고 있다.

       

      생성후 콘솔로 돌아와 서비스 계정 새로고침을 하면 연결된 서비스 계정이 뜬다.

       

       

      우선순위 지정하기

      API 의 Edit.tracks:update 메서드에 전달된 Edit.tracks 리소스에서 지정해야한다.

      난 처음 이 문서를 보고 도대체..어떻게...하라는 말이지..?

      라는 생각밖에 들지 않았다.

      차근차근 짚어보자!

       

      공식 문서를 보면 update (PUT) 와 patch (PATCH) 두가지가 존재하는데

      둘의 차이는

      💡 PUT : 자원 전체를 교체, 모든 필드가 필요하다
      💡 PATCH : 자원의 일부분을 교체, 일부 필드만 있어도 된다

       

      API 주소

      💡  PUT https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}

      {packageName} : 앱의 패키지 명

      {editId} : 해당 편집의 식별자 (아직 잘 모르겠음)

      {track} : 해당 트랙의 식별자 (프로덕션인지 테스트인지)

       

       

      다음은 요청 바디에 들어갈 내용이다.

      예시

      {
        "name": string,
        "versionCodes": [
          string
        ],
        "releaseNotes": [
          {
            object (LocalizedText)
          }
        ],
        "status": enum (Status),
        "userFraction": number,
        "countryTargeting": {
          object (CountryTargeting)
        },
        "inAppUpdatePriority": integer
      }

      "inAppUpdatePriority": integer

      여기에 앱 업데이트의 우선순위가 지정되는 것!

       

       

      구현하기

      참고로 해당 API를 사용하기 위해서는 앱을 이미 출시한 상태여야한다.

      (정확하진 않음)

       

       

      이를 코드로 구현하기 위해서는 다음과 같은 과정이 필요하다.

      1) 먼저 google play developer API 인증과정을 거친다.

      2) 앱 업로드를 위한 초기 설정을 셋팅한다.

      3) 등록 정보를 포함해 업로드를 진행한다.

       

      두 링크를 참고했다.

      https://github.com/googlesamples/android-play-publisher-api/tree/master/v3/java

       

      GitHub - googlesamples/android-play-publisher-api

      Contribute to googlesamples/android-play-publisher-api development by creating an account on GitHub.

      github.com

      https://kplog.tistory.com/287

       

      안드로이드 마켓 배포를 편하게 해보자 "google publisher api v3"

      안드로이드 앱 개발의 최종단계라고 할 수 있는 구글 플레이 배포. 앱이 1, 2개인 경우는 상관이 크게 없을지 모르나, 관리하고 있는 앱이 10개 이상을 넘어가기 시작하면 사용자 배포 이슈가 있

      kplog.tistory.com

       

      dependency

      implementation 'com.google.auth:google-auth-library-oauth2-http:1.3.0'
      implementation 'com.google.apis:google-api-services-androidpublisher:v3-rev20201007-1.30.10'
      implementation group: 'com.google.oauth-client', name: 'google-oauth-client-java6', version: '1.11.0-beta'
      implementation group: 'com.google.oauth-client', name: 'google-oauth-client-jetty', version: '1.11.0-beta'

       

       

      google play developer API 인증과정을 거친다

      이를 수행하기 위한 클래스를 만든다.

      AndroidPublisherHelper

      참고로 위 예제는 apk 로 업로드를 진행하지만 지금 apk로 업로드 하면 실패한다.

      당연함 구글은 이제 마켓 출시 하려면 aab 만 받음

       

       

      따라서 MIME TYPE 을 "application/octet-stream" 으로 변경해주어야한다.

      그리고 서비스 계정을 인증하기 위한 클래스 GoogleCredential 는 deprecated 되었으므로..

      구글이 권장하는 라이브러리로 변경해야함

       

      또한 서비스 계정의 키는 반드시 gitignore 에 포함시켜 노출되는 일이 없도록 해야한다.

      물론 로컬에서도 관리를 잘해야할 것임!

       

      원하는 트랙에 앱 출시하기

      해당 역할을 수행하는 BasicUploadAPK 를 생성한다.

       

      위에서 언급한 요청바디에 해당되는 항목이 new TrackRelease() 부분이다.

      List<Long> aabVersionCodes = new ArrayList<>();
              aabVersionCodes.add(Long.valueOf(bundle.getVersionCode()));
              AndroidPublisher.Edits.Tracks.Update updateTrackRequest = edits
                      .tracks()
                      .update(PACKAGE_NAME,
                              editId,
                              this.track.toString(),
                              new Track().setReleases(
                                      Collections.singletonList(
                                              new TrackRelease()
                                                      .setName("앱버전이름")
                                                      .setVersionCodes(aabVersionCodes)
                                                      .setStatus("completed")
                                                      .setInAppUpdatePriority(inAppUpdatePriority)
                                                      .setReleaseNotes(
                                                              Collections.singletonList(
                                                                      new LocalizedText()
                                                                              .setLanguage(String.valueOf(updateCommentLanguage))
                                                                              .setText(this.updateComment))))));

      .setStatus("completed")

       

       

      그리고 필요한 부분에서 실행하면 된다.

      나는..아직 어디서 해야할지 감이 안와서 테스트 코드에서 테스트하던 그대로이다 ㅜ_ㅜ

      공식문서에 따르면 자동화할 수 있다고 하는데 좀 더 알아봐야할 부분인 듯 하다.

      public void apkUploadTest() throws Exception {
              BasicUploadAPK basicUploadAPK = new BasicUploadAPK(
                      BasicUploadAPK.TRACK.alpha,
                      BasicUploadAPK.LANGUAGE.KO_KR,
                      "업데이트한 내용을 여기에 작성하면 된다.",
                      BasicUploadAPK.UPDATE_RECOMMENDATION
                      );
              basicUploadAPK.processUpdate();
          }

       

       

      다양한 배포 및 출시 도구가 있는 것을 알지만 (대표적으로 fastlane)

      업데이트 우선순위를 지정할 수 있다는 점과

      코드단에서 배포를 할 수 있다는 점이 괜찮게 느껴져서

      사용해보면 좋겠다는 생각이 들어 도입하게 되었다.

       

      좀 더 알아보고 좀 더 효율적으로 일할 수 있었으면 좋겠다!

       

       

      잘못된 정보가 있는 경우 알려주시면 수정하도록 하겠습니다.

       

      728x90
      반응형
      댓글