顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [Xcode][Swift3] 加入 Admob 原生廣告
時間 2017-05-31 Wed. 03:12:11


http://www.google.com.tw/admob/ 登入 AdMob
[圖]


在「營利」頁,新增一個應用程式
[圖]

[圖]


已新增過應用程式的話,直接點選營利頁下的應用程式
[圖]


新增廣告單元,類型選擇原生廣告
[圖]


點開始匯入後,廣告大小選擇小的
[圖]


選擇範本,例如選第一個
[圖]


修改顏色配置
[圖]


點「驗證樣式」,確認沒問題後儲存
[圖]


取得「應用程式ID」與「廣告單元 ID」
[圖]



安裝 AdMob SDK

參考官方文件 https://developers.google.com/admob/ios/quick-start

使用 CocoaPods 安裝 AdMob SDK

CocoaPods 的安裝方法可參考這篇
[Xcode][Swift3] 安裝套件管理工具 CocoaPods - KnucklesNote板 - Disp BBS

在 Podfile 新增這行
  pod 'Google-Mobile-Ads-SDK'

然後使用終端機在專案目錄執行 pod install
目前安裝的版本為 7.20.0


在 Xcode 設定廣告

修改 AppDelegate.swift

前面加上
import GoogleMobileAds

在成員函數 func application(_:didFinishLaunchingWithOptions) 裡面加上
        // Initialize the Google Mobile Ads SDK.
        // Sample AdMob app ID: ca-app-pub-3940256099942544~1458002511
        GADMobileAds.configure(withApplicationID: "YOUR_ADMOB_APP_ID")
注意這邊是加上應用程式 ID
可以在這邊取得
[圖]



設定 Native 廣告

參考官方文件 https://developers.google.com/admob/ios/native-express

例如要將這篇教學
[Xcode][Swift3] 新手教學 使用 Swift3 製作熱門文章瀏覽器 App - KnucklesNote板 - Disp BBS
產生的熱門文章列表頁,在第六列插入一個原生廣告


新增一個類別檔 NativeAdsCell.swift
subclass of: UITableViewCell

在 storyboard 中,Table View 的設定增加一個 Prototype Cells
新的 Cell 設定 Identifier 為「NativeAdsCell」
以及設定自訂類別為「NativeAdsCell」
[圖]


在 NativeAdsCell 裡拉一個 View,設定四個方向的 Constraint 為 0
設定自訂類別為「GADNativeExpressAdView」
[圖]

(不能將 Cell 裡的 Content View 設為 GADNativeExpressAdView,會抓不到)

使用 Assistant Editor 拉一個 @IBOutlet 到 NativeAdsCell.swift
     @IBOutlet weak var nativeExpressAdView: GADNativeExpressAdView!

在 NativeAdsCell.swift 前面加上
import GoogleMobileAds


修改 HotTextViewController.swift

前面先加上
import GoogleMobileAds

修改成員函數 tableView(_:numberOfRowsInSection:) 的內容為
        guard let num = self.hotTextArray?.count else {
            return 0
        }
        if num >= 5 { // Add Native Ads
            return num + 1
        } else {
            return num
        }
當熱門文章有五筆以上時,Table View 的列數加一

修改成員函數 tableView(_:cellForRowAt:) 的內容
在前面加上
        if indexPath.row == 5 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "NativeAdsCell", for: indexPath) as! NativeAdsCell
            if let nativeExpressAdView = cell.nativeExpressAdView {
                nativeExpressAdView.adUnitID = "YOUR_ADMOB_AD_UNIT_ID"
                nativeExpressAdView.rootViewController = self

                let request = GADRequest()
                request.testDevices = [kGADSimulatorID]
                nativeExpressAdView.load(request)
            }
            return cell
        }
在第六列的時候,將 cell 設定為原生廣告

原本第六列後的內容要往下移一列,
將原本的 let hotText = self.hotTextArray?[indexPath.row] 改為
        var index = indexPath.row
        if indexPath.row > 5 {
            index = indexPath.row - 1
        }

        let hotText = self.hotTextArray?[index]
第六列後取資料的 index = indexPath.row - 1


修改點擊列表會執行的成員函數 prepare(for:sender:)

    guard let textViewController = segue.destination as? TextViewController,
        let row = self.tableView.indexPathForSelectedRow?.row,
        let hotText = self.hotTextArray?[row] as? [String: Any]
        else { return }
改為
    guard let textViewController = segue.destination as? TextViewController,
        let row = self.tableView.indexPathForSelectedRow?.row
        else { return }

    var index = row
    if row == 5 { return }
    else if row > 5 { index = row - 1 }
    guard let hotText = self.hotTextArray?[index] as? [String: Any]
        else { return }
點擊第5列時跳出,點擊第6列以上時,取資料的 index = row - 1    


為了避免違反 AdMob 使用規定,
在模擬器測試的時候要加上 request.testDevices = [kGADSimulatorID]
以免跑出會計費的廣告 (只顯示沒點擊也不行)

在實際裝置測試時,下面的 Console 視窗會出現這樣的訊息
<Google> To get test ads on this device, call: request.testDevices = @[@"XXXXXXXXXXXXXXXXXXXXXX"];
再將 Device ID 加進 testDevices 陣列中
例如: request.testDevices = [kGADSimulatorID, "XXXXXXXXXXXXXXXXXXXXXX"]

發佈 App 前再將 request.testDevices = ... 這行拿掉


執行結果
[圖]

在 Admob 中新增廣告單元後,要一段時間後才會顯示
所以如果執行結果廣告欄位是空的,可以過一段時間後再試試看

--
※ 作者: Knuckles 時間: 2017-05-31 03:12:11
※ 編輯: Knuckles 時間: 2017-06-06 01:45:24
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 733 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