RSS

스토어 메타데이터 API 정리: 항목별로 되는 것과 안 되는 것

앱 설명과 키워드를 채우면서 두 스토어의 API 를 항목별로 다 두드려 봤습니다. 콘솔에 들어가지 않고 어디까지 갈 수 있는지 궁금했거든요.

결과를 정리해 보니 "되는 것"과 "안 되는 것"의 이분법이 아니었습니다. 가운데에 한 칸이 더 있었습니다.

세 가지로 갈렸습니다

API 로 넣었다. 명령으로 값을 보내면 그대로 들어가는 것들입니다.

API 는 있는데 못 넣었다. 엔드포인트도 있고 권한도 있는데 넣을 재료가 없어서 비워 둔 것들입니다. 여기서 막힌 건 기술이 아니라 준비였습니다.

API 가 막혀 있다. 아무리 해도 안 되는 것들입니다.

App Store Connect

항목 결과 방법
앱 이름 넣음 PATCH /v1/appInfoLocalizations/{id}
부제 넣음 같은 엔드포인트
카테고리 넣음 PATCH /v1/appInfos/{id} 의 관계 필드
설명 넣음 PATCH /v1/appStoreVersionLocalizations/{id}
키워드 넣음 같은 엔드포인트
홍보 문구 넣음 같은 엔드포인트
지원 URL 넣음 같은 엔드포인트
저작권 넣음 PATCH /v1/appStoreVersions/{id}
Bundle ID 등록 넣음 POST /v1/bundleIds 가 201
빌드와 버전 연결 자동 업로드하면 알아서 붙음
개인정보 처리 방침 URL 못 넣음 필드는 있는데 올릴 페이지가 아직 없음
스크린샷 못 넣음 업로드 API 는 있는데 이미지가 없음
연령 등급 막힘 관계 자체가 없다고 404
앱 레코드 생성 막힘 403, does not allow 'CREATE'

Google Play

항목 결과 방법
제목 넣음 PATCH /edits/{id}/listings/{lang}
짧은 설명 넣음 같은 엔드포인트
전체 설명 넣음 같은 엔드포인트
연락처 이메일, 웹사이트 넣음 PATCH /edits/{id}/details
트랙 조회 넣음 GET /edits/{id}/tracks/{track}
스크린샷, 아이콘 못 넣음 업로드 API 는 있는데 이미지가 없음
키워드 필드 없음 Play 는 키워드 칸이 없음
콘텐츠 등급 막힘 콘솔 전용
데이터 보안 신고 막힘 콘솔 전용
앱 생성 막힘 엔드포인트 자체가 없음

두 API 의 성격이 달랐습니다

같은 일을 하는데 다루는 방식이 반대였습니다.

Apple 은 바로 고칩니다. 대상에 PATCH 를 보내면 그 자리에서 반영됩니다.

Google 은 편집 세션을 엽니다. 먼저 편집을 하나 만들고, 그 안에서 값을 바꾸고, 마지막에 커밋해야 반영됩니다. 커밋하지 않으면 아무 일도 일어나지 않고, 중간에 실패하면 편집을 지워서 통째로 되돌릴 수 있습니다.

트랜잭션이 있는 셈이라 처음엔 번거롭게 느껴졌는데, 실수했을 때 롤백이 쉬운 건 장점이었습니다. 실제로 스크립트에 실패 시 편집을 삭제하는 처리를 넣어 두니 마음이 편했습니다.

막히는 방식도 달랐습니다

앱을 만들려고 했을 때 Apple 은 이렇게 답했습니다.

{
  "code": "FORBIDDEN_ERROR",
  "detail": "The resource 'apps' does not allow 'CREATE'.
             Allowed operations are: GET_COLLECTION, GET_INSTANCE, UPDATE"
}

무엇이 막혔고 대신 무엇이 되는지까지 알려 줍니다. 이 메시지 덕분에 "권한을 올리면 되겠지"라는 제 가정이 틀렸다는 걸 알았습니다. 정확히는 키를 세 개나 만들어 보고 나서였지만요.

Google 은 그런 답조차 없습니다. 앱을 만드는 엔드포인트가 문서에 없습니다. 없는 문을 두드릴 수는 없으니 오히려 헷갈릴 일이 없었습니다.

연령 등급도 비슷했습니다. Apple 은 관계를 조회하니 "그런 관계가 없다"고 404 를 줬고, Google 은 애초에 그런 경로가 없었습니다.

키워드는 한쪽에만 있습니다

Apple 에는 키워드 칸이 따로 있습니다. 백 자까지 쉼표로 나열하는데, 앱 이름에 이미 들어간 말은 자동으로 색인되니 거기 또 넣으면 자리만 낭비합니다. 그래서 이름에 없는 말들로만 채웠습니다.

Google 에는 그 칸이 없습니다. 설명 본문이 곧 검색 대상이라, 넣고 싶은 말을 문장 안에 자연스럽게 녹여야 합니다. 같은 앱인데 글을 두 벌 쓰게 되는 이유가 이것입니다.

가운데 칸이 제일 흥미로웠습니다

처음에는 "API 로 되나 안 되나"만 궁금했는데, 막상 해보니 API 는 열려 있는데 넣을 게 없어서 못 넣은 것이 두 개나 됐습니다. 개인정보 처리 방침과 스크린샷입니다.

이 둘은 기술 문제가 아닙니다. 처리 방침은 웹에 페이지가 하나 있어야 하고, 스크린샷은 앱을 켜서 찍어야 합니다. 자동화가 막힌 게 아니라 자동화할 재료가 아직 없는 것입니다.

비어 있는 칸을 보면서 "이건 API 가 없나" 하고 문서를 뒤졌는데, 알고 보니 제가 만들지 않은 것이었습니다. 도구를 탓하기 전에 재료를 확인했어야 했습니다.

남은 것

콘솔에 들어가서 해야 하는 건 결국 둘입니다. 연령 등급 설문과 데이터 수집 신고. 둘 다 "이 앱은 이러이러합니다"라고 선언하는 일이라 기계가 대신 눌러 줄 성격이 아닙니다.

나머지는 재료만 만들면 API 로 들어갑니다.