이 글은 룸톤 Roomtone 시리즈의 20번째 기록입니다. (총 22개)

오늘 한 일

  • 화면을 끄고 다른 앱을 쓰면 서너 곡 뒤 재생이 멈추던 문제를 고쳤다(막힌 부분).
    • 전화가 오면 멈췄다가 끊으면 다시 틀고, 알림음이 날 때는 소리만 잠깐 줄이고, 이어폰을 빼면 멈추게 했다.
    • 폰에서 화면을 끈 채 6분 반 동안 13곡이 끊기지 않고 넘어가는 것을 확인했다.
  • 웹에서 듣기를 할 수 있는지 물었다. 만들 수는 있지만 곡을 받아 가기 쉬워지고 브라우저가 자동 재생을 막아서, 출시는 안드로이드만으로 가고 PC만 쓰는 매장이 실제로 나오면 다시 정하기로 백로그에 적었다.
  • 가격을 월 $8로 정했다. 결제 대행사가 달러만 받아서 원화로 적어 둔 1만원을 달러로 옮긴 것이다. 판매 페이지, 스토어 설명, 문서를 모두 고쳤고 세금은 결제할 때 나라별로 붙는다고 적었다.
    • 로그스톤 샵에도 알렸다. 매장이 판매 페이지에서 직접 결제하는 것도 B2B 판매라서 샵의 구독 버튼은 판매 페이지로 보내기로 했다.
  • 판매 페이지가 못생겨서 Design에 새로 맡겼다. 시안 세 개 중 「안내판」을 골랐다.
    • 첫 화면에 태블릿과 폰의 실제 앱 화면을 겹쳐 두고, 요금 안내와 가입 폼을 나란히 놓았다.
    • 안내 문구는 앱 스토어 이미지와 같은 해요체로 맞췄다.
  • Creem에 월 구독 상품을 실제 판매용으로 만들었다.
    • 파일이나 라이선스 키를 넘기는 상품이 아니라서 전달물은 비웠다. 결제 뒤 보이는 안내에는 「구독 관리·해지는 결제 확인 메일의 링크에서」를 한국어·영어로 적었다.
    • 판매 페이지에서 로그인한 뒤 결제해야 룸톤 계정에 구독이 붙는다. Creem 상품 링크로 바로 사면 어느 계정인지 몰라 구독이 켜지지 않는다.
  • 플레이 콘솔을 설정했다.
    • 구독 상품을 만들고 세금 분류는 「정기 결제 디지털 음악」으로 했다.
    • 결제 확인용 서비스 계정을 만들어 초대하고, 구독 상태가 바뀔 때마다 서버로 알림이 오게 했다. 시험 알림이 서버에 도착했다.
    • 라이선스 테스터를 등록했다. 등록된 계정은 실제 돈이 나가지 않고 구독을 시험할 수 있다.
    • 앱 번들을 만들어 내부 테스트에 올렸다.
    • 한국어 등록정보를 영어로도 만들었다. 앱 이름은 「Roomtone - BGM for Businesses」다.
    • 데이터 보안 설문에 로그인 실패 기록을 반영해, 이메일을 모으는 목적에 「보안」을 더했다.
  • 심사용 계정을 따로 만들었다. 처음 적어 둔 계정은 내 개인 계정이라 심사 담당자에게 줄 수 없었다.
  • 테스트 앱에서 구독했더니 「구매를 확인하지 못했다」고 떴다. 원인을 찾아 고친 뒤 구독이 켜져 전곡이 재생됐다(막힌 부분).
    • 테스트 구독이 만료되자 앱이 30초 미리듣기로 돌아갔다. 다만 바뀌는 사이 로딩이 한참 걸려 백로그에 넣었다.
  • 폰으로 써 보면서 떠오른 것을 백로그에 적었다.
    • 재생목록에 이미 있는 곡을 담으면 한 번 물어보기
    • 회원이 업종 같은 자기 계정 정보를 직접 고치기
    • 기준 시간대 「UTC+09:00」 옆에 서울·도쿄 같은 도시 이름 붙이기
    • 나중에 구글 계정으로 로그인 붙이기
  • 앱 설정에서 웹으로 가는 길을 만들기로 했다. 판매 페이지로 보내면 앱 밖 결제로 이끄는 것이라 플레이 정책에 걸려서, 결제 버튼이 아예 없는 /account 화면으로 보내고 로그인이 이어지게 한다.
    • 요금을 탭 뒤로 숨기는 안도 생각했지만, 몇 번 눌러 결제에 닿으면 돌려서 이끄는 것이라 위험은 같다.
    • 한국은 플레이 외부 결제 프로그램이 되니 등록하기로 했다. 승인되면 앱에서 웹 결제로 공식으로 보낼 수 있다.
  • 로그스톤 샵에 개인정보처리방침 보강을 요청했다. 로그인 실패 기록, 스케줄·재생목록 같은 이용 기록, 익명 재생 통계를 추가하고, 외부 결제와 구글 로그인 계획도 미리 알렸다.

