2016. 5. 25. 16:46ㆍEtc/경험담
안녕하세요?
이번시간에는 unity 의 프레임웍중 하나인 prime31 을 이용해서 인앱 관련 기능을 붙여보았습니다.
prime31 의 경우 storeKit 과 google iab 두개의 매니저가 존재합니다.
각각은
#if UNITY_IOS || UNITY_IPHONE
#elif UNITY_ANDROID
#endif
를 이용하여 통합 매니저를 구축한 후 동일한 프로덕트키를 발급하여 관련 상품구매를 컨트롤 하는 방식으로 진행하였습니다.
순서는 아래와 같습니다.
1. Import Prime31 ( android : ver. 2.10 , ios : ver 2.15 )
prime 31 의 경우 아이폰과 안드로이드의 plugin 버전이 달랐습니다.
2. Test IAP
var listProducts = new string[2]; listProducts[0] = "com.test.crystal100"; listProducts[1] = "com.test.crystal200"; StoreKitManager.productListReceivedEvent += ProductListReceived; //listen for purchase StoreKitManager.purchaseSuccessfulEvent += PurchaseSuccessful; StoreKitManager.purchaseFailedEvent += PurchaseFail; StoreKitManager.purchaseCancelledEvent += PurchaseCancelled; //Request product list StoreKitBinding.requestProductData(listProducts);
소스를 간단히 설명 드리면
listProducts 의 경우 itunes 에서 등록한 제품ID 입니다. 해당 부분을 requestProductData 를 하시게 되면 체크를하여 존재하는 프로덕트인지 확인해줍니다.
ProductListReceived 콜백에서 데이터를 셋해주시면 됩니다.
Purchase 함수의 경우 IAB,IAP 통일을 하였습니다.
3. Test IAB
GoogleIAB.init( key ); GoogleIAB.setAutoVerifySignatures (true); GoogleIABManager.billingSupportedEvent += billingSupportedEvent; GoogleIABManager.billingNotSupportedEvent += billingNotSupportedEvent; GoogleIABManager.queryInventorySucceededEvent += queryInventorySucceededEvent; GoogleIABManager.queryInventoryFailedEvent += queryInventoryFailedEvent; GoogleIABManager.purchaseCompleteAwaitingVerificationEvent += purchaseCompleteAwaitingVerificationEvent; GoogleIABManager.purchaseSucceededEvent += purchaseSucceededEvent; GoogleIABManager.purchaseFailedEvent += purchaseFailedEvent; GoogleIABManager.consumePurchaseSucceededEvent += consumePurchaseSucceededEvent; GoogleIABManager.consumePurchaseFailedEvent += consumePurchaseFailedEvent;
4. New Class IAPManager -> include "GoogleIAB" , "StoreKitManager"
다음의 지시문을 이용해 분기처리 하였습니다.
#if UNITY_IOS
#elif UNITY_ANDROID
#endif
이후 purchase 부분에 대해서는 공통코드로 처리를 하였습니다.
Android 와 ios 의 프로덕트 id 를 맞추면 관리하기가 편합니다.
product_id 의 경우 많이 만들지 마시고 종류별로 (티어별로 몇개만 만드셔서 , 자체 디비에서 돌려 쓰시면 좋습니다. )
5. 영수증 체크 서버 구현
php 를 이용하여 처리하였습니다. ios 의 경우에는 transaction id 만 받아서 validation 이 가능한 반면, 구글의 경우 api 를 사용해야하므로, client-id, secret-key, token 이 필요합니다. ( 준비해야할게 많고 시간이 좀 걸립니다. )
5. 결론
진행하면서 가장 시간이 오래걸렸던 부분이 있다면.
Error
The item you requested is not available for purchase
라는 에러입니다.
queryInventorySucceededEvent 내로 제가 등록한 상품리스트는 잘 들어오는 것으로 보아, 앱과 developer console 간의 연결은 잘 된것 같습니다. 그러나, 해당 에러가 계속 뜨게되었습니다.
이를 해결하기 위해 다음과 같은 대처를 해보았습니다.
1. APK 의 version code, version name 체크 ( manifest 내의 version code, version name 이 일치 해야합니다. )
2. Permission Setting .
결국 해결 하였습니다.
우선 테스트해서 안되는지를 판단하기 위해서는 먼저 링크를 통해서 다운로드가 가능해야합니다. 이는 링크를 눌렀을때 404 not found 가 뜨면 안됩니다. ( 이때는 아직 enable 상태가 아닌것 같습니다. ) 저의 경우 링크가 활성화 된 후부터 잘 되었습니다. 링크 활성화는 시간이 하루정도 걸렸습니다.
'Etc > 경험담' 카테고리의 다른 글
[Terminal] 간단한 파일명 변경 명령어 (0) | 2016.06.14 |
---|---|
[Android,Unity] Logcat 보기 (0) | 2016.06.07 |
[Unity] 특이한 경험 (0) | 2016.05.24 |
[Unity] AssetBundle 시스템 구축 (3) | 2016.05.23 |
[Pod] Xcode 오픈 소스 사용시 Pod (0) | 2016.05.12 |