[Gideros + Tapjoy](4) Android integration
이전 글 목록
이번 글에서는 Android integration 에 대해 다룹니다. 우선 Android용으로 export 해야 하는데, 저는 ‘Export Project’ > ‘Android (Old)’ 를 이용하였습니다. Gideros 에서 APK를 직접 생성하면 직접 추가적인 코드를 작성하기 힘들기 때문입니다. ‘Android (Old)’ 를 이용하여 export 하면 Android Studio 용 파일이 만들어집니다.
Tapjoy SDK 를 사용하려면 App level build.gradle 에 기본적으로 다음 내용을 추가하면 됩니다. (이 글 작성시 Tapjoy SDK 최신 버전이 12.7.0 이었습니다. 항상 최신 버전을 이용해주세요.)
dependencies {
(...)
api 'com.tapjoy:tapjoy-android-sdk:12.7.0@aar'
(...)
}
하지만 이것을 추가하고 나면 Android Studio 가 여러가지를 변경하라고 할 것입니다. Gideros 기본 세팅은 minSdkVersion = 9 (Android 2.3)인데, Tapjoy는 최소 14, Firebase/AdMob은 최소 16 을 필요로 합니다. Project level build.gradle과 App level build.gradle을 각 SDK가 요구하는 대로 변경하다보면 gradle 버전도 올려야 하고, gradle.properties 도 수정해야 합니다.
그 다음 난관이 되는 것이 JNI build 입니다. 여러 번 해봐도 익숙해지지가 않습니다. 여튼 여러분들은 제가 해둔 대로 하시면 됩니다. 나중에 Android Studio 와 NDK가 업데이트 된다면 동작하지 않을 지도 모르지만요.
// ABPlugin -->
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
packagingOptions {
pickFirst 'lib/x86_64/libgideros.so'
pickFirst 'lib/x86_64/liblua.so'
pickFirst 'lib/arm64-v8a/libgideros.so'
pickFirst 'lib/arm64-v8a/liblua.so'
pickFirst 'lib/armeabi-v7a/libgideros.so'
pickFirst 'lib/armeabi-v7a/liblua.so'
pickFirst 'lib/x86/libgideros.so'
pickFirst 'lib/x86/liblua.so'
}
// <-- ABPlugin
Native plugin code 자체를 들여다보면, 우선 abpluginbinder.cpp 는 iOS 용과 동일합니다. 새로운 API를 넣으려면 여기서부터 시작하면 됩니다. gabplugin.cpp 도 iOS용 gabplugin.mm 과 유사하지만, 여기서는 대신 ABPlugin.java 에 있는 코드를 다음과 같이 호출합니다.
env->CallStaticVoidMethod(cls_, env->GetStaticMethodID(cls_, "sendEvent", "(Ljava/lang/String;Ljava/lang/String;I)V"), jEventName, jArg1, value);
개인적으로는 여러 번 봐도 익숙해지지 않는 코드입니다.
마지막으로 ABPlugin.java 를 설명하도록 하겠습니다.
sendEvent
우선 sendEvent
는 각각 Tapjoy와 Firebase 에 이벤트를 기록하는 method입니다. 예를 들어 eventName= ‘complete’, arg1= ‘level1’ , value=(score) 같은 방식으로 인자를 주면 각 서비스의 대시보드에서 이벤트를 확인할 수 있습니다.
setUserProperty
Tapjoy에서는 사용자를 그룹화 하기 위한 방법으로 5가지의 Cohort 와 Level을 사용할 수 있습니다. Firebase 에서는 User property를 이용하여 비슷한 기능을 이용할 수 있습니다. 두 기능을 합쳐서 setUserProperty라는 API를 만들었습니다.
showVideo
ABPlugin 에는 video AD 를 위해 manual mediation code를 구현해 두었습니다. 간단하게 Tapjoy와 AdMob의 Video AD를 돌아가며 보여주게 되어있습니다. 보다 전문적인 mediation을 원하는 경우 https://tapdaq.com 등의 서비스를 이용할 수 있습니다.
checkCurrency
Tapjoy는 두 가지 형식의 Virtual currency를 지원합니다.
- Self managed currency
- Tapjoy managed currency
만드시는 게임에 서버가 있고, 그 서버가 Virtual currency를 직접 관리한다면 Self managed currency 를 사용해야 합니다. 이 경우 사용자가 Virtual currency를 획득하면 Tapjoy 서버가 직접 게임 서버로 callback을 보냅니다. 이 경우 checkCurrency 코드를 삭제하는 것이 맞습니다.
만약에
- 게임 서버를 사용하지 않으며
- 게임이 네트워크와 연결되어있지 않은 경우에도 플레이 가능하고
- Tapjoy 이외의 Rewarded AD 를 사용한다면
Virtual currency 를 로컬에서 직접 관리해야 할 것입니다. checkCurrency method는 이 경우를 위한 것입니다. Tapjoy virtual currency 를 일단 전부 가져와서 그것을 Lua layer에 보내도록 되어있습니다. Lua layer 에서 직접 관리해야 합니다.
모든 코드는 https://github.com/keewon/abplugin_for_gideros 에 있습니다.