顯示廣告
隱藏 ✕
看板 Knuckles_note
作者 Knuckles (站長 那克斯)
標題 [Xcode] 加入 Vpon 的 iOS APP 廣告
時間 2015-04-06 Mon. 20:54:53


使用 Xcode 在 iOS APP 中加入 Vpon 廣告


申請 Vpon 廣告的版位ID

在 Vpon 網頁 http://tw.pub.vpon.com/ 註冊帳號後登入

新增一個應用程式,填入 APP 的資料
[圖]


新增一個版位
[圖]


記下自己的版位ID
[圖]



在 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
[圖]


下載 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 的專案裡
[圖]


在專案設定的 Build Phases 按✚ 加入這一堆 frameworks
[圖]

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
[圖]


在 Build Phases 將 AdSupport.framework 設為 Optional (這個不設好像也沒關係)


直接放 Vpon 廣告的方法

修改 ViewController.h

上面加上
#import "VpadnBanner.h"
#import "VpadnInterstitial.h"

在 @interface ViewController() 後面加上 <VpadnBannerDelegate, VpadnInterstitialDelegate>

在 @implementation ViewController 下一行加上
{
    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廣告

加上這些成員函式:
// 請新增此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開屏廣告頁面");
}


不過直接放 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 中介服務
[圖]


素材設定這邊
Select network 選擇 Custom Event
Parameter 輸入 Vpon 的版位ID
Class Name 輸入 VpadnAdmobCustomAd (後面會在 Xcode 裡加入這個 Class)
[圖]


在 Xcode 新增一個 Class: VpadnAdmobCustomAd
subclass: NSObject
[圖]


修改 VpadnAdmobCustomAd.h 為
#import <Foundation/Foundation.h>
@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


要和 Admob 輪播的話
可以在 DFP 的廣告素材設定這邊,在廣告聯播網再加上一個 Admob Network
Ad unit ID 輸入 Admob 的廣告單元編號
[圖]

這樣當 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 版位編輯中介服務
[圖]


新增廣告聯播網
[圖]


新增自訂事件
Class Name 輸入 VpadnAdmobCustomAd
Label 輸入自訂名稱
Parameter 輸入 Vpon 的版位ID
[圖]


可設定 Vpon 的千次曝光出價和國家設定
讓 Admob 可自動選擇要用哪個廣告
[圖]


想要優先放送 vpon 廣告,Vpon沒有廣告時再放 Admob 的話
要取消勾選「最佳化 Admob 聯播網」
然後設定 Vpon 的千次曝光高於 Admob 即可,像這樣
[圖]




--
※ 作者: Knuckles 時間: 2015-04-06 20:54:53
※ 編輯: Knuckles 時間: 2015-10-19 05:30:27
※ 看板: KnucklesNote 文章推薦值: 1 目前人氣: 0 累積人氣: 1355 
分享網址: 複製 已複製
( ̄︶ ̄)b layzer 說讚!
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