NAM (Naver Ad Manager)
사용방법
2) 초기 셋팅, 3)초기화 진행은 위 업체 링크에 들어가서 직접 설정하시는 것을 권장드립니다.
1) 설치
2) 초기 셋팅
iOS 9부터 도입 된 App Transport Security (ATS)는 앱이 HTTPS를 통해서만 네트워크 요청을 하도록 기본설정 되어있습니다. HTTP를 사용하는 광고파트너들의 광고동작를 허용하기 위해, Info.plist 파일에 아래내용을 추가합니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
3) 초기화
NAM SDK에 ATTFramework를 통해 서비스에서 광고 추적 여부를 구현 후, GFPAdManagerDelegate
를 통하여 Status를 SDK에 제공해줘야 합니다. 이에 아래 예시와 같이 초기화 API 및 Status를 제공해 주시기 바랍니다.
@import GFPSDK;
@interface AppDelegate() <APSSPSDKInitializeDelegate, GFPAdManagerDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
GFPAdConfiguration *configuration = [[GFPAdConfiguration alloc] init];
[GFPAdManager setupWithPublisherCd:@"NAM_Publisher_cd" target:self configuration:configuration completionHandler:^(GFPError * _Nullable error) {
NSLog(@"NAM Setup ERROR: %@", error);
}];
}
- (GFPATTAuthorizationStatus)attStatus {
if (@available(iOS 14.5, *)) {
return ATTrackingManager.trackingAuthorizationStatus;
} else {
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
return GFPATTAuthorizationStatusAuthorized;
}
return GFPATTAuthorizationStatusNotDetermined;
}
}
NAM SDK에 ATTFramework를 통해 서비스에서 광고 추적 여부를 구현 후, GFPAdManagerDelegate
를 통하여 Status를 SDK에 제공해줘야 합니다. 이에 아래 예시와 같이 초기화 API 및 Status를 제공해 주시기 바랍니다.
import GFPSDK
// 1. PublisherCd 이용, GFPAdConfiguration(광고 설정) 없이 초기화 하는 경우.
GFPAdManager.setup(withPublisherCd: "publisherCd" target:self) { (error : GFPError?) in
print("Setup Eror: \(String(describing: error?.description))")
}
// 2. PublisherCd 및 ServiceCd 이용, GFPAdConfiguration(광고 설정) 없이 초기화 하는 경우.
GFPAdManager.setup(withPublisherCd: nil, serviceCd: "serviceCd", target: self) { error in
print("Setup Eror: \(String(describing: error?.description))")
}
func attStatus() -> GFPATTAuthorizationStatus {
if #available(iOS 14.5, *) {
return ATTrackingManager.trackingAuthorizationStatus
} else {
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
return .authorized
}
return .notDetermined
}
Native Layout 설정
Adapter 내부에 들어있는 Xib 파일을 project에 꼭 넣어주세요.
스토리보드에 UIView 생성 후 Custom Class을 AdPopcornSSPNativeAd 설정
AdPopcornSSPNativeAd 변수 내부에 GfpNativeAdView, GfpNativeSimpleAdView를 포함할 수 있도록 adAMNativeSuperView 라는 UIView 를 생성, 추가해 줍니다. (중요!)
NAM 은 ViewController에 ui component 영역을 바로 생성하지 않고 xib 파일을 사용하여 view를 add합니다.
1) GFPNativeAdView
namNativeView를 AdPopcornNativeAd add해 주고 layout을 잡아 주어야 광고가 보입니다.
#import <AdPopcornSSP/AdPopcornSSPNativeAd.h>
#import "NAMAdapter.h"
- (void)viewDidLoad {
[super viewDidLoad];
// Size
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat xibHeight = (width * 185) / 360;
NSLog(@"width : %f, xibHeight : %f",width, xibHeight);
CGFloat roundXibHeight = round(xibHeight * 10 )/ 10;
NSLog(@"width : %f, height : %f",width, roundXibHeight);
// 일반형
GFPNativeAdView *namNativeAdView =
[[NSBundle mainBundle] loadNibNamed:@"GFPNativeAdView" owner:nil options:nil].firstObject;
namNativeAdView.frame = CGRectMake(0, 0, width, roundXibHeight);
apNAMNativeAdRenderer.namNativeAdView = namNativeAdView;
// 일반형을 담을 SuperView
apNAMNativeAdRenderer.namNativeSuperView = adNAMNativeSuperView;
[_adPopcornSSPNativeAd setNAMRenderer:apNAMNativeAdRenderer superView:_adNAMNativeSuperView]; // SuperView
}
private var namNativeView: GFPNativeAdView = GFPNativeAdView()
private var adNAMNativeSuperView: UIView = UIView()
override func viewDidLoad()
{
super.viewDidLoad()
// 일반형
namNativeAdView = Bundle.main.loadNibNamed("GFPNativeAdView",
owner: nil,
options: nil)?.first as? GFPNativeAdView
apNAMNativeAdRenderer.namNativeAdView = namNativeAdView
apNAMNativeAdRenderer.namNativeSuperView = adNAMNativeSuperView
adPopcornSSPNativeAd.setNAMRenderer(apNAMNativeAdRenderer, superView:adNAMNativeSuperView) // SuperView
}
NAM의 경우 AdPopcornSSP, FAN, FAN Native Banner와 다르게 xib파일을 이용하여 직접 View를 생성한 뒤, 해당 xib 파일을 읽어와 renderer에 전달해 주어야 합니다.
APNAMNativeAdRenderer
에 GFPNativeAdView와 superView를 세팅 후, setNAMRenderer:superView:
API를 통해 render와 adNAMNativeSuperView 를 sdk에 최종적으로 전달합니다.
(adNAMNativeSuperView 를 render 설정시 넘겨 주면 SDK내부 코드에서 광고에 맞게 nativeAd, NativeSimpIeAd 를 추가하여 제공해줍니다.)
2) GFPNativeSimpleAdView
#import <AdPopcornSSP/AdPopcornSSPNativeAd.h>
#import "NAMAdapter.h"
- (void)viewDidLoad {
[super viewDidLoad];
// Size
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat xibHeight = (width * 185) / 360;
NSLog(@"width : %f, xibHeight : %f",width, xibHeight);
CGFloat roundXibHeight = round(xibHeight * 10 )/ 10;
NSLog(@"width : %f, height : %f",width, roundXibHeight);
// 일반형
GFPNativeSimpleAdView *namNativeSimpleAdView =
[[NSBundle mainBundle] loadNibNamed:@"GFPNativeSimpleAdView" owner:nil options:nil].firstObject;
namNativeSimpleAdView.frame = CGRectMake(0, 0, width, roundXibHeight);
apNAMNativeAdRenderer.namNativeSimpleAdView = namNativeSimpleAdView;
// 일반형을 담을 SuperView
apNAMNativeAdRenderer.namNativeSuperView = adNAMNativeSuperView;
[_adPopcornSSPNativeAd setNAMRenderer:apNAMNativeAdRenderer superView:_adNAMNativeSuperView]; // SuperView
}
private var namNativeSimpleAdView: GFPNativeSimpleAdView = GFPNativeSimpleAdView()
private var adNAMNativeSuperView: UIView = UIView()
override func viewDidLoad()
{
super.viewDidLoad()
namNativeSimpleAdView = Bundle.main.loadNibNamed("GFPNativeSimpleAdView",
owner: nil,
options: nil)?.first as? GFPNativeSimpleAdView
apNAMNativeAdRenderer = APNAMNativeAdRenderer.init()
apNAMNativeAdRenderer.namNativeSimpleAdView = namNativeSimpleAdView
apNAMNativeAdRenderer.namNativeSuperView = adNAMNativeSuperView
adPopcornSSPNativeAd.setNAMRenderer(apNAMNativeAdRenderer, superView:adNAMNativeSuperView)
}
NAM의 경우 AdPopcornSSP, FAN, FAN Native Banner와 다르게 xib파일을 이용하여 직접 View를 생성한 뒤, 해당 xib 파일을 읽어와 renderer에 전달해 주어야 합니다.
APNAMNativeAdRenderer
에 GFPNativeAdView와 superView를 세팅 후, setNAMRenderer:superView:
API를 통해 render와 adNAMNativeSuperView 를 sdk에 최종적으로 전달합니다.
(adNAMNativeSuperView 를 render 설정시 넘겨 주면 SDK내부 코드에서 광고에 맞게 nativeAd, NativeSimpIeAd 를 추가하여 제공해줍니다.)
3) GFPNativeAdView + GFPNativeSimpleAdView
#import <AdPopcornSSP/AdPopcornSSPNativeAd.h>
#import "NAMAdapter.h"
- (void)viewDidLoad {
[super viewDidLoad];
// Size
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat xibHeight = (width * 185) / 360;
NSLog(@"width : %f, xibHeight : %f",width, xibHeight);
CGFloat roundXibHeight = round(xibHeight * 10 )/ 10;
NSLog(@"width : %f, height : %f",width, roundXibHeight);
// 심플형
GFPNativeSimpleAdView *namNativeSimpleAdView =
[[NSBundle mainBundle] loadNibNamed:@"GFPNativeSimpleAdView" owner:nil options:nil].firstObject;
namNativeSimpleAdView.frame = CGRectMake(0, 0, width, roundXibHeight);
APNAMNativeAdRenderer *apNAMNativeAdRenderer = [[APNAMNativeAdRenderer alloc] init];
apNAMNativeAdRenderer.namNativeSimpleAdView = namNativeSimpleAdView;
// 일반형
GFPNativeAdView *namNativeAdView =
[[NSBundle mainBundle] loadNibNamed:@"GFPNativeAdView" owner:nil options:nil].firstObject;
namNativeAdView.frame = CGRectMake(0, 0, width, roundXibHeight);
apNAMNativeAdRenderer.namNativeAdView = namNativeAdView;
// 심플형 + 일반형을 담을 SuperView
apNAMNativeAdRenderer.namNativeSuperView = adNAMNativeSuperView;
[_adPopcornSSPNativeAd setNAMRenderer:apNAMNativeAdRenderer superView:_adNAMNativeSuperView]; // SuperView
}
private var namSimpleNativeView: GFPNativeSimpleAdView = GFPNativeSimpleAdView()
private var namNativeView: GFPNativeAdView = GFPNativeAdView()
private var adNAMNativeSuperView: UIView = UIView()
override func viewDidLoad()
{
super.viewDidLoad()
// 심플형
namNativeSimpleAdView = Bundle.main.loadNibNamed("GFPNativeSimpleAdView",
owner: nil,
options: nil)?.first as? GFPNativeSimpleAdView
apNAMNativeAdRenderer = APNAMNativeAdRenderer.init()
apNAMNativeAdRenderer.namNativeSimpleAdView = namNativeSimpleAdView
// 일반형
namNativeAdView = Bundle.main.loadNibNamed("GFPNativeAdView",
owner: nil,
options: nil)?.first as? GFPNativeAdView
apNAMNativeAdRenderer.namNativeAdView = namNativeAdView
apNAMNativeAdRenderer.namNativeSuperView = adNAMNativeSuperView
adPopcornSSPNativeAd.setNAMRenderer(apNAMNativeAdRenderer, superView:adNAMNativeSuperView) // SuperView
}
NAM의 경우 AdPopcornSSP, FAN, FAN Native Banner와 다르게 xib파일을 이용하여 직접 View를 생성한 뒤, 해당 xib 파일을 읽어와 renderer에 전달해 주어야 합니다.
APNAMNativeAdRenderer
에 GFPNativeAdView와 superView를 세팅 후, setNAMRenderer:superView:
API를 통해 render와 adNAMNativeSuperView 를 sdk에 최종적으로 전달합니다.
(adNAMNativeSuperView 를 render 설정시 넘겨 주면 SDK내부 코드에서 광고에 맞게 nativeAd, NativeSimpIeAd 를 추가하여 제공해줍니다.)