막힌 부분

  • 새 판매 페이지를 폰 폭에서 보니 첫 화면의 폰 이미지가 아래 안내 문구를 덮었다.
    • 해결: 좁은 화면에서는 이미지 영역 높이를 정하고 폰 이미지를 작게 줄였다.
  • 플레이에서 「개발자가 첫 구매를 확인하기 전에는 요금제 기간을 연장할 수 없다」고 떴다.
    • 원인: 구매 확인이 실패해 서버가 구매를 승인(acknowledge)하지 못했다. 플레이는 승인되지 않은 구매를 한동안 뒤 자동 환불한다.
    • 해결: 아래 권한 문제를 고치고 구매 확인이 통과하자 사라졌다.

화면을 끄면 서너 곡 뒤 재생이 멈췄다

화면을 끄고 웹 서핑을 하면 세 곡쯤 넘어간 뒤 소리가 멈췄다. 다른 앱이 소리를 가져간 것 아니냐는 가설은 게임 소리를 끄고 다 껐다가 다시 켜도 똑같이 멈춰서 지웠다.

폰을 연결해 확인하니, 안드로이드가 백그라운드 앱을 살려 두는 표시인 포그라운드 서비스가 첫 곡이 끝나는 순간 꺼졌다. 곡과 곡 사이의 아주 짧은 일시정지를 재생 라이브러리가 「멈춤」으로 보고 포그라운드를 내려놓았는데, 다음 곡이 시작돼도 되찾지 못했다. 포그라운드가 없는 앱은 몇 분 안에 안드로이드가 재운다.

await JustAudioBackground.init(
  androidNotificationChannelId: 'net.logstone.roomtone.audio',
  androidNotificationChannelName: 'Roomtone 재생',
  androidStopForegroundOnPause: false,
);
  • 해결: 일시정지해도 포그라운드를 내려놓지 않게 했다. 대신 멈춰 있는 동안에도 알림이 남는다.
  • 같이 한 것: 앱이 음악 재생 앱이라고 운영체제에 알리고, 전화·알림음·이어폰 빼기에 맞춰 반응하게 했다(오늘 한 일).

구독했는데 구매 확인이 502로 실패했다

서버는 플레이 서버에 구매가 진짜인지 묻고 나서 구독을 켠다. 그 질문이 실패하면 앱에는 502만 보였고, 서버 로그에도 이유가 남지 않아 원인을 알 수 없었다.

  • 해결 1: 구매 확인이 실패하면 이유를 운영 로그에 남기게 했다. 다시 구독해 보니 플레이가 401 permissionDenied(권한 없음)를 돌려주고 있었다.
  • 원인: 서비스 계정을 플레이 콘솔에 초대만 하고, 룸톤 앱에 대해 「재무 데이터 보기」·「주문 및 구독 관리」 권한을 주지 않았다. 권한을 준 뒤에도 바로 반영되지 않았다.
  • 해결 2: 권한을 준 뒤 구독 상품 설명을 한 번 고쳐 저장하자 반영됐다. 다시 구독하니 구매 확인이 통과하고 구독이 켜졌다.

