不労所得とかいうものが欲しかったので、手始めにiOSアプリに広告をつけてみようとしたらテスト広告だけでかなり手こずって一日費やしてしまったので覚書。
普通に働いた方が早い。
最終的に動いた手順
####Google AdMovに登録する
最近はGoogle AdMovって呼ぶらしい。前はなんか名前が違った気がする。
コロコロ仕様も変わりそうなのでこんなこと覚えてる暇があったら普通に働いた方が早い。
登録はここから。
####AdMovのダッシュボードから広告をつけたいアプリを登録する。
登録してないアプリでテスト以外の広告を流すと最悪垢バンされるらしい。
テスト広告だけなら関係なさそうなので割愛。
####Xcodeでプロジェクトを作成
特に難しいことはないが、AppDelegate.swiftと(Game)ViewController.swiftが最初からあるテンプレだと楽かも。
ここから先はAdMovのスタートガイドをもとに進める。
####CocoaPodsの導入
CocoaPodsを使ったことがない場合は入れる。
ターミナルで、
sudo gem install cocoapods
インストールが終わったら、
pod setup
####Mobile Ads SDKのインポート
プロジェクトのディレクトリに移動して、
pod init
その後Podfileをエディタ等で開き、
(略)
target 'アプリ名' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'Google-Mobile-Ads-SDK' <-この行を追加
# Pods for アプリ名
(略)
コマンドラインから、
pod install --repo-update
--repo-updateはなくてもいい気がするが公式で書いてあったから従った。
####Info.plistの更新
よくわからなかったので書かれてる通りにやった。
CocoaPodsを使ったので以降は.xcodeprojファイルではなく.xcworkspaceファイルで作業する。
.xcodeprojファイルで作業するとかいう初歩的なミスをすると果てしなく時間を無駄にする。
ケアレスミスに対する救済措置がないので普通に働いた方が早い。
Info.plistを右クリックからOpen with External Editor
で開いて編集。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
以下に、
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>424m5254lk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
</array>
この長ったらしいやつを追加。
####Mobile Ads SDKの初期化
アプリの起動時に一度SDKを初期化する必要があるらしい。
AppDelegate.swiftを開いて、
import UIKit
import GoogleMobileAds//この行を追加
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
GADMobileAds.sharedInstance().start(completionHandler: nil)//この行を追加
return true
}
(以下略)
これで一回実行してみて通ったら広告の実装に進む。
####テスト広告の実装
今回はバナー広告で試してみる。
ここからはバナー広告のスタートガイドに沿って進める。
スタートガイドにも書いてある通り、実際の広告でテストを行うと垢バンされることもあるらしいので、必ずテスト広告でテストすること。
テスト広告の専用ユニットIDはca-app-pub-3940256099942544/2934735716
。
(Game)ViewController.swiftを開いて、
import UIKit
import SpriteKit
import GameplayKit
import GoogleMobileAds //追加
class GameViewController: UIViewController {
var bannerView: GADBannerView! //追加
override func viewDidLoad() {
super.viewDidLoad()
bannerView = GADBannerView(adSize: kGADAdSizeBanner) //追加
addBannerViewToView(bannerView) //追加
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
// Present the scene
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" //追加
bannerView.rootViewController = self //追加
bannerView.load(GADRequest()) //追加
}
//addBannerViewToView関数を追加
func addBannerViewToView(_ bannerView: GADBannerView) {
bannerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bannerView)
view.addConstraints(
[NSLayoutConstraint(item: bannerView,
attribute: .bottom,
relatedBy: .equal,
toItem: bottomLayoutGuide,
attribute: .top,
multiplier: 1,
constant: 0),
NSLayoutConstraint(item: bannerView,
attribute: .centerX,
relatedBy: .equal,
toItem: view,
attribute: .centerX,
multiplier: 1,
constant: 0)
])
}
(以下略)
###結論
やっと動いた。長い。
しかもどうせすぐ仕様が変わる。
何ならここをみるより公式を見た方がいい。
普通に働いた方が100倍早い。
##2021/09/01 追記
テスト広告がついたままのアプリはAppleの審査に通らないので注意。