プログラミングで世界を変える

ゲームプログラミングと技術のこと

maio Android SDKをUnityから動作させるプラグイン

2017年1月6日追記

maio公式のUnityプラグインがAndroidに対応しました。

github.com

恐らく私のプラグインを使用する意味はないかと思います。 以下の文章は、UnityからAndroidのネイティブメソッドを呼び出す実装の参考としていただければ幸いです。

はじめに

maioという動画広告のためのSDKがあり、iOS/Androidに対応しています。2016年1月にUnityプラグインの提供が開始されたのですが、現時点(2016/11/3)でiOS版にしか対応していません。

github.com

そこで、Unityからmaio Android SDKの一部機能を動作させるプラグインを作成しました。

この記事ではこちらの導入手順とプラグインの実装について紹介します。

以下が今回作成したサンプルプロジェクトとプラグインです。

github.com

導入手順

サンプルプロジェクトを開いた状態、もしくはmaioUnityPluginForAndroid.unitypackageを導入するプロジェクトにインポートした状態からの手順です。(AndroidManifest.xmlがコンフリクトしている場合については後述しています。)

maio Android SDKの追加

maio パートナーページからSDKをダウンロードしてください。次に、ダウンロードしたフォルダ直下のmaio.jarをUnity内のAssets/Plugins/Android以下に追加してください。

google play serviceの追加

maio Android SDKはgoogle play serviceを利用するため、google-play-services.jarが必要になります。

しかし、以下の記事によるとrevision 30以降でライブラリプロジェクトが入手できなくなったらしいです。

UnityでGooglePlayServicesを入れるにはPlayServicesResolver(unity-jar-resolver)が便利 - Qiita

一旦の解決策として、revision 28を利用してください。(以下から直接ダウンロード)

https://dl-ssl.google.com/android/repository/google_play_services_8298000_r28.zip

ダウンロード後に、以下の手順を進めてください。

  1. /google-play-services/libproject/google-play-services_lib/libs/google-play-services.jarを、UnityのAssets/Plugins/Android以下に追加する
  2. /google-play-services/libproject/google-play-services_lib/res/values/version.xmlを、UnityのAssets/Plugins/Android/res/values以下に追加する

AndroidManifestのマージ

Assets/Plugins/Android 以下にAndroidManifest.xml が存在している場合に必要な手順です。 maio Android SDKで必要な以下の記述を、既存のものに追加してください。

<!--<application>タグ内に以下を追加-->
<activity android:name="jp.maio.sdk.android.AdFullscreenActivity" android:label="maiosdk" android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize" android:hardwareAccelerated="true" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    <intent-filter>
        <data android:scheme="jp.maio.sdk.android" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>
<!--<application>タグ内に以下を追加-->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<!--<manifest>タグ内に以下を追加-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

使い方

maio-Unity-Pluginに準拠した書き方で動作します。

サンプルプロジェクト内のこちらのコードも参考になるかと思います。

https://github.com/splas-boomerang/maioUnityPluginForAndroid/blob/master/Assets/MaioAndroidSample.cs

利用中可能なメソッド

  • getSdkVersion()
  • init(Activity activity, String mediaId, MaioAdsListener listener)
  • setAdTestMode(boolean testMode)
  • setMaioAdsListener(MaioAdsListener listener)
  • canShow()
  • canShow(String zoneId)
  • show()
  • show(String zoneId)

プラグインの実装について

UnityからAndroidのネイティブメソッドを呼び出せるAndroidJavaClassを利用しました。

こちらの記事を参考にしました。 qiita.com

実装は、maio-Unity-Pluginに準拠する形で書きました。(iOS/Androidに対応したアプリケーションを開発する場合は、既存のmaio-Unity-Pluginに統合して利用すると良いかと思います。)

課題

プラグインからのコールバックについて未対応です。

以下の記事をみる限り、Java側でコールバックを受け取ってUnityのメソッドを呼び出すコードを記述することで実現できるように思います。 qiita.com

所感

AndroidJavaClassは便利でしたが、毎回ビルドをして実行確認する手間が非常に煩雑でした。エラーもC#内でキャッチできないものが多く苦労しましたが、今回の作業を通じてAndroidネイティブ開発に関する知識が少しついた気がします。

また、サードパーティ製SDK(maio.jar, google-play-services.jar)の利用を前提としたプラグインの作成にあたり、公開範囲などをきちんと意識する必要があり、勉強になりました。