SwiftUI + Google AdMob

這篇是一個簡單介紹 UIViewControllerRepresentable 的範例,
由於 Google AdMob 的 GADBannerView 不像上次提及的 UITextField 一樣,可以直接使用 UIViewRepresentable 來包裝;原因是它必須設置一個 rootViewController,也就意味著我們需要使用 UIViewControllerRepresentable 才能完成它。

Interfacing with UIKit

透過這個 Apple 官方的教學當中,我們可以從 UIPageViewController 的範例來做發想,故我的實作方式會是這樣:

import GoogleMobileAds
import SwiftUI
import UIKit

struct GADBannerViewController: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UIViewController {
        let view = GADBannerView(adSize: kGADAdSizeBanner)
        let viewController = UIViewController()
        view.adUnitID = "your ad unit id in there."
        view.rootViewController = viewController
        viewController.view.addSubview(view)
        viewController.view.frame = CGRect(origin: .zero, size: kGADAdSizeBanner.size)
        view.load(GADRequest())
        return viewController
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}

如果需要處理 Delegate 的部分

你可以參閱上次 TextField 的處理方式,建構一個 Coordinator 來進行相關的作業👌

如果還有問題的話

歡迎直接透過各種方式找到我,一起來討論討論 SwiftUI 的應用👍
程式碼會同步到 GitHub 上,有任何想法都可以直接留言📒

AdMob 獎勵式廣告實作

AdMob

在 Google 的廣告投放服務之中,是以 AdSense 作為主軸,整合所有廣告相關的服務;
而 AdMob 則是其中一個專門針對行動裝置的部分。
所以若 iOS 的開發者想在其應用上放置廣告單元,則需要從 AdMob 著手。

建立廣告單元

首先,需要先到 AdMob 的控制台中,新建一個新的應用程式,
並將 app 的相關資訊填寫完整。

再者,則是建立一個廣告單元,而這篇所要分享的是「獎勵式廣告」的實作。

什麼是獎勵式廣告?

獎勵式廣告的意思就如其名,是一個可以在編輯時設定,
反饋給觀看玩廣告的使用者一些獎勵的一種廣告模式;
如大部分的手機遊戲,觀看影片後可以得到一些鑽石、金幣或者特殊加成等。

設定廣告獎勵

我們可以在這個畫面中,去設定使用者觀看頻率的限制以及獎勵數量。

而在後面程式實作的時候,會講解這邊設定會影響到什麼。

Framework 安裝

你可以透過 CocoaPods 或是直接下載拉進專案之中;
這邊由於我所加入廣告的 App 有整合 Firebase 的相關服務,
而 Firebase 官方並無支援 Carthage,所以在這就一併使用 CocoaPods 來做套件的管理。
因為使用 Firebase,所以只需要在原先的 Podfile 之中加上

並且執行 pod install,即可完成安裝。

AppDelegate.swift

先在上方 import GoogleMobileAds,並需要在 FirebaseApp.configure() 之後,加上 AdMob 的廣告設定:
GADMobileAds.configure(withApplicationID: Your_Ads_ApplicationID)

這樣便可以在一開啟 app 時,和 AdMob 做連結。

獎勵式廣告的流程

獎勵式廣告和一般掛在下方的簽入式廣告不同,它的流程為
一、先和 AdMob 發送獎勵式廣告的 request

二、主動式地去詢問 AdMob 的獎勵式廣告是否就緒;

三、影片完整備看完後,它會以 delegate 的方式告知你剛剛投放的獎勵式廣告,其相關內容設定

大致上的流程就是這樣,接著回到前面所說的設定;
若你有限制使用者觀看的頻率,在觀看完後的限制時間內,會在步驟二的地方得到 false,
所以在流程上需要稍作注意。
而獎勵數量則是會在廣告結束後的 delegate 之中,以 reward 這個物件回傳回來,
它底下會有 amount 這個的參數,便是剛剛所設定的獎勵數量。

Bitnami