[개발] CPNP 플러그인으로 안드로이드 인앱테스트
Posted 2015.10.12 10:46, Filed under: Article유니티 CPNP 플러그인 데모를 안드로이드에서 실행해보자
노티, 트위터, 쉐어, 구글 로그인, 업적, 리더보드, 그리고 인앱결제 기능이 필요했다. Android Native Plugin으로 해결하려 했으나 자잘한 문제가 계속 있어 데모의 대부분이 작동조차 하지 않는 상태였다. 그와중에 새로 나온 Cross Platform Native Plugin이 거의 모든 기능을 지원하면서 한번의 코드로 안드로이드와 아이폰 양쪽에서 모두 작동한다기에 관심이 생겼다. 특히 개발자의 피드백이 매우 빠르다는 리뷰가 있어 구입을 결심했다.
결론부터 말하자면 역시 자잘한 문제들이 있었으나 개발자의 실시간 피드백으로 결국 모든 기능의 테스트까지 성공했다.
참고로 웹사이트가 매우 느리고 내용이 적지만 기본 개념이 깔끔해서 데모 코드와 함께 보면 다 이해 가능하다. 모르는게 있으면 바로 개발자에게 이메일부터 날리고 스카이프로 채팅하시길 바란다.
CPNP 설치
유니티를 실행하고 어셋 스토어 > 스크립팅 > 인테그레이션으로 찾아들어가면 메인에 당당히 있으므로 구입 및 설치하면 된다. 기왕이면 안드로이드 아이폰 다 되는 Ultra 버전을 사자.
설치 후 프로젝트의 VoxelBusters > NativePlugins > Demo > Scene 폴더에 데모씬이 있으므로 더블클릭해서 씬을 활성화시키자.
그 다음 윈도우 > VoxelBusters > NativePlugins > Settings에서 필요한 항목들의 값을 넣어주고 씬에서도 한두가지 값만 넣어주면 끝이다.
그런데...
일단은 APK 업로드
안드로이드 기준으로, 세팅에 필요한 값들을 얻으려면 먼저 구글 개발자 콘솔에서 프로젝트를 만든 다음 APK를 올리고 거기서 나오는 값들을 넣어서 다시 빌드해야 한다.
구글 안드로이드 개발 절차는 이런 식이다. 복잡하다. 솔직히 이 글의 대부분의 내용은 개발자 콘솔 등 구글 세팅에 관한 내용이다. 게다가 앱을 게시한 순간부터는 빌드를 올릴 때마다 업데이트에 몇시간씩 걸리므로 정말 짜증난다. 미리 염두 바란다.
빌드 전에 에디트 > 프로젝트 세팅 > 플레이어 설정에서 안드로이드 Bundle Identifier를 수정해줘야 에러가 안난다. 안드로이드는 **.**형식을 쓰는데 유니티 기본값이 **.**.**이기 때문이다.하자. Bundle Identifier는 수많은 앱들을 서로 구별하게 하는 중요한 ID이므로 신중하게 이름을 짓자. com.companynameAppname com.companyname.appname 정도로 지으면 될 것이다.
자, 이제 에디트 > 빌드 세팅에서 플랫폼을 안드로이드로 스윗칭하고 빌드하자.
구글 개발자 콘솔
우선 개발자 콘솔을 열자. 경로는 https://play.google.com/apps/publish. 새 애플리케이션 추가 버튼을 누르면 프로젝트 생성 절차가 시작된다. 제목은 대충 지어줘도 된다.
APK 업로드 버튼을 눌러 방금 빌드한 APK를 올려보자. 이 때 프로덕션 탭이 기본값으로 되어있는데 이대로 APK를 올리면 마켓에 노출되어버린다. 적당히 베타를 선택해서 APK를 올리자.
그리고 기왕 온 김에 테스터 등록을 해놓자. 비공개 베타 테스트를 선택해서 이메일을 추가하면 된다. 그리고 테스트 목록의 활성 항목에 체크하는 것을 잊지말자. 중요한 점은 개발자는 인앱 테스트가 불가능하다는 점이다. 따라서 지금 미리 개발자가 아닌 다른 구글 계정을 하나 준비해서 등록해야 나중에 괴롭지 않다.
인앱 작성
개발자 콘솔의 인앱 상품 항목을 클릭, 새 제품 추가 버튼을 누르자.
제품 유형은 관리되는 제품과 구독이 있는데, 관리되는 제품은 한번만 구입하는 상품 혹은 여러번 구입하는 상품을 말한다. 구독은 정기적으로 구입 가능한 상품. 보통은 관리되는 제품을 선택하면 될 것이다.
제품 ID는 적당히 지어주면 된다.
계속 버튼을 누르면 제품 페이지가 보여질 것이다. 제목, 설명, 가격을 적당히 넣고 비활성 버튼을 클릭해 활성화로 바꾸면 자동저장 된다.
업적, 리더보드 작성
업적과 리더보드 작성을 위해서는 게임서비스(왼쪽 안드로이드 캐릭터 아래 게임패드 아이콘)를 클릭, 새 게임 추가 버튼을 눌러서 게임 서비스를 추가해야된다.
“게임에서 Google API를 아직 사용하지 않습니다” 탭을 선택, 게임 이름과 카테고리를 적당히 넣고 ‘계속’ 버튼을 누르자.
업적 항목을 클릭, 업적 추가 버튼을 누르자. 이름과 설명, 아이콘을 적당히 넣고 저장 버튼을 누르면 된다. 주의할 점은 업적이 최소 5개가 되어야 한다는 것.
이번에는 리더보드 항목을 클릭, 리더보드 추가 버튼을 누르자. 역시 이름만 적당히 넣고 저장하면 된다.
출시(게임서비스)
당황하지 말자. 구글 개발자 콘솔에서 말하는 출시는 마켓 출시를 말하는게 아니고 테스터 가능하게 공개한다는 뜻이다. 베타에서 프로덕션으로 넘어가지만 않으면 스토어에 앱이 노출되지 않는다.
게임 서비스 페이지의 화면 오른쪽 위 임시보관 버튼을 눌러 게임출시를 선택하자. “게임을 출시할 수 없습니다” 라는 메시지와 함께 빠진 부분을 친절하게 알려준다. 지금까지 따라왔다면 게임 세부정보와 연결된 앱 정보가 누락되어 있을 것이다.
게임 세부정보는 게임서비스 페이지 내의 항목인데, 애플리케이션 페이지의 스토어 등록정보 항목과 헷갈리지 않도록 주의하자. 설명을 적당히 쓰고, 아이콘과 그래픽 이미지를 하나씩 넣어주면 된다.
연결된 앱 항목을 클릭하면 여러 플랫폼 버튼이 보이는데, 안드로이드 버튼을 누르자. 패키지 이름 란을 클릭하면 굳이 기존에 생성되어있는 애플리케이션들이 보이므로 그중에 찾아서 선택하면 된다. 저장하고 계속 버튼을 누르면 화면이 바뀌는데, 지금 앱 승인 버튼이 보이므로 눌러보자. 팝업이 하나 뜨고 서명 인증서 지문이 표시되는데, 지금은 그냥 확인 버튼을 누르면 된다.
다시 게임출시를 시도하면 게임을 출시할 수 있다는 메시지와 함께 게임 출시 버튼이 보일 것이다. 꾸욱 눌러주자.
트위터
apps.twitter.com에서 프로젝트를 생성하면 컨슈머 키와 컨슈머 시크릿 키가 주어진다. 시크릿 키를 확인하려면 manage keys and access tokens를 클릭해야 한다는 것만 알면 된다. 나머지는 정말 쉬우므로 패스.
체크할 값들
이제 기본 세팅이 끝났으니 플러그인에 쓰일 값들을 체크해보자. 각각 다음과 같다.
번들 ID - 개발자 콘솔의 애플리케이션 페이지(안드로이드 캐릭터 아이콘)의 앱 이름 아래에 써 있다.
제품 ID (전부) - 애플리케이션 > 인앱 상품에서 설정한 제품들의 아이디.
라이센스 키 - 애플리케이션 > 서비스 및 API에서 확인할 수 있다.
앱 ID - 게임서비스 페이지(게임패드 아이콘)의 앱 이름 아래 써있다.
업적 ID (전부) - 게임서비스 > 업적에서 각 업적들의 아이디를 확인할 수 있다.
리더보드 ID - 게임서비스 > 리더보드에서 각 리더보드의 아이디를 확인할 수 있다.
트위터 컨슈머 키 - apps.twitter.com에서 확인할 수 있다.
트위터 컨슈머 시크릿 키 - apps.twitter.com에서 확인할 수 있다.
플러그인 세팅
이제 순서대로 하나씩 세팅을 해보자.
Application Settings > Android > Store Identifier는 개발자 콘솔의 번들 ID인데, 아까 지었던 Bundle Identifier와 같으므로 그대로 넣으면 된다.
바로 아래의 Supported Features도 설정해주자. 테스트할 기능들만 체크하면 된다. Billing, Notification, Sharing, Twitter, GameService만 체크하자.
BillingSettings > Products에는 size에 인앱 개수를 넣은 후 아이템을 하나씩 설정하면 된다. Name, Description, Price는 중요하지 않으며 Android Product Identifier는 개발자 콘솔의 제품 ID를 넣으면 된다. isConsumable에 체크하면 여러번 구매할 수 있는 상품으로 취급되어 관련 부분을 자동으로 처리해준다. 완전 편리한 부분.
아래의 Android > Public Key에는 개발자 콘솔의 라이센스 키 값을 넣으면 된다.
Notification settings는 로컬 푸시만 사용할 경우 세팅할 필요가 없다. 로컬 푸시만 사용하자.
Social Network Settings > Twitter Settings에는 트위터의 컨슈머 키와 시크릿 키를 넣으면 된다.
Utility Settings에는 Rate My App 설정이 있는데 특정 조건이 아닌 시간에 따라서만 팝업이 발생한다. 굳이 체크하지 말자.
Game Services Settings > Android > Play Services Application ID는 개발자 콘솔 > 게임 서비스의 숫자로 된 앱 ID를 넣으면 된다.
씬 세팅
노티 내용, 업적, 리더보드는 코드로 작성하게 되어 있다. 당연한가? 아무튼 데모에서 업적과 리더보드를 테스트하려면 씬에서 해당 내용을 설정해줘야 한다.
씬 > Features > GameServices를 보면 GameServicesDemo 스크립트에 Android Leaderboard ID List와 Android Achievement ID List가 있다. 개발자 콘솔의 리더보드 ID와 업적 ID들을 넣으면 된다.
Jar 파일 교체
CPNP 버전 1.1에서 이대로 빌드해서 테스트할 경우, 특정폰(예 : 삼성폰)에서 CPNP가 구글 플레이 로그인 결과를 탐지하지 못해 업적과 리더보드를 이용할 수 없다.
http://www.voxelbusters.com/products/native-plugins/forum/index.php?p=/discussion/61/upcoming-fixes#latest에서 androidnativeplugin.jar 파일을 다운받아 유니티 프로젝트의 Plugins/Android/native_plugins_lib/libs의 androidnativeplugin.jar에 덮어쓰자.
참고로 파일을 덮어쓸 때에는 유니티 상에 그냥 드래그해서 넣으면 각각의 파일이 공존하게 되므로, 탐색기로 폴더를 열어 직접 덮어써야 한다. 위의 폴더에 필요없는 jar파일이 있을 경우 빌드에러를 뿜으므로 반드시 주의해야 할 부분.
첫 테스트
설정이 제대로 되었다면, 빌드한 APK를 폰에 심고 개발자 콘솔에 올린 후 테스트하면 인앱과 트위터를 제외한 기능들을 테스트할 수 있을 것이다.
업적과 리더보드, 인앱 테스트를 위해서는 여기에서 몇가지가 더 추가되는데, APK에 서명이 되어있어야 하며, 앱이 출시 상태여야 하고, 테스트 참여 경로를 통해서 APK를 받아야만 한다.
서명
유니티 내에서 APK에 서명이 가능하다. 서명하는 과정은 아래 동영상을 참고하자.
https://www.youtube.com/watch?v=av5ANVlkU3g
서명된 APK를 개발자 콘솔에 올리자. 이제부터는 APK를 업데이트할 때마다 구글에서 이를 반영하는데 시간이 몇시간이 걸린다. 개발자 콘솔을 새로 고침해서 화면 오른쪽 위에 “업데이트중” 표시가 없어지면 제대로 반영된 것이다.
그리고 서명된 APK가 정상적으로 작동하려면 구글에 등록되어있는 서명을 업데이트 해줘야 한다.
터미널에서 keytool -exportcert -alias ** -keystore ** -list -v 명령을 통해 서명을 확인하자. **은 각각 키 이름과 키스토어파일이름이다. 인증서 지문이 여러가지 포맷으로 나오는데 SHA1 포맷의 것을 오려놓자.
이제 https://console.developers.google.com/project로 이동하자. APIs & auth > Credentials 항목의 Signing-certificate fingerprint 아래에 SHA1 형식의 지문이 있을 것이다. 미리 오려놓은 새 값으로 덮어쓴 후 저장 버튼을 누르자.
끝으로, 출시 이후에는 앱의 서명을 바꿀 수 없으므로 반드시 출시 전에 앱 서명 작업을 마치도록 하자.
출시(애플리케이션)
테스터들이 정식 경로로 테스트를 하기 위해서는 앱을 출시해야 한다. 개발자 콘솔 애플리케이션 화면 오른쪽 위의 출시할 수 없는 이유가 무엇인가요?를 클릭해보면 빠진 것들을 또 친절하게 가르쳐준다. 이번에는 간단하게만 설명하고 넘어가자.
스토어 등록정보 항목의 설명, 이미지, 카테고리 등 필수항목으로 표시된 부분을 빠짐없이 작성해야 한다.
콘텐츠 등급은 항목은 스토어 등록정보 하단에서 새로운 컨텐츠 등급 부분의 콘텐츠 등급 링크를 클릭해서 작성해야 한다. 그냥 클릭해서 아무 반응이 없을 경우 우클릭 후 링크를 열면 된다. 등급 적용까지 마치면 왼쪽의 콘텐츠 등급 항목이 활성화되어 내용을 다시 확인할 수 있다.
가격 및 배포 항목은 만약을 위해 무료앱으로 설정하자.
여기까지 진행했다면 화면 왼쪽 상단의 애플리케이션 상태가 출시 준비로 표시될 것이다. 이제 화면 오른쪽 상단의 앱 게시를 꾹 클릭하자.
참고로 출시 이후에는 APK를 올릴 때마다 업데이트 처리 중으로 표시되며 반영에 몇 시간이 걸린다. 또한 매번 버전이 이전보다 높아야만 하는데, 유니티 > 플레이이어 세팅 > other 부분에서 설정할 수 있다.
테스트
이제 폰에서 기존에 테스트하던 APK를 폰에서 삭제하자.
그 후, 크롬 등의 브라우저에서(갤2 기본 브라우저에서는 안됨;) https://play.google.com/apps/testing/**.** 주소를 통해 테스트 참여하기를 누르자. 개발자 계정으로 로그인하면 절대 안된다. 테스트에 참여 후 play store에서 App 다운로드하기를 클릭하면 플레이스토어로 이동한다. 이제 앱을 인스톨하고 인앱 테스트하면 된다.
구입 및 인앱 테스트시 결제된 비용은 전부 일정 시간 뒤 결제취소되므로 걱정하지 말고 지르자.
인앱 테스트를 해보면 isConsumable된 상품은 CPNP의 isPurchased가 항상 false를 반환한다. 즉시 consume되어 더이상 purchased가 아니므로 당연...
한가지 주의할 점은 테스트하면서 앱을 버전업할 경우, 개발자 콘솔의 업데이트가 끝났어도 폰의 플레이스토어가 갱신되지 않는 경우가 있다. 이럴 때는 폰의 설정 > 애플리케이션 설정에서 플레이스토어의 데이터를 클리어해주면 해결된다. 다운로드 전에 Read More 를 터치해 버전을 꼭 확인하자.