Combined Ad
The NAM SDK provides a way to simultaneously receive banner, native, and native simple ads via GFPAdLoader.
Since multiple ad types need to be supported on a single placement, ad unit configuration is required — please discuss this with your GFP representative.
NAMSDK Import
Import the SDK module.
- Swift
- Objective-C
import GFPSDK
@import GFPSDK;
Add Dependency and Initialize
Please refer to the Banner Ad and Native Ad setup guides.
Write the View Controller
Create a view controller (MyViewController) and perform the following steps in the header file (MyViewController.h).
- Declare a
GFPAdLoader *adLoaderproperty in the view controller. - Implement the
GFPAdLoaderDelegateprotocol in the view controller.
GFPAdLoaderDelegate delivers events related to native ad loading.
- Declare a
GFPBannerView *bannerViewproperty in the view controller. - Implement the
GFPBannerViewDelegateprotocol in the view controller.
GFPBannerViewDelegate delivers events such as impression, click, and rendering errors of the loaded banner object.
- Declare a
GFPNativeAd *nativeAdproperty in the view controller. - Implement the
GFPNativeAdDelegateprotocol in the view controller.
GFPNativeAdDelegate delivers events such as impression, click, and rendering errors of the loaded native object.
- Declare a
GFPNativeSimpleAd *nativeSimpleAdproperty in the view controller. - Implement the
GFPNativeSimpleAdDelegateprotocol in the view controller.
GFPNativeSimpleAdDelegate delivers events such as impression, click, and rendering errors of the loaded native simple object.
- Swift
- Objective-C
// MyViewController.h
import GFPSDK
class MyViewController : UIViewController,
GFPAdLoaderDelegate,
GFPBannerViewDelegate,
GFPNativeAdDelegate,
GFPNativeSimpleAdDelegate {
private var adLoader : GFPAdLoader?
private var bannerView : GFPBannerView?
private var nativeAd : GFPNativeAd?
private var nativeAdView : GFPNativeAdView?
private var nativeSimpleAd : GFPNativeSimpleAd?
private var nativeSimpleAdView : GFPNativeSimpleAdView?
}
// MyViewController.h
@import GFPSDK;
@interface MyViewController : UIViewController <GFPAdLoaderDelegate,
GFPBannerViewDelegate,
GFPNativeAdDelegate,
GFPNativeSimpleAdDelegate>
@property (nonatomic) GFPAdLoader *adLoader;
@property (nonatomic) GFPBannerView *bannerView;
@property (nonatomic) GFPNativeAd *nativeAd;
@property (nonatomic) GFPNativeAdView *nativeAdView;
@property (nonatomic) GFPNativeSimpleAd *nativeSimpleAd;
@property (nonatomic) GFPNativeSimpleAdView *nativeSimpleAdView;
@end
Create GFPAdLoader and Request Ad
Create a GFPAdLoader instance in the viewDidLoad method of MyViewController.m and request an ad.
-
When creating a
GFPAdLoaderinstance, set user information in GFPAdParam along with your issued ad unit ID.GFPAdParamis used for targeting to improve ad effectiveness. -
Set the Options and Delegates on GFPAdLoader for each ad type you want to use.
- Swift
- Objective-C
override func viewDidLoad() {
super.viewDidLoad()
let adParam = GFPAdParam()
adParam.yearOfBirth = 1990
adParam.gender = .male
...
self.adLoader = GFPAdLoader(unitID: "UnitId", rootViewController: self, adParam: adParam)
//Banner option settings
let bannerOption = GFPAdBannerOptions()
bannerOption.layoutType = .fluidWidth
self.adLoader?.setBannerDelegate(self, bannerOptions: bannerOption)
//Native general settings
let nativeOption = GFPAdNativeOptions()
nativeOption.renderingSetting = ... // Rendering settings for the native general ad to be loaded
self.adLoader?.setNativeDelegate(self, nativeOptions: nativeOption)
//Native simple settings
let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.renderingSetting = ... // Rendering settings for the native general ad to be loaded
self.adLoader?.setNativeSimpleDelegate(self, nativeSimpleOptions: nativeSimpleOption)
self.adLoader?.delegate = self
self.adLoader?.requestTimeoutInterval = 60
self.adLoader?.loadAd()
}
- (void)viewDidLoad {
[super viewDidLoad];
GFPAdParam *adParam = [[GFPAdParam alloc] init];
adParam.yearOfBirth = 1990;
adParam.gender = GFPAdParamGenderTypeMale;
...
self.adLoader = [[GFPAdLoader alloc] initWithUnitID:@"UnitId"
rootViewController:self
adParam:adParam];
//Banner option settings
GFPAdBannerOptions *bannerOptions = [[GFPAdBannerOptions alloc] init];
bannerOptions.layoutType = GFPBannerViewLayoutTypeFluidWidth;
[self.adLoader setBannerDelegate:self bannerOptions:bannerOptions];
//Native general settings
GFPAdNativeOptions *nativeOptions = [[GFPAdNativeOptions alloc] init];
nativeOptions.renderingSetting = ...; // Rendering settings for the native general ad to be loaded
[self.adLoader setNativeDelegate:self nativeOptions:nativeOptions];
//Native simple settings
GFPAdNativeSimpleOptions *nativeSimpleOptions = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOptions.simpleAdRenderingSetting = ...; // Rendering settings for the native simple ad to be loaded
[self.adLoader setNativeSimpleDelegate:self nativeSimpleOptions:nativeSimpleOptions];
//Ad request
self.adLoader.delegate = self;
self.adLoader.requestTimeoutInterval = 60;
[self.adLoader loadAd];
}
GFPAdLoaderDelegate
Combined ads receive Delegate events associated with each ad type.
On Banner Ad Response Success
Since GFPBannerView is a regular view object (UIView), it can be included in the view hierarchy.
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader, didReceiveBannerAd bannerView: GFPBannerView) {
self.bannerView = bannerView
// Add to view hierarchy
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveBannerAd:(GFPBannerView *)bannerView {
self.bannerView = bannerView;
// Add to view hierarchy
}
On Native General Ad Response Success
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader, didReceiveNativeAd nativeAd: GFPNativeAd) {
self.nativeAd = nativeAd
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveNativeAd:(GFPNativeAd *)nativeAd {
self.nativeAd = nativeAd;
}
On Native Simple Ad Response Success
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader, didReceiveNativeSimpleAd nativeSimpleAd: GFPNativeSimpleAd) {
self.nativeSimpleAd = nativeSimpleAd
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveNativeSimpleAd:(GFPNativeSimpleAd *)nativeSimpleAd {
self.nativeSimpleAd = nativeSimpleAd;
}
On Ad Response Failure
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader, didFailWithError error: GFPError, responseInfo: GFPLoadResponseInfo?) {
...
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didFailWithError:(GFPError *)error responseInfo:(GFPLoadResponseInfo *)responseInfo {
...
}
Event Reception and Rendering Guide After GFPAdLoader
- For subsequent rendering and operations, please refer to the guide for each ad type.
Retrieving Ad Metadata
For banner, native, and native simple ads, ad information can be checked when events occur, but only when provided by the server. This information is delivered on load success, when an ad impression occurs, and when a click event occurs.
On Load Success
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader, didReceiveNativeAd nativeAd: GFPNativeAd) {
if let adMetaData = nativeAd.adMetaData {
let adMetaDataMessage = String(format: "Native Ad Context (loaded) %@", adMetaData.adContext)
print(adMetaDataMessage)
}
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveNativeAd:(GFPNativeAd *)nativeAd {
...
if (nativeAd.adMetaData != nil) {
NSString *adMetaDataMessage = [NSString stringWithFormat:@"Native Ad Context (loaded) %@", nativeAd.adMetaData.adContext];
NSLOG(@"%@", adMetaDataMessage);
}
}
On Ad Impression
- Swift
- Objective-C
func bannerAdWasSeen(_ bannerView: GFPBannerView) {
...
if let adMetaData = bannerView.adMetaData {
let adMetaDataMessage = String(format: "Banner Ad Context (seen) %@", adMetaData.adContext)
print(adMetaDataMessage)
}
}
- (void)bannerAdWasSeen:(GFPBannerView *)bannerView {
...
if (bannerView.adMetaData != nil) {
NSString *adMetaDataMessage = [NSString stringWithFormat:@"Banner Ad Context (seen) %@", bannerView.adMetaData.adContext];
NSLOG(@"%@", adMetaDataMessage);
}
}
On Click Event
- Swift
- Objective-C
func nativeSimpleAdWasClicked(_ nativeSimpleAd: GFPNativeSimpleAd) {
if let adContext = nativeSimpleAd.adMetaData?.adContext {
let adMetaDataMessage = String(format: "Native Simple Ad Context (clicked) %@", adContext)
print(adMetaDataMessage)
}
}
- (void)nativeSimpleAdWasClicked:(GFPNativeSimpleAd *)nativeSimpleAd {
if (nativeSimpleAd.adMetaData.adContext != nil) {
NSString *adMetaDataMessage = [NSString stringWithFormat:@"Native Simple Ad Context (clicked) %@", nativeSimpleAd.adMetaData.adContext];
NSLOG(@"%@", adMetaDataMessage);
}
}
Checking Slot Index of Native Ads
- Swift
- Objective-C
func nativeAdWasClicked(_ nativeAd: GFPNativeAd) {
if let slotIndex = nativeAd.adMetaData?.slotIndex, slotIndex.intValue >= 0 {
let slotIndexMessage = String(format: "Native Ad Slot Index (clicked) %ld", slotIndex.intValue)
print(slotIndexMessage)
}
}
For carousel-type native ads, you can check the index number of the slot when a slot click event occurs.
- (void)nativeAdWasClicked:(GFPNativeAd *)nativeAd {
if (nativeAd.adMetaData.slotIndex != nil && nativeAd.adMetaData.slotIndex >= 0) {
NSString *slotIndexMessage = [NSString stringWithFormat:@"Native Ad Slot Index (clicked) %ld", [nativeAd.adMetaData.slotIndex longValue]];
NSLOG(@"%@", slotIndexMessage);
}
}