Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

본 연동 가이드는 BuzzAd-Benefit SDK를 Unity에서 간단하게 연동하기 위해 작성되었습니다. Native Ad를 제외한 다른 지면을 간단하게 연동 할 수 있으며, 현재는 커스터마이즈를 제외한 기본적인 연동 요소를 제공합니다.

Index

Installation


Android - gradle 을 사용하여 SDK 연동

Case 1) Unity에서 Asset/Plugins/Android/mainTemplate.gradle 파일을 생성합니다.

이미 다른 .gradle을 사용하고 있다면, Case 2)를 적용해야 합니다.

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를 추가해 줍니다.

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을 생성합니다.

# 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 Id

  • userId : 매체사 서비스 유저를 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

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)

#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 호출하기

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 호출하기

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 만들기

#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

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

#if UNITY_IOS
    [DllImport("__Internal")]
    internal static extern void ShowFeedIOS(string unitId);
// 코드의 구현 내용은 initialization section의 BenefitPlugin.mm 에서 확인할 수 있습니다.

Pop 타입 광고 사용하기

Pop은 Floating Button UI 입니다. 사용 가능한 환경은 Android 이며, iOS 에서는 사용할 수 없습니다.

Android

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);
}

 

  • No labels