[Swift+SpriteKit]AppLovinの広告を導入してApple TVのアプリでマネタイズする

アプリ道場のお父さん開発者 [@esum1527](https://twitter.com/esum1527)です。

ApplovinがtvOS用の広告配信用SDKをリリースしました。これで広告による収益発生するアプリを作成できます。

今回はSwift+SpriteKitでApplovin SDKを利用するサンプルとしてSiri RemoteのPlay/Pauseボタンを押した時に広告を表示するというプロジェクトを作成してみます。

##実行した環境
OSX El Capitan + Xcode7.1 + applovin-tvos-sdk-3.2.0

##SDKのダウンロード
[Applovin](https://www.applovin.com/)からSDKをダウンロードします。
ダウンロードにはSign In後になります。利用を考えている方はSign Upが必要です。

Sign In後、Docs>tvOS>Apple tvOS Integration
[https://www.applovin.com/integration#tvosIntegration](https://www.applovin.com/integration#tvosIntegration)
からSDKをダウンロードすることができます。

##プロジェクトの作成
Xcodeを起動し、プロジェクトを新規作成します。
作成の際にはtvOSのApplicationからGameを選択します。

![Project作成](https://qiita-image-store.s3.amazonaws.com/0/56120/77338f59-ad69-856f-83b4-7f9c06a15783.png "1-Project作成.png")

任意のプロジェクト名(今回のサンプルは ALTestとしました。)を設定し、フォルダに保存してください。

##SDKのインポート
ダウンロードしたファイルを解凍し、

- headersフォルダ
- libAppLovinTVOS.a

をプロジェクトに追加します。

![SDKインポート](https://qiita-image-store.s3.amazonaws.com/0/56120/82b1d391-2bcc-338f-4a4e-d43b5d7c2fa1.png "2-SDKインポート.png")

この時
Destinationの Copy items if needed にチェックを忘れずに

![コピー時チェック](https://qiita-image-store.s3.amazonaws.com/0/56120/dd7932b5-2334-546d-5652-7c286fd0eb78.png "３−コピー時チェック.png")

##Frameworkの追加
SDKを利用するために必要なライブラリを追加します。

![ライブラリ追加](https://qiita-image-store.s3.amazonaws.com/0/56120/fd5a74af-cc91-ef31-eb7d-bbc3f6452096.png "4-ライブラリ追加.png")


![framework追加](https://qiita-image-store.s3.amazonaws.com/0/56120/0d0382ae-705c-d3c3-60fe-3399e83dff27.png "5-framework追加.png")

の手順で以下のFrameworkをプロジェクトに追加します。

- AdSupport
- AVFoundation
- CoreGraphics
- CoreMedia
- StoreKit
- SystemConfiguration
- UIKit


##SDK Keyの設定
Info.plist ファイルに 行を追加します。
![Key追加.png](https://qiita-image-store.s3.amazonaws.com/0/56120/748a8f45-7137-5112-124e-1a091655089c.png "6-Key追加.png")


Key及びValueに値を手入力します。

|Key           |Value|補足|
|:-------------|:----|:---|
|AppLovinSdkKey| (個別のキー)|Sign In時に表示されているご自身のSDK Keyを指定します。


![Key設定](https://qiita-image-store.s3.amazonaws.com/0/56120/239b6f25-2be3-f781-4ea0-0172da1ee898.png "7-Key設定.png")


- SDK Key確認URL
[https://www.applovin.com/integration#tvosIntegration](https://www.applovin.com/integration#tvosIntegration)
(Sign inが必要です。)

## Bridgeファイルの作成
SDKはObjective-Cで記述されているため、Swiftで利用するためにBridgeファイルを作成します。

![Headerファイル作成](https://qiita-image-store.s3.amazonaws.com/0/56120/1c89db7f-96bc-ce87-34fb-762a264f1f80.png "8-Headerファイル作成.png")

ファイル名は **ALTest-Bridging-Header.h** とします。

![Headerファイル追加](https://qiita-image-store.s3.amazonaws.com/0/56120/bd9a0895-4ec9-0df2-fd38-37dd5b78bf2a.png "9-Headerファイル追加.png")


##Setting
SDKを利用するために -ObjC Flgの設定が必要なため
Buid Settings - Other Linker Flags に
**-ObjC**を追加します。


![BuldSettings1](https://qiita-image-store.s3.amazonaws.com/0/56120/ebc91599-8b10-fb8c-511a-c90e9313db3d.png "10-BuldSettings.png")


次に、Bridgeファイルを利用するので、設定を追加します。
Bridging-Header に
**\$(SRCROOT)/\$(PROJECT)/ALTest-Bridging-Header.h**

を追加します。

![BuldSettings2](https://qiita-image-store.s3.amazonaws.com/0/56120/56a27c78-93b6-83d4-e075-000a1a5c6d9d.png "11-BuldSettings2.png")



## 一旦Buildしてみる
Buildしてエラーが出ないことを確認します。
エラーが発生する場合はこれまでの手順を見直してください。

#コードの記述

## Bridgeに必要なファイルをimport
ブリッジファイルにAppLovin SDKのheaderを追加します。

```swift:ALTest-Bridging-Header.h

#import "ALSwiftHeaders.h"

```

#SDK初期化
SDK初期化のコードを記述します。
AppDelegate.swiftのdidFinishLaunchingWithOptionsを以下のように書き換えます。

```swift:AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  // Override point for customization after application launch.
  ALSdk.initializeSdk()
  
  return true
}
```

#Play/Pauseボタンの検知
今回はPlay/Pauseボタンを押した時に広告を表示するようにしますので、ボタンを押された場合に処理するメソッドの準備をします。
GameScene.swift の didMoveToView を以下のように書き換えます。

```swift:GameScene.swift
override func didMoveToView(view: SKView) {
  /* Setup your scene here */
  let myLabel = SKLabelNode(fontNamed:"Chalkduster")
  myLabel.text = "Press Play/Pause Button!";
  myLabel.fontSize = 65;
  myLabel.position = CGPoint(x:CGRectGetMidX(self.frame),
                             y:CGRectGetMidY(self.frame));

  self.addChild(myLabel)

  // Play/Pauseボタンの設定
  let tapGesture = UITapGestureRecognizer()
  tapGesture.allowedPressTypes = [NSNumber (integer: UIPressType.PlayPause.rawValue)]
  tapGesture.addTarget(self, action: "showAd")
  self.view?.addGestureRecognizer(tapGesture)

}
```

#広告表示のコードを記述
PlayPauseボタンが押された時のアクション **showAd** を定義します。
didMoveToViewの下に以下のメソッドを追加します。

```swift:GameScene.swift
func showAd() {
  if ALInterstitialAd.isReadyForDisplay() {
    ALInterstitialAd.show()
  }
}
```
    
#実行してみる
Buildしてエラーが出ないことを確認して実行しましょう。

シミュレータのPlay/Pauseボタンをクリックしましょう。
※リモコンが表示されていない場合は [Hardware]-[Show Apple TV Remote]を選択します。

![実行](https://qiita-image-store.s3.amazonaws.com/0/56120/86c0fa01-248d-f463-02e3-446666ee0796.png "12-実行1.png")

広告が表示されました。

![スクリーンショット 2015-12-11 21.51.49.png](https://qiita-image-store.s3.amazonaws.com/0/56120/a01c1717-e85f-aa01-a6ab-e9b44dc921be.png "スクリーンショット 2015-12-11 21.51.49.png")

#最後に
Apple TVのマネタイズは有料アプリかアプリ内課金でしたが、ApplovinがtvOS用の広告配信用SDKをリリースしたことで広告による収益発生するアプリも作成できるようになりました。
ゲームに溶け込むような形でうまく広告を導入していきたいですね。

＜参考＞
[AppLovin](https://www.applovin.com/)
[tvOS-Demo-App](https://github.com/AppLovin/tvOS-Demo-App)
[AppLovin、「AppleTV」向けに広告を配信できるSDKをリリース　@tatsuosakamoto @maskin](http://twee.jp/_ct/16909742)