맞춤 이벤트를 사용하면 AdMob 미디에이션을 사용하는 게시자가 지원되는 광고 네트워크에 속하지 않은 서드 파티 광고 네트워크에 대해 폭포식 구조 미디에이션을 추가할 수 있습니다. 이 가이드에서는 Unity 프로젝트에서 Android 및 iOS용으로 빌드된 기존 맞춤 이벤트를 사용하는 방법을 설명합니다.
기본 요건
시작하기를 완료합니다. Unity 앱에 Google 모바일 광고 Unity 플러그인이 있어야 합니다.
Android 및 iOS용으로 빌드된 맞춤 이벤트 어댑터가 있어야 합니다. 맞춤 이벤트 어댑터를 만드는 방법은 Android 및 iOS 맞춤 이벤트 가이드를 참고하세요.
맞춤 이벤트 정의
맞춤 이벤트가 미디에이션에 참여하려면 AdMob 웹 인터페이스에서 맞춤 이벤트를 정의해야 합니다. Android 미디에이션 그룹과 iOS 미디에이션 그룹 모두에 맞춤 이벤트를 추가합니다.
다음 스크린샷은 맞춤 이벤트 설정 샘플입니다.
매개변수 작성 방법 | |
---|---|
클래스 이름 (iOS) |
iOS의 경우 맞춤 이벤트를 구현하는 클래스 이름을 입력합니다. 클래스가 Swift로 구현된 경우 클래스 이름 앞에 앱 / 프레임워크 모듈의 이름을 추가해야 합니다 (예: 프로젝트에 대상이 여러 개 있거나 프로젝트 이름이 대상 이름과 다른 경우 대상 이름이 필요합니다. 대상 이름은 |
클래스 이름 (Android) | Android의 경우 Class Name 으로 제공하는 값이 Android의 정규화된 클래스 이름 (예: com.google.ads.mediation.sample.customevent.SampleCustomEvent )이어야 합니다.
|
라벨 | 이벤트의 고유한 이름을 입력합니다. |
매개변수 | 문자열 인수를 맞춤 이벤트에 전달하려는 경우(예: 광고 단위 ID) |
맞춤 이벤트 라이브러리 가져오기
맞춤 이벤트가 제대로 작동하려면 추가 라이브러리를 포함해야 할 수 있습니다. 예를 들어 다음 라이브러리를 포함해야 할 수 있습니다.
- Android용 서드 파티 SDK
- Android용 서드 파티 맞춤 이벤트
- iOS용 서드 파티 광고 SDK
- iOS용 서드 파티 맞춤 이벤트
라이브러리 유형
다음과 같은 다양한 방법으로 Android 또는 iOS 코드를 Unity 프로젝트로 가져올 수 있습니다.
- Unity용 외부 종속 항목 관리자를 사용하여 사전 빌드된 Android 또는 iOS 아티팩트 가져오기
- AAR 플러그인 및 Android 라이브러리 가져오기
- Java 및 Kotlin 소스 파일 가져오기
- iOS 소스 파일 및 정적 라이브러리 가져오기
사용하는 라이브러리의 패키징 방법에 따라 라이브러리마다 다른 가져오기 전략이 필요할 수 있습니다. 각 옵션에 대해서는 나중에 자세히 설명합니다.
(권장) 사전 빌드된 Android 또는 iOS 아티팩트 가져오기
Unity용 외부 종속 항목 관리자를 사용하여 Maven 또는 CocoaPods에서 사전 빌드된 아티팩트를 가져옵니다. 이 플러그인은 GoogleMobileAds 플러그인과 함께 포함되어 있습니다.
기존 아티팩트를 가져오려면 구성 파일을 만들어 가져오기를 정의합니다. 파일 이름과 경로에는 다음 요구사항이 적용됩니다.
- 파일이
/Editor/
폴더에 있어야 합니다. - 파일 이름은
Dependencies.xml
로 끝나야 합니다.
예를 들어 이름이 AdPub
인 가상의 광고 네트워크에 사용할 맞춤 이벤트 어댑터를 가져오려면 다음과 같은 파일을 만듭니다.
Assets/AdPub/Editor/AdPubDependencies.xml
그런 다음 AdPubDependencies.xml
파일 내에 종속 항목을 정의합니다. 가져오기 구성 규칙은 Unity용 외부 종속 항목 관리자 시작에서 확인할 수 있습니다. 다음 코드 스니펫에는 가상의 'AdPub' 광고 네트워크를 위한 Android 및 iOS SDK와 맞춤 이벤트 라이브러리가 포함되어 있습니다.
Assets/AdPub/Editor/AdPubDependencies.xml
<dependencies>
<androidPackages>
<androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
<androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
<repositories>
<repository>https://repo.maven.apache.org/maven2/</repository>
<repository>https://dl.google.com/dl/android/maven2/</repository>
</repositories>
</androidPackage>
</androidPackages>
<iosPods>
<iosPod name="AdPubSDK" version="1.0" />
<iosPod name="AdPubCustomEvent" version="1.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>
</iosPod>
</iosPods>
</dependencies>
맞춤 이벤트 아티팩트의 필수 광고 네트워크 SDK에 이미 종속 항목이 있는 경우 SDK 종속 항목을 명시적으로 정의하지 않아도 됩니다. 예
외부 종속 항목 관리자는 자동으로 구성 변경사항을 모니터링하고 종속 항목을 확인합니다. 다음 메뉴 명령어를 사용하여 수동으로 확인해야 할 수도 있습니다.
Assets > External Dependency Manager > Android Resolver > Force Resolve
AAR 플러그인 및 Android 라이브러리 가져오기
Unity는 Android 라이브러리 프로젝트뿐만 아니라 *.aar
파일 가져오기도 지원합니다. Android 맞춤 이벤트가 이 방식으로 패키징된 경우 Unity 프로젝트에 이러한 파일을 포함하는 방법에 관한 안내는 AAR 플러그인 및 Android 라이브러리를 참고하세요.
Java 및 Kotlin 소스 파일 가져오기
Unity 2018.2 이상부터는 Android 맞춤 이벤트 코드가 컴파일되지 않은 *.java
또는 *.kt
파일로 구성된 경우 Java 또는 Kotlin 소스 파일을 플러그인으로 사용할 수 있습니다.
iOS 소스 파일 및 정적 라이브러리 가져오기
Unity는 *.framework
아티팩트, *.h
, *.m
소스 파일을 지원합니다. iOS 아티팩트 및 소스 파일 가져오기는 Unity 기본 플러그인 가이드에 설명되어 있습니다.
광고 검사기로 맞춤 이벤트 테스트하기
광고 검사기를 사용하면 맞춤 이벤트를 애플리케이션으로 올바르게 가져왔는지를 테스트할 수 있습니다. 광고 검사기는 최소한의 코드만 사용하여 동작으로 또는 프로그래매틱 방식으로 열 수 있습니다.
(선택사항) C# 스크립트에서 서드 파티 SDK 네이티브 메서드 호출하기
서드 파티 광고 네트워크 SDK에 Android 또는 iOS 메서드를 직접 호출해야 하는 특별한 요구사항이 있을 수 있습니다. 이러한 메서드를 직접 호출하는 프로세스는 다음과 같습니다.
- 플랫폼 클라이언트의 공통 인터페이스 정의
- 지원되지 않는 플랫폼에 대한 기본 클라이언트 구현
- Android 메서드 호출을 위한 Android 클라이언트 구현
- iOS 메서드 호출을 위한 iOS 클라이언트 구현
- iOS와 Android 클라이언트 간 조건부 전환을 위한 클라이언트 팩토리 구현
- 서드 파티 광고 네트워크 SDK 기능 전체에 액세스하기 위한 API 정의
다음 섹션에서는 Android 및 iOS의 메서드를 호출할 수 있는 C# API에서 'AdPub'이라는 가상의 광고 네트워크에 이러한 단계가 구현되는 방식을 보여줍니다.
package com.adpub.android;
public class AdPubSdk
{
public static void setHasUserConsent(boolean hasUserConsent);
}
@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end
플랫폼 클라이언트의 공통 인터페이스 정의
기본 Android 및 iOS API를 나타내는 메서드로 IAdPubClient
인터페이스를 만듭니다.
Assets/AdPub/Common/IAdPubClient.cs
namespace AdPub.Common
{
public interface IAdPubClient
{
///<summary>
/// Sets a flag indicating if the app has user consent for advertisement.
///</summary>
void SetHasUserConsent(bool hasUserConsent);
}
}
지원되지 않는 플랫폼에 대한 기본 클라이언트 정의
메서드 이름을 기록하기만 하는 IAdPubClient
인터페이스를 구현하는 DefaultClient
클래스를 만듭니다. 이 구현은 Unity 편집기와 Android 또는 iOS를 제외한 모든 플랫폼에 사용됩니다.
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
iOS 플랫폼 클라이언트 구현
iOS에서 IAdPubClient
인터페이스를 구현하는 iOSAdPubClient
클래스를 만듭니다. 이 구현은 InteropServices를 사용하여 iOS AdPubSdk
클래스의 setHasUserConsent()
메서드를 호출합니다.
Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS
// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class iOSAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
GADUAdPubSetHasUserConsent(hasUserConsent);
}
[DllImport("__Internal")]
internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
}
}
#endif
다음으로, 위에서 정의한 GADUAdPubSetHasUserConsent()
메서드를 구현합니다. C
메서드 GADUAdPubSetHasUserConsent()
로 AdPubClientBridge.m
을 만들어 Unity의 메서드 호출을 처리하고 AdPubSDK
를 호출합니다.
AdPubClientBridge
는 iOS 소스 파일이며 Unity 기본 플러그인 가이드에 설명된 대로 Plugins/iOS
폴더 내에 있어야 합니다.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Android 플랫폼 클라이언트 구현
Android에서 IAdPubClient
인터페이스를 구현하는 AndroidAdPubCient
클래스를 만듭니다. 이 구현은 Android Java 도우미 클래스를 사용하여 Android 정적 메서드 setHasUserConsent()
를 호출합니다.
Android Java 도우미 클래스는 Android 런타임 중에만 사용할 수 있으므로 UNITY_ANDROID
컴파일러 지시문을 사용하여 코드 스니펫과 같이 클래스를 래핑할 때 컴파일 오류를 예방할 수 있습니다. 또는 Unity 2017.4 이상에서 어셈블리 정의를 사용하여 이 문제를 해결할 수 있습니다.
Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID
// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class AndroidAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
// Make a reference to the com.adpub.AdPubSDK.
AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");
// Call the native setHasUserConsent method of com.adpub.AdPubSDK.
adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
}
}
}
#endif
팩토리 메서드를 만들어 올바른 클라이언트 구현 반환
이제 모든 플랫폼에 맞는 클라이언트를 구현했으므로 AdPubClientFactory
클래스를 만들어 런타임 플랫폼에 따라 IAdPubClient
인터페이스의 올바른 구현을 반환합니다. 이 클래스는 컴파일러 지시문을 사용하여 올바른 IAdPubClient
클라이언트를 반환합니다.
Assets/AdPub/Common/AdPubClientFactory.cs
namespace AdPub.Common
{
public class AdPubClientFactory
{
// Return the correct platform client.
public static IAdPubClient GetClient()
{
#if !UNITY_EDITOR && UNITY_ANDROID
return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
// Returned for the Unity Editor and unsupported platforms.
return new DefaultClient();
#endif
}
}
}
각 인터페이스 메서드의 공개 API 정의
IAdPubClient
인터페이스에 각 클라이언트 메서드에 대한 메서드 호출이 있는 AdPubApi
클래스를 만듭니다. 이 클래스는 AdPubClientFactory
를 사용하여 IAdPubClient
의 인스턴스를 가져오고 기본 SDK 기능을 위해 이 클라이언트를 호출합니다.
Assets/AdPub/AdPubApi.cs
using AdPub.Common;
namespace AdPub
{
public class AdPubApi
{
private static readonly IAdPubClient client = GetAdPubClient();
// Returns the correct client for the current runtime platform.
private static IAdPubClient GetAdPubClient()
{
return AdPubClientFactory.GetClient();
}
// Sets the user consent using the underlying SDK functionality.
public static void SetHasUserConsent(bool hasUserConsent)
{
client.SetHasUserConsent(hasUserConsent);
}
}
}
새로 정의한 API 호출
위에서 정의한 API를 호출하는 방법은 다음과 같습니다.
Assets/Scripts/AdPubController.cs
using UnityEngine;
using AdPub;
public class AdPubController : MonoBehaviour
{
// TODO: Get consent from the user and update this userConsent field.
public bool userConsent;
// Called on startup of the GameObject it's assigned to.
public void Start()
{
// Pass the user consent to AdPub.
AdPubApi.SetHasUserConsent(userConsent);
}
}
서드 파티 광고 네트워크 어댑터의 추가 예시
iOS 및 Android 메서드 호출을 래핑하는 C# API를 구현하는 서드 파티 미디에이션 어댑터의 추가 예를 보려면 Google 모바일 광고 Unity 플러그인 GitHub 저장소를 방문하세요.