1:如何創建XCODE庫就不說了,創建在其他廣告庫的同級目錄,文件結構也是壹樣,壹***就三個文件:
.pch
AdsApple.h
AdsApple.m
2:要加入到cocos2dx的PluginManager統壹管理,那麽我們這個新的類需要繼承InterfaceAds,並且鏈接iAd.framework.
3:快1點了,直接上代碼,完整註釋:
頭文件:
//
// AdsApple
// AdsApple
//
// Created by kevin on 14-5-2.
// Copyright (c) 2014年 kevin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "iAd/iAd.h"
#import "InterfaceAds.h"
// 廣告類型
typedef enum {
kTypeBanner = 1, // 廣告欄
kTypeFullScreen, // 全屏
} AppleType;
@interface AdsApple : NSObject <InterfaceAds, ADBannerViewDelegate>
{
}
@property BOOL debug;
@property bool bannerVisible;
@property int bannerPos;
@property (assign, nonatomic) ADBannerView* bannerView;
// 設置開發者信息
- (void) configDeveloperInfo: (NSMutableDictionary*) devInfo;
// 顯示廣告
- (void) showAds: (NSMutableDictionary*) info position:(int) pos;
// 隱藏廣告
- (void) hideAds: (NSMutableDictionary*) info;
// 位置獲取
- (void) queryPoints;
//
- (void) spendPoints: (int) points;
// 開關調試模式
- (void) setDebugMode: (BOOL) isDebugMode;
// 獲取SDK版本
- (NSString*) getSDKVersion;
// 獲取插件版本
- (NSString*) getPluginVersion;
@end
實現:
//
// AdsApple
// AdsApple
//
// Created by kevin on 14-5-2.
// Copyright (c) 2014年 kevin. All rights reserved.
//
#import "AdsApple.h"
#import "AdsWrapper.h"
#define OUTPUT_LOG(...) if (self.debug) NSLog(__VA_ARGS__);
#define OUT_POS CGPointMake(-1024, -1024)
@implementation AdsApple
@synthesize debug = __debug;
// 初始化
- (id)init
{
self = [super init];
if (self) {
}
return self;
}
// 釋放
- (void)dealloc
{
if( self.bannerView != nil ) {
[self.bannerView removeFromSuperview];
[self.bannerView release];
self.bannerView = nil;
}
[super dealloc];
}
#pragma mark InterfaceAds impl
// 設置開發者信息
- (void) configDeveloperInfo: (NSMutableDictionary*) devInfo
{
}
// 顯示廣告
- (void) showAds: (NSMutableDictionary*) info position:(int) pos
{
NSString* strType = [info objectForKey:@"AppleType"];
int type = [strType intValue];
switch (type) {
case kTypeBanner:
{
[self showBanner:pos];
break;
}
case kTypeFullScreen:
OUTPUT_LOG(@"Now not support full screen view in AppleType");
break;
default:
OUTPUT_LOG(@"The value of 'AppleType' is wrong (should be 1 or 2)");
break;
}
}
- (void) hideAds: (NSMutableDictionary*) info
{
NSString* strType = [info objectForKey:@"AppleType"];
int type = [strType intValue];
switch (type) {
case kTypeBanner:
{
if (nil != self.bannerView) {
[self.bannerView removeFromSuperview];
[self.bannerView release];
self.bannerView = nil;
}
break;
}
case kTypeFullScreen:
OUTPUT_LOG(@"Now not support full screen view in AppleType");
break;
default:
OUTPUT_LOG(@"The value of 'AppleType' is wrong (should be 1 or 2)");
break;
}
}
- (void) queryPoints
{
OUTPUT_LOG(@"AdsApple not support query points!");
}
- (void) spendPoints: (int) points
{
OUTPUT_LOG(@"AdsApple not support spend points!");
}
- (void) setDebugMode: (BOOL) isDebugMode
{
self.debug = isDebugMode;
}
- (NSString*) getSDKVersion
{
return @"6.4.2";
}
- (NSString*) getPluginVersion
{
return @"0.2.0";
}
// 顯示廣告欄
- (void) showBanner: (int) pos
{
// 如果存在先刪除,重新創建
if (nil != self.bannerView) {
[self.bannerView removeFromSuperview];
[self.bannerView release];
self.bannerView = nil;
}
// 創建
self.bannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
self.bannerView.frame = CGRectOffset( self.bannerView.frame, 0, -50 );
self.bannerView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifierPortrait];
self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
self.bannerView.delegate=self;
[AdsWrapper addAdView:self.bannerView atPos:pos];
self.bannerView.center = OUT_POS;
self.bannerPos = pos;
[UIView commitAnimations];
self.bannerVisible = false;
}
// 在加載廣告前通告
- (void)bannerViewWillLoadAd:(ADBannerView *)banner NS_AVAILABLE_IOS(5_0)
{
NSLog( @"bannerViewWillLoadAd" );
}
// 每次有新廣告加載後通告
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
NSLog( @"bannerViewDidLoadAd" );
if( self.bannerVisible == false ) {
[self.bannerView removeFromSuperview];
[AdsWrapper addAdView:self.bannerView atPos:self.bannerPos];
[UIView commitAnimations];
self.bannerVisible = true;
// 向監聽器發送廣告顯示的通告
[AdsWrapper onAdsResult:self withRet:kAdsShown withMsg:@"ok"];
}
// 向監聽器發送接到數據的通告
[AdsWrapper onAdsResult:self withRet:kAdsReceived withMsg:@"ok"];
}
// 發生錯誤
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog( @"didFailToReceiveAdWithError" );
if( self.bannerVisible ) {
self.bannerView.center = OUT_POS;
self.bannerVisible = false;
// 向監聽器發送廣告隱藏(錯過)的通告
[AdsWrapper onAdsResult:self withRet:kAdsDismissed withMsg:@"ok"];
}
// 向監聽器發送廣告接受數據錯誤的通告
[AdsWrapper onAdsResult:self withRet:kNetworkError withMsg:error.domain];
}
// 當用戶點擊廣告欄通告,返回值BOOL指定廣告是否打開
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
NSLog( @"bannerViewActionShouldBegin" );
return TRUE;
}
// 全畫面的廣告表示完了後,調用該接口
// 該接口被調用之後,當前程序壹般會作為後臺程序運行
// 該接口中需要回復之前被中斷的處理(如果有的話)
- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{
NSLog( @"bannerViewActionDidFinish" );
// 向監聽器發送廣告點擊成功關閉的通告
[AdsWrapper onPlayerGetPoints:self withPoints:1];
}
@end
4:使用的時候和其他的插件壹樣,加載,顯示,隱藏,卸載..
#if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
m_pNowAdsPtl = dynamic_cast<ProtocolAds*>(PluginManager::getInstance()->loadPlugin( "AdsApple" ) );
if( m_pNowAdsPtl ) {
m_mapAdsInfo["AppleType"] = "1";
m_bUsingIAD = true;
}
#endif
5:iAd有廣告點擊切換前後的事件通知,為了保證監聽接口不變,GetPoint成了點擊廣告後的監聽回調,用於給小費...
6:iAd在部分國家沒有支持,可以根據時區或者其他的檢測方法進行廣告平臺之間的切換,我用的是失敗次數檢測,這裏就不寫出來了,各有各的辦法.
結束~