Corona Enterprise に頼らない簡単広告実装のススメ


## Corona SDK 未対応の日本の広告会社とどう付き合うか

日本向けアプリを開発する場合は、やはり、日本の広告会社の広告を採用したいですよね。
しかし、残念ながら Corona SDK には、日本の広告会社に対応したプラグインが用意されていません。
また、日本の広告会社のほとんどは、Corona SDK に対応した SDK を提供していません。
そう、Corona SDK には未対応ということですね。

え、それってつまり、Corona SDK で日本の広告会社は利用出来ないっていうことですか？
いいえ、それは違います。

Corona Enterprise という有償プログラムを購入することによって、ネイティブ iOS / Android の実装が可能になります。
広告会社が配布している iOS SDK / Android SDK を実装して、Corona SDK で広告を表示させることは可能です。

## 有償の壁と実装の辛み

ちょっとした無料のカジュアルゲームに日本の広告会社の広告を採用しようとした場合、
わざわざ、有償である Corona Enterprise を購入して・・・というのは、とても現実的ではありません。

それに加えて、Corona Enterprise はネイティブ iOS / Android の実装が可能にはなりますが、
当然、Xcode や Android Studio などの開発環境を、別途、構築する必要が出て来ます。

Corona SDK の最大の魅力は、好きなエディタで Lua という超軽量の言語を用いて、
簡単にサクサク実装が出来る！という点に尽きると思いますが、
ただ、広告を表示したいだけなのに、開発環境を構築したり、Obj-C を書いたり、Java を書いたり、
というのは、ちょっとやり過ぎ感が否めません・・・というかやり過ぎです。

## 簡単に広告を実装したい

前提条件はありますが、Corona Enterprise に頼らず、簡単に日本の広告会社の広告を実装する方法があります。
実は、既に、過去に記事を書いてくれている方がいます。

- [Corona SDKにwebViewを使って複数の広告を実装する - 生産するブログ](http://www.createcreate.org/entry/2013/08/19/025534)
- [広告webViewを実装した時に、意図せずブラウザが開いてしまう -Corona SDK- - 生産するブログ](http://www.createcreate.org/entry/2013/12/16/181730)

こちらの記事を参考にすれば、簡単にバナー広告を実装することが可能です。
前提条件は、「広告会社が js タグによる広告表示をサポートしていること」ですね。
実装方法は、WebView を利用して、js タグが埋め込まれた html を読み込ませる感じです。

- [Corona SDKにCPI広告（オファーウォール広告）を実装する - 生産するブログ](http://www.createcreate.org/entry/2013/08/25/213943)

こちらの記事では、ウォール広告の実装についても書かれています。
[GAME FEAT](http://www.gamefeat.net/) のウォール広告は、Corona Enterprise を導入していないと難しそうだ、という記述があります。
そう、残念ながら GAME FEAT は SDK の提供のみで、js タグによる実装はサポートされていないんですよね。
しかし、実は、Corona Enterprise に頼らなくても、GAME FEAT のウォール広告を実装する方法があるんです。

GAME FEAT は、実は、Web サイト向けのアフィリエイトサービスもやっているんですよね。
Web サイト向けということもあって、こちらは js タグによる広告表示をサポートしています。
こちらのサービスでアカウントを作成してアプリ登録すれば、js タグを発行して広告を表示出来るようになります。

- [GAMEFEAT web - 高単価ゲームアプリアフィリエイト](http://www.gamefeat.net/web)

## AppliPromotion on Corona SDK

GAME FEAT のウォール広告について書いておきながら、今回は、
私がよくお世話になっている [AppliPromotion](https://www.applipromotion.com/) のウォール広告を Corona SDK で表示させてみることにしましょう。

AppliPromotion の公式ページ [Web サイトへの導入手順](https://manage.applipromotion.com/publisher/sdk) にて、js タグによる広告表示の実装方法が記載されています。
実装コードで必要となるのは、AppliPromotion で登録したアプリに割り当てられる `アプリ識別ID` だけです。

### 実装コード

AppliPromotion のウォール広告を表示させるための実装コードです。

```lua:appliPromotion.lua
local appliPromotion = {}

--- Public: show
function appliPromotion.show()
  if appliPromotion.isVisible then return end

  native.showWebPopup(0, 0, display.contentWidth, display.contentHeight, "appliPromotion.html", {
    baseUrl = system.ResourceDirectory,
    urlRequest = function(event)
      local shouldLoad = true

      if event.errorCode then
        shouldLoad = false
        appliPromotion.isVisible = false
      end

      if event.url:find("ad.applipromotion.com") then
        if event.url:find("wall") then
          if appliPromotion.isVisible then
            shouldLoad = false
            appliPromotion.isVisible = false
          else
            appliPromotion.isVisible = true
          end
        elseif event.url:find("open") then
          shouldLoad = false
          appliPromotion.isVisible = false
          system.openURL(event.url)
        end
      end

      return shouldLoad
    end,
  })
end

return appliPromotion
```

上記の実装コードにて、js タグが埋め込まれた html を WebView に読み込んでいます。

```html:appliPromotion.html
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
    <script type="text/javascript">
      window.onload = function() {
        history.pushState(null, null, location.href);
        document.getElementById("appp").click();
      };
    </script>
  </head>
  <body style="margin:0; padding:0;">
    <a id="appp" ak="XXXXXXXXXXXXXXXX" href="#" apppdisp="same"></a>
    <script src="http://ad.applipromotion.com/v2h/wall.js" charset="UTF-8"></script>
  </body>
</html>
```

`XXXXXXXXXXXXXXXX` の部分は、割り当てられた `アプリ識別ID` と置き換えて下さい。

実際に読み込まれる html では、js を利用して、強制的に、
ウォール広告を表示させるためのリンクをクリックさせています。

これで AppliPromotion のウォール広告を表示させるための準備は整いました。
後は、任意のタイミングで実装コードを呼び出すだけです。

```lua:main.lua
local appliPromotion = require("appliPromotion")
appliPromotion.show()
```

簡単ですね！

### 注意事項

#### プリロールアド機能は使えません

AppliPromotion のウォール広告には、プリロールアドと呼ばれる機能が付随しています。
これは、ウォール広告を表示させる前に、フルページ広告を表示させるという仕組みになっているんですが、
残念ながら、js タグによるウォール広告の表示ではサポートされていません。
AppliPromotion さん、実装してくれないですかね？

#### Apple リジェクト対策

私の経験上、初回のリリース申請にて、ウォール広告を表示させている場合、
Apple の審査にてリジェクトされる可能性が極めて高いです。
そのため、審査中はウォール広告を非表示にする対応が必要となります。
AppliPromotion には、まさに、そのための機能が用意してあるんですが、
残念ながら、こちらも、js タグによるウォール広告の表示ではサポートされていません。
その為、別途、外部から広告の表示、非表示を制御するための仕掛けが必要になります。

私は、[Parse](https://parse.com/) を利用して、制御するための仕組みを導入しています。

## Corona SDK の魅力を最大限に活かそう

ウォール広告に関しても、広告会社が js タグによる広告表示をサポートしてさえいれば、
今回と同様な実装コードで、バナー広告やウォール広告を表示することが可能です。
GAME FEAT も同様の実装でウォール広告を表示出来ることは、既に、確認済みです。

Corona Enterprise に頼らないことで、広告に関しては、
多少は妥協すべき点が出て来てしまいますが、それでも、
Corona SDK だけで一環して作業が完結する、ということは非常に魅力的ですね。

それでは、良い Corona Life を！