본 연동 가이드는 BuzzAd-Benefit SDK를 Unity에서 간단하게 연동하기 위해 작성되었습니다. Native Ad를 제외한 다른 지면을 간단하게 연동 할 수 있으며, 현재는 커스터마이즈를 제외한 기본적인 연동 요소를 제공합니다.
Index
Table of Contents |
---|
Installation
Android - gradle 을 사용하여 SDK 연동
Case 1) Unity에서 Asset/Plugins/Android/
에 mainTemplate.gradle
파일을 생성합니다.
Note |
---|
이미 다른 |
Code Block | ||
---|---|---|
| ||
buildscript { repositories { mavenCentral() google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.4.0' **BUILD_SCRIPT_DEPS**} } allprojects { repositories { mavenCentral() google() jcenter() maven { url "https://dl.bintray.com/buzzvil/maven/" } flatDir { dirs 'libs' } } } apply plugin: 'com.android.application' **APPLY_PLUGINS** dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation ("com.buzzvil:buzzad-benefit:1.6.8") **DEPS**} android { compileSdkVersion **APIVERSION** buildToolsVersion '**BUILDTOOLS**' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { minSdkVersion **MINSDKVERSION** targetSdkVersion **TARGETSDKVERSION** applicationId '**APPLICATIONID**' ndk { abiFilters **ABIFILTERS** } versionCode **VERSIONCODE** versionName '**VERSIONNAME**' } lintOptions { abortOnError false } aaptOptions { noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**] }**SIGN** buildTypes { debug { minifyEnabled **MINIFY_DEBUG** useProguard **PROGUARD_DEBUG** proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD** jniDebuggable true } release { minifyEnabled **MINIFY_RELEASE** useProguard **PROGUARD_RELEASE** proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG** } }**PACKAGING_OPTIONS****SPLITS** **BUILT_APK_LOCATION** bundle { language { enableSplit = false } density { enableSplit = false } abi { enableSplit = true } } }**SPLITS_VERSION_CODE****REPOSITORIES****SOURCE_BUILD_SETUP** |
Case 2) 이미 사용중인 .gradle
이 있다면, 해당 파일에 Benefit dependency를 추가해 줍니다.
Code Block | ||
---|---|---|
| ||
maven { url "https://dl.bintray.com/buzzvil/maven/" } dependencies { implementation "com.buzzvil:buzzad-benefit:1.6.8" } |
iOS - Cocoapods 를 이용한 SDK 연동
Unity에서 Asset/Plugins/iOS/
에 PodFile
을 생성합니다.
Code Block | ||
---|---|---|
| ||
# Uncomment the next line to define a global platform for your project platform :ios, '8.0' target 'Unity-iPhone' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for Unity-iPhone pod 'BuzzAdBenefit', '1.2.7' target 'Unity-iPhone Tests' do inherit! :search_paths # Pods for testing end end |
BuzzAdBenefit Initialization
SDK를 사용하기 위해 initialization 코드를 호출해 주어야 합니다. 최초 광고 요청 전에만 호출하면 되지만, 앱이 시작할 때 호출하는 것을 권장합니다.
Initialization에 필요한 항목
appId
: Buzzvil의 BD 매니저를 통해 전달 받은 app IduserId
: 매체사 서비스 유저를 unique 하게 구분할 수 있는 식별값매체사 서비스에서 유니크하다고 판단되는 유저에 대하여, userId 값이 복수 개 연동되거나 변경될 가능성이 있을 경우 사전에 BD 매니저와 논의해야 합니다.
예: 매체사 앱 삭제 후 재설치 시 user Id 값이 변경되는 경우
gender
: 성별Android
UserProfile.Gender.MALE
: 남성UserProfile.Gender.FEMALE
: 여성
iOS
BABUserGenderMale
: 남성BABUserGenderFemale
: 여성
birthyear
: 출생연도
참고사항
Android
C# 코드를 생성하여, 아래 샘플코드를 호출 할 수 있습니다.
iOS
Objective-C 로 된 .mm 파일을 생성하여, SDK 코드를 호출 할 수 있습니다.
Initialization 코드
Android
Code Block | ||
---|---|---|
| ||
public void initializeBAB(string appId, string userId, Gender gender, int birthyear) { // Ignore Calls from platforms other than Android if (Application.platform != RuntimePlatform.Android) { return; } // Get Context from Unity activity AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext"); // Call BuzzAdBenefit.init() AndroidJavaObject builder = new AndroidJavaObject("com.buzzvil.buzzad.benefit.BuzzAdBenefitConfig$Builder", appId); AndroidJavaObject config = builder.Call<AndroidJavaObject>("build"); AndroidJavaClass benefit = new AndroidJavaClass("com.buzzvil.buzzad.benefit.BuzzAdBenefit"); benefit.CallStatic<AndroidJavaObject>("init", context, config); // Set UserProfile AndroidJavaObject profileBuilder = new AndroidJavaObject("com.buzzvil.buzzad.benefit.core.models.UserProfile$Builder", benefit.CallStatic<AndroidJavaObject>("getUserProfile")); benefit.CallStatic( "setUserProfile", profileBuilder.Call<AndroidJavaObject>("userId", userId) .Call<AndroidJavaObject>("gender", new AndroidJavaClass("com.buzzvil.buzzad.benefit.core.models.UserProfile$Gender").GetStatic<AndroidJavaObject>(gender.ToString())) .Call<AndroidJavaObject>("birthYear", birthyear) .Call<AndroidJavaObject>("build") ); } public enum Gender { MALE, FEMALE } |
iOS
제공된 샘플 코드의 예제를 통해 참고할 수 있습니다. (BenefitPlugin.mm)
Code Block | ||
---|---|---|
| ||
#include <Foundation/Foundation.h> #include <BuzzAdBenefit/BuzzAdBenefit.h> #include <BuzzAdBenefitFeed/BuzzAdBenefitFeed.h> #include <BuzzAdBenefitInterstitial/BuzzAdBenefitInterstitial.h> @interface BenefitPlugin : NSObject { } @end @implementation BenefitPlugin static BenefitPlugin *_instance; +(BenefitPlugin*) getInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"Creating BenefitPlugin Instance"); _instance = [[BenefitPlugin alloc] init]; }); return _instance; } -(id) init { self = [super init]; if (self) { [self initHelper]; } return self; } -(void) initHelper { NSLog(@"BenefitPlugin Initialized!"); // Initialize BuzzAdBenefit BABConfig *config = [[BABConfig alloc] initWithAppId:@YOUR_APP_ID]; [BuzzAdBenefit initializeWithConfig:config]; // Set UserProfile BABUserProfile *userProfile = [[BABUserProfile alloc] initWithUserId:@USER_ID birthYear:1985 gender:BABUserGenderMale]; [BuzzAdBenefit setUserProfile:userProfile]; } -(void) showFeed: (NSString*) unitId { BABFeedConfig *config = [[BABFeedConfig alloc] initWithUnitId:unitId]; config.title = @"꿀 피드"; BABFeedHandler *feedHandler = [[BABFeedHandler alloc] initWithConfig:config]; BABFeedViewController *feedViewController = [feedHandler populateViewController]; // navigation에 push [UnityGetGLViewController().navigationController pushViewController:feedViewController animated:YES]; } -(void) showInterstitialAdDialog: (NSString*) unitId { BABInterstitialAdHandler *interstitialAdHandler = [[BABInterstitialAdHandler alloc] initWithUnitId:unitId type:BABInterstitialDialog]; [interstitialAdHandler show:UnityGetGLViewController() withConfig:nil]; } -(void) showInterstitialAdBottomSheet: (NSString*) unitId { BABInterstitialAdHandler *interstitialAdHandler = [[BABInterstitialAdHandler alloc] initWithUnitId:unitId type:BABInterstitialBottomSheet]; [interstitialAdHandler show:UnityGetGLViewController() withConfig:nil]; } @end NSString* CreateNSString (const char* string) { if (string) return [NSString stringWithUTF8String: string]; else return [NSString stringWithUTF8String: ""]; } extern "C" { void ShowFeedIOS(const char* unitId) { [[BenefitPlugin getInstance] showFeed:CreateNSString(unitId)]; } void ShowInterstitialAdDialogIOS(const char* unitId) { [[BenefitPlugin getInstance] showInterstitialAdDialog:CreateNSString(unitId)]; } void ShowInterstitialAdBottomSheetIOS(const char* unitId) { [[BenefitPlugin getInstance] showInterstitialAdBottomSheet:CreateNSString(unitId)]; } } |
타입별 광고 사용하기
Interstitial 타입 광고 사용하기
Interstitial 광고를 호출하기 위해서는 unit id
가 필요합니다. Interstitial 타입에는 Android, iOS 각각 Dialog 와 BottomSheet 두 가지 종류가 있습니다.
Android
Dialog 호출하기
Code Block | ||
---|---|---|
| ||
private void ShowInterstitialAdDialogAOS(string unitId) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject factory = new AndroidJavaObject("com.buzzvil.buzzad.benefit.presentation.interstitial.InterstitialAdHandlerFactory"); AndroidJavaObject interstitialAdHandler = factory.Call<AndroidJavaObject>("create", unitId, new AndroidJavaClass("com.buzzvil.buzzad.benefit.presentation.interstitial.InterstitialAdHandler$Type").GetStatic<AndroidJavaObject>("Dialog")); interstitialAdHandler.Call("show", activity); } |
BottomSheet 호출하기
Code Block | ||
---|---|---|
| ||
private void ShowInterstitialAdBottomSheetAOS(string unitId) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject factory = new AndroidJavaObject("com.buzzvil.buzzad.benefit.presentation.interstitial.InterstitialAdHandlerFactory"); AndroidJavaObject interstitialAdHandler = factory.Call<AndroidJavaObject>("create", unitId, new AndroidJavaClass("com.buzzvil.buzzad.benefit.presentation.interstitial.InterstitialAdHandler$Type").GetStatic<AndroidJavaObject>("BottomSheet")); interstitialAdHandler.Call("show", activity); } |
iOS
Dialog & BottomSheet function 만들기
Code Block | ||
---|---|---|
| ||
#if UNITY_IOS [DllImport("__Internal")] internal static extern void ShowInterstitialAdDialogIOS(string unitId); [DllImport("__Internal")] internal static extern void ShowInterstitialAdBottomSheetIOS(string unitId); // 코드의 구현 내용은 initialization section의 BenefitPlugin.mm 에서 확인할 수 있습니다. |
Feed 타입 광고 사용하기
Feed 타입 광고를 호출할 경우, Feed 액티비티가 실행되면서 광고를 로드하게 됩니다. 유저에게 보여줄 광고가 없는 경우, 빈 화면이 보이게 됩니다.
추후 사용 가능한 광고가 있는지 여부를 확인하는 코드는 업데이트 할 예정입니다.
Android
Code Block | ||
---|---|---|
| ||
private void ShowFeedAOS(string unitId) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject feedHandler = new AndroidJavaObject("com.buzzvil.buzzad.benefit.presentation.feed.FeedHandler", unitId); feedHandler.Call("startFeedActivity", activity); } |
iOS
Code Block | ||
---|---|---|
| ||
#if UNITY_IOS [DllImport("__Internal")] internal static extern void ShowFeedIOS(string unitId); // 코드의 구현 내용은 initialization section의 BenefitPlugin.mm 에서 확인할 수 있습니다. |
Pop 타입 광고 사용하기
Pop은 Floating Button UI 입니다. 사용 가능한 환경은 Android 이며, iOS 에서는 사용할 수 없습니다.
Android
Code Block | ||
---|---|---|
| ||
private void ShowPopAOS(string unitId) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject buzzAdPop = new AndroidJavaObject("com.buzzvil.buzzad.benefit.presentation.pop.BuzzAdPop", unitId); buzzAdPop.Call("show", activity); } |