-->

2013年1月27日 星期日

為你的App添加廣告 - AdMob

我們寫App是為了什麼, 對筆者來說, 其一是自己有興趣, 可以說是自己的理想. 其二當然就是賺錢啦. 雖然錢不是萬能, 但是沒錢卻是萬萬不能. 因此, 在App裡面放些廣告, 賺點溫口費, 總是不為過的. 但是筆者建議, 若你的App是要收費的, 哪麼還是不要再放入廣告, 畢竟使用者已經付費了, 還要賺取廣告費, 未免不夠厚道, 而且也降低了App的品質.

本篇文章是介紹如何使用Google的AdMob服務, 因此你必須先有AdMob的帳號, 沒有的人可以到此處申請. 並下載它的SDK. 申請跟下載流程都在中文語系, 相信各位都不會有什麼問題的. 都準備好之後, 就可以開始以下的流程了.

在專案中加入AdMob的SDK

首先開啟一個專案, 筆者這裡使用"SingleView Application".

建立專案名稱, 選擇使用 Storyboard及 ARC(Auto Reference Counting)

在專案點右鍵選擇"Add file to "你的專案名稱"

在AdMob資料夾中選取加入Addon及Readme.txt以外的檔案.

到專案的 TARGETS的"Build Phases"頁面, 裡面的"Link Binary with Library"添加以下framework:

  • StoreKit 
  • AudioToolbox
  • MessageUI 
  • SystemConfiguration 
  • CoreGraphics 
  • AdSupport

之後到"Build settings"中找到"Other Linker flags"加入"-ObjC".

到此就完這階段的工作了, 現在你已經建設好使用AdMob的配置了, 下一步就是在你的App中加入廣告了.

在App中加入廣告畫面

首先在你的.h檔中, 加入如下的程式碼

#import 
#import "GADBannerView.h"//import AdMob所要用的bannerView

@interface AdMobTestViewController : UIViewController
{
    //建立一個BannerView的物件
    GADBannerView *bannerView_;
}

在你的.m中加入

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 在畫面下方建立標準廣告大小的畫面。
    //GAD_SIZE_320x50 就是你的bannerView的size 其中320就是寬度(width), 50就是高度(height)
    bannerView_ = [[GADBannerView alloc]
                   initWithFrame:CGRectMake(0.0,
                                            self.view.frame.size.height -
                                            GAD_SIZE_320x50.height,
                                            GAD_SIZE_320x50.width,
                                            GAD_SIZE_320x50.height)];
    
    // 指定廣告的「單元識別碼」,也就是您的 AdMob 發佈商編號。
    bannerView_.adUnitID = @"發佈商ID";
    
    // 指定要復原的 UIViewController,讓執行階段在每次擷取
    // 點擊廣告的使用者後加以復原,並加進檢視階層。
    bannerView_.rootViewController = self;
    [self.view addSubview:bannerView_];
    
    // 啟用泛用請求,並隨廣告一起載入。
    [bannerView_ loadRequest:[GADRequest request]];
 // Do any additional setup after loading the view, typically from a nib.
}

到此你已完成了在App中加入廣告的動作了, 但是必須注意的是, 當你的App還在進行測試的時候, 是千萬不能執行以上這些程式碼的, 因為上述的程式碼是能為你帶來獲利的, 但是在進行測試時, 基本上就變成是你自己去點廣告來賺取收入, 會因此而遭到停權.因此, 要進行測試, 還得繼續進行以下作業.

將你的AdMobBanner設定為測試模式

首先在你的 .h中加入以下程式碼

- (GADRequest *)createTestRequest;
在 .m中加入
- (GADRequest *)createTestRequest{
    GADRequest *request = [GADRequest request];
    request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, @"你用來測試的設備ID", nil];
    return request;
}

最後, 把上個步驟中的泛用請求改為

[bannerView_ loadRequest:[self createTestRequest]];

到此就只剩下最後一個問題, 如何知道測試設備的ID了, 若是使用實機測試的話, 打開 Xcode的 Organizer左側的設備, 點右鍵選"Copy Device Identifier"然後貼到上述程式碼相應的地方就行了. 若是使用simulator的話, 可以使用以下程式碼獲得

NSLog(@"我的模擬器ID: %@" ,
              [[UIDevice currentDevice] uniqueIdentifier]);

這些方法, 在AdMob的developer's guide中都有提到, 值得一提的是, 請看英文版的, 中文版本不知道是還沒更新還是怎樣, 照著做的話, 大概會出現以下這些錯誤訊息.

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk -L/Users/twoyears44/Library/Developer/Xcode/DerivedData/AdMobTest-asgmbgeicmqqdwfllqxylfmvjxcf/Build/Products/Debug-iphonesimulator "-L/Users/twoyears44/Projects of ObjectC/01 Test/AdMobTest" -F/Users/twoyears44/Library/Developer/Xcode/DerivedData/AdMobTest-asgmbgeicmqqdwfllqxylfmvjxcf/Build/Products/Debug-iphonesimulator -filelist /Users/twoyears44/Library/Developer/Xcode/DerivedData/AdMobTest-asgmbgeicmqqdwfllqxylfmvjxcf/Build/Intermediates/AdMobTest.build/Debug-iphonesimulator/AdMobTest.build/Objects-normal/i386/AdMobTest.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=6.0 -framework AudioToolbox -framework MessageUI -framework SystemConfiguration -framework UIKit -framework Foundation -framework CoreGraphics -lGoogleAdMobAds -o /Users/twoyears44/Library/Developer/Xcode/DerivedData/AdMobTest-asgmbgeicmqqdwfllqxylfmvjxcf/Build/Products/Debug-iphonesimulator/AdMobTest.app/AdMobTest

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ASIdentifierManager", referenced from:
      objc-class-ref in libGoogleAdMobAds.a(GADIdentifierUtilities.o)
  "_OBJC_CLASS_$_SKStoreProductViewController", referenced from:
      objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
  "_SKStoreProductParameterITunesItemIdentifier", referenced from:
      -[GADOpener openInAppStore:fallbackURLString:] in libGoogleAdMobAds.a(GADOpener.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

以下是此文章的Reference, 裡面有許多有趣實用的東西, 文法也使用的很簡單, 建議一定要去看看:

https://developers.google.com/mobile-ads-sdk/download

沒有留言:

張貼留言