看板 Knuckles_note
作者 標題 [Xcode] 加入 Vpon 的 iOS APP 廣告
時間 2015-04-06 Mon. 20:54:53
使用 Xcode 在 iOS APP 中加入 Vpon 廣告
申請 Vpon 廣告的版位ID
在 Vpon 網頁 http://tw.pub.vpon.com/ 註冊帳號後登入
新增一個應用程式,填入 APP 的資料
![[圖]](http://i.imgur.com/PecY8Ys.png)
新增一個版位
![[圖]](http://i.imgur.com/dcLQsYm.png)
記下自己的版位ID
![[圖]](http://i.imgur.com/UAeg1hf.png)
在 Xcode 加入 Vpon SDK
參考 http://wiki.vpon.com/index.php?title=SDK4_iOS_Traditional_Banners_I
在這邊下載 Vpon iOS SDK
http://wiki.vpon.com/index.php?title=IOS_Download
![[圖]](http://i.imgur.com/wvk0jQK.png)
下載 SDK 4.2.12 for 64 bit: 64bit_vpadn_4212_libAdOn_692fe4f.a
和 Sample Code: BannerInterstitialSample_42x.zip
將 BannerInterstitialSample_42x.zip 解壓縮後,將裡面的兩個檔:
VpadnBanner.h 與 VpadnInterstitial.h
以及 64bit_vpadn_4212_libAdOn_692fe4f.a 加進 Xcode 的專案裡
![[圖]](http://i.imgur.com/0oNycGa.png)
在專案設定的 Build Phases 按✚ 加入這一堆 frameworks
![[圖]](http://i.imgur.com/p2ghfkc.png)
AdSupport
AssetsLibrary
AudioToolbox
AVFoundation
CoreFoundation
CoreGraphics
CoreLocation
CoreMedia
CoreMotion
CoreTelephony
EventKit
Foundation
MediaPlayer
MessageUI
MobileCoreServices
QuartzCore
Security
StoreKit
SystemConfiguration
UIKit
在專案設定的 Build Settings 點 All
在 Other Linker Flags 加上 -all_load 與 -Obj-C
![[圖]](http://i.imgur.com/JKJwcDE.png)
在 Build Phases 將 AdSupport.framework 設為 Optional (這個不設好像也沒關係)
直接放 Vpon 廣告的方法
修改 ViewController.h
上面加上
#import "VpadnBanner.h"
#import "VpadnInterstitial.h"
#import "VpadnInterstitial.h"
在 @interface ViewController() 後面加上 <VpadnBannerDelegate, VpadnInterstitialDelegate>
在 @implementation ViewController 下一行加上
{
VpadnBanner* vpadnAd; // 宣告使用VpadnBanner廣告
VpadnInterstitial* vpadnInterstitial; // 宣告使用Vpadn插頁廣告
}
VpadnBanner* vpadnAd; // 宣告使用VpadnBanner廣告
VpadnInterstitial* vpadnInterstitial; // 宣告使用Vpadn插頁廣告
}
修改 ViewController.m
在 - viewDidLoad 裡加上
BOOL bStatusBarHide = [UIApplication sharedApplication].statusBarHidden;
float screenHeight = [[UIScreen mainScreen] bounds].size.height;
if(!bStatusBarHide)
screenHeight -= 20;
// 設定廣告位置
CGPoint origin = CGPointMake(0.0,screenHeight - CGSizeFromVpadnAdSize(VpadnAdSizeSmartBannerPortrait).height);
vpadnAd = [[VpadnBanner alloc] initWithAdSize:VpadnAdSizeSmartBannerPortrait origin:origin]; // 初始化Banner物件
vpadnAd.strBannerId = @""; // 填入您的版位ID
vpadnAd.delegate = self; // 設定delegate接收protocol回傳訊息
vpadnAd.platform = @"TW"; // 台灣地區請填TW 大陸則填CN
[vpadnAd setAdAutoRefresh:YES]; //如果為mediation則set NO
[vpadnAd setRootViewController:self]; //請將window的rootViewController設定在此 以便廣告順利執行
[self.view addSubview:[vpadnAd getVpadnAdView]]; // 將VpadnBanner的View加入此ViewController中
[vpadnAd startGetAd:[self getTestIdentifiers]]; // 開始抓取Banner廣告
float screenHeight = [[UIScreen mainScreen] bounds].size.height;
if(!bStatusBarHide)
screenHeight -= 20;
// 設定廣告位置
CGPoint origin = CGPointMake(0.0,screenHeight - CGSizeFromVpadnAdSize(VpadnAdSizeSmartBannerPortrait).height);
vpadnAd = [[VpadnBanner alloc] initWithAdSize:VpadnAdSizeSmartBannerPortrait origin:origin]; // 初始化Banner物件
vpadnAd.strBannerId = @""; // 填入您的版位ID
vpadnAd.delegate = self; // 設定delegate接收protocol回傳訊息
vpadnAd.platform = @"TW"; // 台灣地區請填TW 大陸則填CN
[vpadnAd setAdAutoRefresh:YES]; //如果為mediation則set NO
[vpadnAd setRootViewController:self]; //請將window的rootViewController設定在此 以便廣告順利執行
[self.view addSubview:[vpadnAd getVpadnAdView]]; // 將VpadnBanner的View加入此ViewController中
[vpadnAd startGetAd:[self getTestIdentifiers]]; // 開始抓取Banner廣告
加上這些成員函式:
// 請新增此function到您的程式內 如果為測試用 則在下方填入UUID,即可看到測試廣告。
-(NSArray*)getTestIdentifiers
{
return [NSArray arrayWithObjects:
// add your test UUID
nil];
}
#pragma mark VpadnAdDelegate method 接一般Banner廣告就需要新增
- (void)onVpadnAdReceived:(UIView *)bannerView{
NSLog(@"廣告抓取成功");
}
- (void)onVpadnAdFailed:(UIView *)bannerView didFailToReceiveAdWithError:(NSError *)error{
NSLog(@"廣告抓取失敗");
}
- (void)onVpadnPresent:(UIView *)bannerView{
NSLog(@"開啟vpadn廣告頁面 %@",bannerView);
}
- (void)onVpadnDismiss:(UIView *)bannerView{
NSLog(@"關閉vpadn廣告頁面 %@",bannerView);
}
- (void)onVpadnLeaveApplication:(UIView *)bannerView{
NSLog(@"離開publisher application");
}
#pragma mark VpadnInterstitial Delegate 有接Interstitial的廣告才需要新增
- (void)onVpadnInterstitialAdReceived:(UIView *)bannerView{
NSLog(@"插屏廣告抓取成功");
// 顯示插屏廣告
[vpadnInterstitial show];
}
- (void)onVpadnInterstitialAdFailed:(UIView *)bannerView{
NSLog(@"插屏廣告抓取失敗");
}
- (void)onVpadnInterstitialAdDismiss:(UIView *)bannerView{
NSLog(@"關閉插屏廣告頁面 %@",bannerView);
}
#pragma mark 通知關閉vpadn開屏廣告
- (void)onVpadnSplashAdDismiss{
NSLog(@"關閉vpadn開屏廣告頁面");
}
-(NSArray*)getTestIdentifiers
{
return [NSArray arrayWithObjects:
// add your test UUID
nil];
}
#pragma mark VpadnAdDelegate method 接一般Banner廣告就需要新增
- (void)onVpadnAdReceived:(UIView *)bannerView{
NSLog(@"廣告抓取成功");
}
- (void)onVpadnAdFailed:(UIView *)bannerView didFailToReceiveAdWithError:(NSError *)error{
NSLog(@"廣告抓取失敗");
}
- (void)onVpadnPresent:(UIView *)bannerView{
NSLog(@"開啟vpadn廣告頁面 %@",bannerView);
}
- (void)onVpadnDismiss:(UIView *)bannerView{
NSLog(@"關閉vpadn廣告頁面 %@",bannerView);
}
- (void)onVpadnLeaveApplication:(UIView *)bannerView{
NSLog(@"離開publisher application");
}
#pragma mark VpadnInterstitial Delegate 有接Interstitial的廣告才需要新增
- (void)onVpadnInterstitialAdReceived:(UIView *)bannerView{
NSLog(@"插屏廣告抓取成功");
// 顯示插屏廣告
[vpadnInterstitial show];
}
- (void)onVpadnInterstitialAdFailed:(UIView *)bannerView{
NSLog(@"插屏廣告抓取失敗");
}
- (void)onVpadnInterstitialAdDismiss:(UIView *)bannerView{
NSLog(@"關閉插屏廣告頁面 %@",bannerView);
}
#pragma mark 通知關閉vpadn開屏廣告
- (void)onVpadnSplashAdDismiss{
NSLog(@"關閉vpadn開屏廣告頁面");
}
不過直接放 Vpon 時要是沒有廣告時就會空著
要用下面的方法和 Admob 輪播比較好
使用 DFP 放送 Vpon 廣告
如果要用 DFP 來放 Vpon 廣告的話
一樣要在 Xcode 加入 Vpon 的 SDK
然後參考這篇 http://disp.cc/b/11-8iKo
在 Xcode 加入 Google Mobile Ads SDK
在 -viewDidLoad 用 DFP 的廣告單元編號來放送廣告
在 DFP 的委刊項,改為新增一個聯播網廣告
參考: http://wiki.vpon.com/index.php?title=DFP_Traditional_Banner_Ads-iOS
廣告素材選擇用 SDK 中介服務
![[圖]](http://i.imgur.com/XuAVuZn.png)
素材設定這邊
Select network 選擇 Custom Event
Parameter 輸入 Vpon 的版位ID
Class Name 輸入 VpadnAdmobCustomAd (後面會在 Xcode 裡加入這個 Class)
![[圖]](http://i.imgur.com/nqIM1mI.png)
在 Xcode 新增一個 Class: VpadnAdmobCustomAd
subclass: NSObject
![[圖]](http://i.imgur.com/c1Vh4As.png)
修改 VpadnAdmobCustomAd.h 為
#import <Foundation/Foundation.h>
@import GoogleMobileAds;
#import "VpadnBanner.h"
@interface VpadnAdmobCustomAd : NSObject <GADCustomEventBanner,VpadnBannerDelegate>
{
VpadnBanner* vpadnBannerAd;
}
@property (nonatomic, retain) VpadnBanner* vpadnBannerAd;
@end
@import GoogleMobileAds;
#import "VpadnBanner.h"
@interface VpadnAdmobCustomAd : NSObject <GADCustomEventBanner,VpadnBannerDelegate>
{
VpadnBanner* vpadnBannerAd;
}
@property (nonatomic, retain) VpadnBanner* vpadnBannerAd;
@end
修改 VpadnAdmobCustomAd.m 為
#import "VpadnAdmobCustomAd.h"
@implementation VpadnAdmobCustomAd
// Will be set by the AdMob SDK.
@synthesize delegate = _delegate;
@synthesize vpadnBannerAd = _vpadnBannerAd;
#pragma mark -
#pragma mark GADCustomEventBanner
- (void)requestBannerAd:(GADAdSize)adSize parameter:(NSString *)serverParameter label:(NSString *)serverLabel request:(GADCustomEventRequest *)request
{
NSLog(@"Vpadn Request");
UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
CGPoint origin =CGPointMake(0.0,0.0);
NSString* strSizeType = NSStringFromGADAdSize(adSize);
VpadnAdSize vpadnAdSize = VpadnAdSizeSmartBannerPortrait;
if([strSizeType isEqualToString:@"kGADAdSizeBanner"])
vpadnAdSize = VpadnAdSizeBanner;
else if([strSizeType isEqualToString:@"kGADAdSizeFullBanner"])
vpadnAdSize = VpadnAdSizeFullBanner;
else if([strSizeType isEqualToString:@"kGADAdSizeLeaderboard"])
vpadnAdSize = VpadnAdSizeLeaderboard;
else if([strSizeType isEqualToString:@"kGADAdSizeSmartBannerLandscape"])
vpadnAdSize = VpadnAdSizeSmartBannerLandscape;
else if([strSizeType isEqualToString:@"kGADAdSizeMediumRectangle"])
vpadnAdSize = VpadnAdSizeMediumRectangle;
if(_vpadnBannerAd != nil)
{
[_vpadnBannerAd setDelegate:nil];
_vpadnBannerAd = nil;
}
_vpadnBannerAd = [[VpadnBanner alloc] initWithAdSize:vpadnAdSize origin:origin];
_vpadnBannerAd.strBannerId = serverParameter;
_vpadnBannerAd.delegate = self;
_vpadnBannerAd.platform = @"TW";
[_vpadnBannerAd setAdAutoRefresh:NO];
[_vpadnBannerAd setRootViewController:window.rootViewController];
[_vpadnBannerAd startGetAd:[self getTestIdentifiers]];
}
- (void)onVpadnGetAd:(UIView *)bannerView
{
[bannerView removeFromSuperview];
[self.delegate customEventBanner:self didReceiveAd:bannerView];
}
#pragma mark 通知拉取廣告成功pre-fetch完成
- (void)onVpadnAdReceived:(UIView *)bannerView
{
NSLog(@"Vpadn Ad received");
}
#pragma mark 通知拉取廣告失敗
- (void)onVpadnAdFailed:(UIView *)bannerView didFailToReceiveAdWithError:(NSError *)error
{
[self.delegate customEventBanner:self didFailAd:error];
}
#pragma mark 通知開啟vpadn廣告頁面
- (void)onVpadnPresent:(UIView *)bannerView
{
[self.delegate customEventBannerWillPresentModal:self];
}
#pragma mark 通知關閉vpadn廣告頁面
- (void)onVpadnDismiss:(UIView *)bannerView
{
[self.delegate customEventBannerDidDismissModal:self];
}
#pragma mark 通知離開publisher application
- (void)onVpadnLeaveApplication:(UIView *)bannerView
{
[self.delegate customEventBannerWillLeaveApplication:self];
}
-(NSArray*)getTestIdentifiers
{
return [NSArray arrayWithObjects:
// add your test Id
nil];
}
@end
@implementation VpadnAdmobCustomAd
// Will be set by the AdMob SDK.
@synthesize delegate = _delegate;
@synthesize vpadnBannerAd = _vpadnBannerAd;
#pragma mark -
#pragma mark GADCustomEventBanner
- (void)requestBannerAd:(GADAdSize)adSize parameter:(NSString *)serverParameter label:(NSString *)serverLabel request:(GADCustomEventRequest *)request
{
NSLog(@"Vpadn Request");
UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
CGPoint origin =CGPointMake(0.0,0.0);
NSString* strSizeType = NSStringFromGADAdSize(adSize);
VpadnAdSize vpadnAdSize = VpadnAdSizeSmartBannerPortrait;
if([strSizeType isEqualToString:@"kGADAdSizeBanner"])
vpadnAdSize = VpadnAdSizeBanner;
else if([strSizeType isEqualToString:@"kGADAdSizeFullBanner"])
vpadnAdSize = VpadnAdSizeFullBanner;
else if([strSizeType isEqualToString:@"kGADAdSizeLeaderboard"])
vpadnAdSize = VpadnAdSizeLeaderboard;
else if([strSizeType isEqualToString:@"kGADAdSizeSmartBannerLandscape"])
vpadnAdSize = VpadnAdSizeSmartBannerLandscape;
else if([strSizeType isEqualToString:@"kGADAdSizeMediumRectangle"])
vpadnAdSize = VpadnAdSizeMediumRectangle;
if(_vpadnBannerAd != nil)
{
[_vpadnBannerAd setDelegate:nil];
_vpadnBannerAd = nil;
}
_vpadnBannerAd = [[VpadnBanner alloc] initWithAdSize:vpadnAdSize origin:origin];
_vpadnBannerAd.strBannerId = serverParameter;
_vpadnBannerAd.delegate = self;
_vpadnBannerAd.platform = @"TW";
[_vpadnBannerAd setAdAutoRefresh:NO];
[_vpadnBannerAd setRootViewController:window.rootViewController];
[_vpadnBannerAd startGetAd:[self getTestIdentifiers]];
}
- (void)onVpadnGetAd:(UIView *)bannerView
{
[bannerView removeFromSuperview];
[self.delegate customEventBanner:self didReceiveAd:bannerView];
}
#pragma mark 通知拉取廣告成功pre-fetch完成
- (void)onVpadnAdReceived:(UIView *)bannerView
{
NSLog(@"Vpadn Ad received");
}
#pragma mark 通知拉取廣告失敗
- (void)onVpadnAdFailed:(UIView *)bannerView didFailToReceiveAdWithError:(NSError *)error
{
[self.delegate customEventBanner:self didFailAd:error];
}
#pragma mark 通知開啟vpadn廣告頁面
- (void)onVpadnPresent:(UIView *)bannerView
{
[self.delegate customEventBannerWillPresentModal:self];
}
#pragma mark 通知關閉vpadn廣告頁面
- (void)onVpadnDismiss:(UIView *)bannerView
{
[self.delegate customEventBannerDidDismissModal:self];
}
#pragma mark 通知離開publisher application
- (void)onVpadnLeaveApplication:(UIView *)bannerView
{
[self.delegate customEventBannerWillLeaveApplication:self];
}
-(NSArray*)getTestIdentifiers
{
return [NSArray arrayWithObjects:
// add your test Id
nil];
}
@end
要和 Admob 輪播的話
可以在 DFP 的廣告素材設定這邊,在廣告聯播網再加上一個 Admob Network
Ad unit ID 輸入 Admob 的廣告單元編號
![[圖]](http://i.imgur.com/jGwwj3Q.png)
這樣當 Vpon 沒廣告時,還會有 Admob 的廣告,不會空著
如果是在 DFP 中有另外設定一個類型為 Admob 的委刊項的話
這樣只會出現 Admob 的廣告
如果想要優先放送 Vpon 廣告,Vpon沒廣告時才放 Admob 的話
要用下面這個方法
使用 Admob 來放送 Vpon 廣告
先參考這篇 http://disp.cc/b/11-8iKo 用 DFP 來放 Admob 廣告
可以在 -ViewDidLoad 裡用 DFP 的廣告單元編號來放
或是不用 DFP,直接用 Admob 的廣告單元編號就好
參考前面的內容加入 Vpon SDK
以及新增一個 Class: VpadnAdmobCustomAd
接著參考 http://wiki.vpon.com/index.php?title=SDK4_iOS_Traditional_Admob
在設定好的 Admob 版位編輯中介服務
![[圖]](http://i.imgur.com/kOywRBd.png)
新增廣告聯播網
![[圖]](http://i.imgur.com/NDjJJEY.png)
新增自訂事件
Class Name 輸入 VpadnAdmobCustomAd
Label 輸入自訂名稱
Parameter 輸入 Vpon 的版位ID
![[圖]](http://i.imgur.com/sdXfQ1S.png)
可設定 Vpon 的千次曝光出價和國家設定
讓 Admob 可自動選擇要用哪個廣告
![[圖]](http://i.imgur.com/VqUo5Bu.png)
想要優先放送 vpon 廣告,Vpon沒有廣告時再放 Admob 的話
要取消勾選「最佳化 Admob 聯播網」
然後設定 Vpon 的千次曝光高於 Admob 即可,像這樣
![[圖]](http://i.imgur.com/eggj1Uc.png)
--
※ 作者: Knuckles 時間: 2015-04-06 20:54:53
※ 編輯: Knuckles 時間: 2015-10-19 05:30:27
※ 看板: KnucklesNote 文章推薦值: 1 目前人氣: 0 累積人氣: 1355
回列表(←)
分享