SpriteKitで作ったアプリにAdmobを実装する

環境

主なファイル構成

  • GameViewController
  • GameScene.swift

Admobの登録

  • 省略

SDKのインストール

  • ここの説明に従いCocoaPodsからSDKをインストールした
  • Podfileは以下のようにした
  • 適切なバージョンがわからなかったので、バージョン指定はなしになっている (参考)
source 'http://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'Google-Mobile-Ads-SDK' 

target 'プロジェクト名' do

end

ビルドするとBitcodeのエラーが出た

  • エラー内容
GoogleMobileAds.framework/GoogleMobileAds(GADDefaultInAppPurchaseFlow.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
  • Bitcodeを無効にして対応(参考
  • TARGETS > プロジェクト名 > Build Setting > Build Options > Enable Bitcode を「No」に変更した (最初、表示をBasicにしていて検索しても出てこなかった)

(Bitcodeって?)

  • よくわかっていなかったので調べてみた
  • 「Bitcodeを含めてビルドアップロードすると、将来CPUアーキテクチャが変わっても自動で対応してくれる」ってことだろうか
  • 参考

フレームワークの追加

  • TARGETS > プロジェクト名 > General > Linked Frameworks and Libraries から必要なフレームワークを追加

必要なフレームワーク

  • AdSupport
  • AudioToolbox
  • AVFoundation
  • CoreGraphics
  • CoreMedia
  • CoreTelephony
  • EventKit
  • EventKitUI
  • MessageUI
  • StoreKit
  • SystemConfiguration

バナー広告の追加

  • ここにはStoryboardを利用したやり方しかのっていなかったので、こちらを参考にさせてもらい作業をすすめる
  • GameViewController.swiftに参考記事のコードを記述したら表示された (以下をviewDidLoadから呼び出す)
func showAd() {
    let banner:GADBannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)
    banner.adUnitID = "ca-app-pub-xxxxxxxxxxxxxxxxxxxxxxxx"
    banner.delegate = self
    banner.rootViewController = self
    let gadRequest:GADRequest = GADRequest()
    banner.loadRequest(gadRequest)
    self.view.addSubview(banner)
}
  • GameScene.swift上でバナーの表示非表示をコントロールしたかったので、var banner: GADBannerView!グローバル変数とし、banner.hidden = true/falseでコントロールした

インタースティシャル広告の追加

var interstitialAD: GADInterstitial! //interstitialという名前は使えなかった

class GameViewController: UIViewController, GADBannerViewDelegate, GADInterstitialDelegate {

    override func viewDidLoad() {
         super.viewDidLoad()
         interstitialAD = createAndLoadInterstitial()
    }

    func createAndLoadInterstitial()->GADInterstitial {
        let interstitial = GADInterstitial(adUnitID: "ca-app-pub-xxxxxxxxxxxxxxxxxxxxxx")
        interstitial?.delegate = self
        let gadRequest:GADRequest = GADRequest()
        interstitial?.loadRequest(gadRequest)
    
        return interstitial!
    }

    func interstitialDidDismissScreen(ad: GADInterstitial!) {
        interstitialAD = createAndLoadInterstitial()
    }
}
  • 広告の呼び出しは、こちらを参考にさせていただき、以下のように行っている
func showInterstitial() {
    let currentViewController: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController!
    interstitialAD?.presentFromRootViewController(currentViewController)
}