다음에 할 일

  • 플레이 콘솔 남은 설정 — 앱 콘텐츠(포그라운드 서비스 신고 등), 스토어 등록정보와 이미지(한국어·영어), 내부 테스트 한 바퀴(가입·결제·해지·회원 탈퇴)
  • 심사 넣기 전 심사용 계정에 구독 켜기, 앱 액세스 안내에 「동시 재생 1대·이 기기에서 재생」 한 줄 — 심사 끝나면 되돌리기
  • 결제 시험에 쓴 계정을 남길지 지울지 정하기
  • Creem 결제 한 바퀴 — 판매 페이지에서 결제하면 구독이 켜지는지(0원 할인 코드 또는 실결제 뒤 환불), 결제 화면의 자동 갱신·무환불 고지 확인
  • 로그스톤 샵 룸톤 상품 페이지에 스토어 이미지 올리기
  • 비밀번호 재설정 링크를 실제로 열어 새 비밀번호로 바꾸고 로그인까지 확인
  • 앱 아이콘 여백 — R이 가장자리에 붙어 살짝 잘려 보인다
  • Creem 결제를 계속 둘지 다시 검토 — 매장에 인보이스가 정말 필요한지부터(외부 결제 프로그램 등록 전에 정하기)
  • 플레이 외부 결제 프로그램 등록(한국) — 승인되면 앱→웹 결제 링크 켜기
  • 앱에서 넘어가는 결제 없는 /account 화면 — 내 정보·업종·매장 이름·비밀번호·계정 삭제, 로그인된 채로 넘어가기
  • 회원이 업종 같은 계정 정보를 직접 고치기
  • 구독이 끝나 미리듣기로 바뀔 때 로딩이 한참 걸리는 것
  • 기준 시간대에 도시 이름 붙이기
  • 재생목록에 이미 있는 곡을 담을 때 묻기 — 새 곡만 넣을지, 한 번 더 넣을지 정하기
  • 구글 계정으로 로그인 — 붙일 때 플레이 데이터 보안 답과 개인정보처리방침도 함께
  • 웹에서 듣기 — PC만 쓰는 매장이 나오면 웹판과 윈도우 앱을 비교해 정하기
  • 로그스톤 샵의 개인정보처리방침·환불 조항 회신을 받아 웹 페이지 문구 맞추기
  • 우리 쪽 장애로 못 들은 기간 이용 기간 늘려 주기 — 구현 뒤 로그스톤 샵에 회신
  • 다음 곡 주소 미리 받기 검토 — 재생 횟수 기록을 떼는 것과 같이
  • 안드로이드 패키지에 딸려 오는 윈도우용 재생 엔진 빼기 검토(다운로드 6MB 남짓)
  • 반입을 검수 콘솔로 통째로 옮기기 — 파일을 콘솔에 끌어다 놓고 프롬프트도 콘솔에서 입력(프롬프트 엑셀 제거), 그다음 분류·변환·업로드를 버튼 하나로(반입 배치 파일 은퇴)
  • 검수 대기 15곡 마저 듣기
  • 매장 안내방송 — 지정 시각에 한 번 끼어들고 복귀. 음원은 서버에 올리지 않고 기기의 로컬 파일을 고른다
  • 보컬 검사를 여러 구간으로 넓히고 점수와 위치를 저장하기
  • 검수 콘솔 끝잘림 18곡 페이드 처리
  • 휴지통 30일 자동 정리 붙일지 검토
  • 넓힌 키워드로 기존 곡 무드 백필
  • 자동 분류가 안 된 5곡 에너지를 귀로 확정

Series: 룸톤 Roomtone


Suggested Posts