작업한 내용은 아래 두 기능입니다. 원래 Google Play 기능으로 구현되어 있던 것을 T-Store용으로 대체한 것이죠.
1. T-Store용 인앱결제
2. T-Store 평점 주기(상품 페이지) 실행
Google의 인앱결제를 구현했었기 때문에 기술적으로는 어렵지 않았습니다.
하지만 Google과는 달리 T-Store의 경우 검색해도 구현 사례나 문제 해결 방법이 별로 안나오더군요.
결국 사소한 문제가 발생할 때마다 많은 시간과 노력을 들여야 했습니다. ㅠㅠ
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
그럼에도 불구하고 T-Store에 게임을 올릴만한 가치가 있는데요.
제가 생각하는 T-Store의 장점은 아래와 같습니다.
1. T-Store의 경우 성인인증시스템이 구비되어 있습니다.
따라서 원래 "성인 버전"의 착한 포커를 그대로 올릴 수 있지요.
2. 많은 사용자들이 있습니다.
젊은 분들이야 대부분 카톡 게임이나 구글 마켓을 통해 게임(혹은 앱)을 다운받겠지요.
하지만 나이가 좀 있으신 분이나 폴더폰부터 써오시던 분들은 통신사 앱, 통신사 마켓에 익숙합니다.
국내 통신사중에서는 단연 T-Store 사용자가 많습니다. 소문에는 Olleh 마켓, U+ 마켓 사용자를 합한 것보다 많다고도...
그리고 성인용 게임의 경우 동일한 게임인데 Google Play보다 T-Store의 다운로드가 더 많은 경우도 봤습니다.
성인 컨텐츠 제공 역사가 깊은만큼, 고정 사용자 풀도 그만큼 큰 것으로 보입니다.
3. 결제 방법이 다양합니다.
애플이나 구글은 신용카드 결제 방식만 제공합니다.
이에 반해 T-Store는 신용카드 결제 / ***모바일 결제*** / ***OK 캐쉬백*** / ***컬쳐캐쉬(문화상품권)*** / 도토리 / 모바일 티머니 / T-Store 캐쉬 등 다양한 결제 방식을 지원합니다.
그 외에도 전용 프로모션도 가능하고, 애플이나 구글과 달리 수익을 지급받는 것도 간편하지요.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
뭐 T-Store 뿐만이 아니라 Olleh나 U+ 마켓등, 하나라도 더 올려서 더 많이 파는게 무조건 좋겠지요.
그만큼 고생도 하고 관리도 어려워지긴 하겠지만요...
그럼 T-Store용 결제와 상품 페이지 실행에 대한 작업 내용을 간단히 정리해 보겠습니다.
[상품 페이지 실행]
게임중에 평점을 달면 보너스를 주는 기능이었습니다.
> if(BuildInformation.instance.platform == GlobalDataManager.PLATFORM_GOOGLE_PLAY_KOR)
> Application.OpenURL("market://details?id=com.회사명.게임명");
> else if(BuildInformation.instance.platform == GlobalDataManager.PLATFORM_TSTORE)
> Application.OpenURL("http://tsto.re/상품코드");
저는 Unity C#에서 위와 같이 Application.OpenURL 함수로 실행했습니다.
T-Store에서는 http://tsto.re/상품코드 로 적어주면 된다고 합니다.
글을 쓰는 지금 시점에서는, 구현에 대한 실제 실행 여부를 확인하진 못했습니다. (서비스 되어야 페이지가 열리는 것 같네요)
하지만 다른 게임의 상품 코드로 실행해보고 잘 열리는 것을 확인했습니다.
[인앱 결제]
Google Play 방식과 개념부터 다르고, 용어도 달라서 조금 헤맸습니다.
자세한 내용까지 다 적기는 힘들고... 큰 개념만 잡을 수 있도록 정리해 보면 아래와 같습니다.
1. 상품 이라는 정의
T-Store에서는 앱도 상품, 인앱 결제 아이템도 모두 상품으로 호칭하고 있습니다.
2. 상품 등록
앱은 관리자 페이지 > Apps > 전체 상품 정보 > 상품 현황 화면에서 (신규) 등록합니다.
인앱 결제 아이템은 관리자 페이지 > Apps > 해당 상품 > In-App정보 화면에서 등록합니다.
참고로 일반적인 게임 판매 아이템은 "건당상품 - 소멸"로 등록해야 합니다.
"건당상품 - 영구"로 등록한 아이템은 게임 실행후 한 번밖에 구매하지 못합니다.
예를 들어 "프리미엄 서비스로 업그레이드" 혹은 "인벤토리 6칸 영구 확장" 등과 같은 경우에만 선택해야겠네요.
3. 테스트
2번에서 인앱 상품을 등록한 페이지 상단에, [테스트] 버튼이 있습니다.
[테스트] 버튼을 누르면 "개발자 지원 Self Test" 팝업창이 뜨는데, 여기서 테스트 단말기 등록, 상품별 설정, 로그 조회를 하실 수 있습니다.
생소하긴 하지만 어려운 점은 없었습니다.
(5월 16일 오후 5:22 내용 추가)
등록된 모든 인앱 상품을 테스트하고 완료되어야 상품 검증 버튼이 활성화됩니다.
이걸 몰라서 3시간동안 앉아서 기다렸네요. 뭔가 느낌이 이상해서 이것저것 뒤져보고 알아냈습니다.
4. APK 파일 업로드
관리자 페이지 > Apps > 해당 상품 > 신규 APK 화면에서 등록합니다.
여기에 APK 파일을 등록해야, 3번 항목의 테스트도 가능했었습니다. (100% 정확한 것은 아닙니다만 경험상)
APK 파일 등록을 위해서는 Google Play 버전과 마찬가지로 keystore 인증을 포함한 release 버전을 준비해야 합니다.
개발 프로그래밍, 환경 세팅 관련 이슈는 많고 많은데요.
제가 제일 어려움을 겪었던 것들만 우선 적겠습니다.
1. AndroidManifest.xml
a. Google Play 버전과 겹치지 않게 하려면, package명을 바꿔줘야 합니다.
물론 Unity의 프로젝트 세팅 화면에서도 Bundle Identifier도 같이 바꿔줘야 합니다.
b. 저의 경우 기존 Google Play 인앱 결제를 구현하면서 추가했던
이걸 몰라서 3시간동안 고생했네요.
c. T-Store용 <-meta-data />,
2. src - IAPforUnity
제공되는 코드를 Eclipse에서 Unity용 jar로 컴파일해서 쓰는데요.
MainActivity.java 의 mPlugin = IapPlugin.getPlugin(this, "release"); 를 잘 확인하셔야 합니다.
테스트를 위해서는 "development", 사용 서비스를 위해서는 "release" 파라미터를 넘겨야 합니다.
(dev 버전과 release 버전을 다른 이름으로 저장해 놓으면, 나중에 가져다 쓰기 편하실 거에요)
3. src - IAP_Unity
Unity용 샘플 프로젝트가 준비되어 있습니다.
여기에 있는 AndroidBridge.cs를 기본형으로 가져다가 제 게임에 맞춰서 구현했는데요.
샘플 프로젝트로 구현해보면 대략적인 감은 다 잡을 수 있습니다.
다만...
결제후 콜백 함수에 대한 설명이 명확하지 않아서 또 몇 시간 고생했습니다. ㅠㅠ
CallPaymentRequest 로 결제를 요청하면, 결과 처리후 콜백 함수로 PurchaseComplete 가 실행됩니다.
샘플 코드에 구현도 되어 있고 동작도 잘 되니까 감이 좋은 사람은 바로 알겠지만...
개발 가이드 문서나 코드 주석에 콜백에 대한 처리 내용이 명확하지 않아서 저는 힘들게 찾았네요.
그리고 콜백 함수인 PurchaseComplete로 넘어오는 인자가 string입니다.
그것도 좀 긴 string이에요. (아마 영수증인듯)
------------------------------
Rusult of payment request = [VerifyReceipt]
status:0
detail:0000
message:정상검증완료.
count:1
{product}
log_time:20140515154038
appid:(상품 코드)
product_id:(아이템 코드)
... 이하 생략 ...
------------------------------
때문에 저는 string 내용을 잘라서 확인하는 기능울 추가 구현했습니다.
개발 가이드 문서에 JSON으로 주고 받는다는 내용을 보긴 했는데, 제가 JSON은 안써보기도 하고 해당 내용을 찾기도 힘들어서요.
그 외에도 실제 게임 코드에 Google Play용 결제와 관련된 코드를 T-Store용 결제 코드로 바꾸는 작업도 있고요.
저의 경우 GameAnalytics라는 게임 로그 서비스를 이용하고 있어서, 별도의 앱으로 인식하기 위해 key를 바꾸기도 했지요.
T-Store용 아이콘도 어깨노출 있는 그림으로 바꾸고요.
그 외에도 게임 플레이 외적인 부분으로 T-Store용 기능이 있어서 다 구현했습니다.
참고로 Plugins > Android 폴더에 넣은 Google Play 인앱 결제용 플러그인등은 삭제하지 않아도 괜찮았습니다.
용량이 커지니까 빼는게 좋긴 한데, 소스 관리의 어려움 때문에 일단은 다 포함시켰네요.
게임물등급위원회에도 기존 Google Play 외에 T-Store용으로 바꾸었다고, 내용 수정에 따른 재심의 여부 확인 신청도 해놓았습니다.
아마 내일쯤에는 최종적으로 올린 APK 파일에 대해 T-Store 검증 신청을 하게 될 것 같네요.
(APK 파일을 올린 후, 시간이 좀 지나야 검증 요청이 가능합니다)
검증 요청하면서 검증이 끝나고 바로 서비스 적용할 지, 아니면 서비스 시작 시간을 걸어놓을지 등이 옵션도 준비되어 있습니다.
Google Play의 정책 변경으로 - 본의치 않게 너무 착해졌던 "착한 포커".
이제 원래의 착한 모습으로 T-Store에 올라가는 것만 남았네요.
혹시 SKT 스마트폰을 사용하고 계시다면, 나중에 꼭 한 번 즐겨주세요!