레이블이 soomla인 게시물을 표시합니다. 모든 게시물 표시
레이블이 soomla인 게시물을 표시합니다. 모든 게시물 표시

2015년 7월 10일 금요일

cocos2d-x + soomla IAB


Cocos2d-x 3.x (cpp) + Soomla IAB(In App Billing)

+Android platform

cocos2d-x  : http://www.cocos2d-x.org/

Soomla : http://soom.la/

soomla 설정 url

http://know.soom.la/cocos2dx/cpp/store/store_gettingstarted/

구글 IAB 설명
http://know.soom.la/android/store/store_googleplayiab/


1. 파일 및 폴더 설정

$ git clone git@github.com:soomla/soomla-cocos2dx-core.git extensions/soomla-cocos2dx-core
->move to /extensions/soomla-cocos2dx-core

$ git clone git@github.com:soomla/cocos2dx-store.git extensions/cocos2dx-store
->move to /extensions/cocos2dx-store


$ git clone git@github.com:soomla/jansson.git external/jansson
->move to /external/jansson

위의 파일들을 다 받고 위치를 맞게 설정하셨다면 다음 단계로

2. 아이템에 대한 값 설정

인앱 결제를 위한 아이템 설정 클래스를 만들어주어야 합니다.

참고할 곳은
https://github.com/soomla/cocos2dx-store-example/blob/master/Classes/MuffinRushAssets.cpp

위의 링크에서 코드를 보면 아이템들을 정의하고 돈을 설정해줬습니다.

저같은 경우는


중간에 RUBY_CURRENCY_ITEM_ID는 그냥 ruby라는 화폐의 값이고
중요한건 밑에 FIRST_PACK_PRODUCT_ID 입니다.
이 값은 구글 플레이 앱에 아이템 아이디를 넣어야 합니다.

더 자세한 설명은 위에 구글 IAB 설명이라는 url에 가시면 보고 하실수 있고
또는 soomla-store-example에서 보고 하실수 있을겁니다.

이렇게 원하는 아이템들을 다 정의했으면
구매하기 위해 버튼이나 메뉴를 눌렀을경우의 이벤트를 핸들링해야하는데

이벤트를 핸들링하기 위해 이벤트 핸들링 클래스를 만들어줍니다.

soomla-store-example에 ExampleEventHandler.cpp/.h 를 보시면
함수가 많이 있는데 그중에서 구매후 성공했을때 요청을 위한 함수가 필요한거니까
onItemPurchased()에서 결제처리를 해주면 됩니다.

onItemPurchaseStarted(), onItemPurchaseCancelled() 등에서 여러가지 예외처리해주면 좋겠지만 일단 필요한 부분만 보겠습니다.

저는 onItemPurchased()에서 Notification을 보내서 결제 처리를 하는 함수를 부르는 방식으로 했습니다.
문제는 이런식으로 가면 보안문제가 생겨서 결제 프로토콜을 깊게 고민해봐야겠지만
이런식으로 쉽게 IAB를 구현할 수 있다는 것을 알려드리고 싶었습니다.

3. 안드로이드 프로젝트에서의 처리

이부분을 깜빡할 뻔 했네요

Android.mk에서

//Add this line along with your other LOCAL_WHOLE_STATIC_LIBRARIES LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_store_static //Add this line at the end of the file, along with the other import-module calls $(call import-module, extensions/cocos2dx-store)

추가 해주셔야 합니다.

또, 아까 받은 폴더에서 아래의 jar을 classpath에 넣어줘야합니다.
From extensions/soomla-cocos2dx-core/build/android:
  • SoomlaAndroidCore.jar
  • Cocos2dxAndroidCore.jar
  • square-otto-1.3.2.jar
From extensions/cocos2dx-store/build/android:
  • SoomlaAndroidStore.jar
  • Cocos2dxAndroidStore.jar
From extensions/cocos2dx-store/build/android/billing-services/google-play:
  • AndroidStoreGooglePlay.jar

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.vending.BILLING"/> <application ... android:name="com.soomla.SoomlaApp">
...
<activity android:name="com.soomla.store.billing.google.GooglePlayIabService$IabActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/> <meta-data android:name="billing.service" android:value="google.GooglePlayIabService"/>
... </application>

퍼미션 설정도 해줘야하구요.

appdelegate.cpp에서는
https://github.com/soomla/cocos2dx-store-example/blob/master/Classes/AppDelegate.cpp#L32
에서 나와있듯이 설정해줘야하고
(안드로이드 앱 퍼블릭키와 설정키 설정)

이제 원하는 곳에서
CCStoreInventory::sharedStoreInventory()->buyItem(아이템아이디, &soomlaError);
호출해주면 됩니다.
그 후에 다 처리가 되면 화폐 지급 처리하면되구요.

보안문제나 내가 원하는대로 할 수 없는 것, 영수증 번호를 가져올 수 없다는게
흠이지만 쉽게 구현할 수 있다는 점이 큰 것 같습니다.

부족한 부분이 있다면 질문해주시면 감사하겠습니다.


JIRA Plugin - ScriptRunner 소개 #2

관련 글 소개 #1:  https://pineoc.blogspot.com/2019/03/scriptrunner-1.html ScriptRunner 소개 #2 지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 ...