maio Android SDKをUnityから動作させるプラグイン
2017年1月6日追記
maio公式のUnityプラグインがAndroidに対応しました。
恐らく私のプラグインを使用する意味はないかと思います。 以下の文章は、UnityからAndroidのネイティブメソッドを呼び出す実装の参考としていただければ幸いです。
はじめに
maioという動画広告のためのSDKがあり、iOS/Androidに対応しています。2016年1月にUnityプラグインの提供が開始されたのですが、現時点(2016/11/3)でiOS版にしか対応していません。
そこで、Unityからmaio Android SDKの一部機能を動作させるプラグインを作成しました。
この記事ではこちらの導入手順とプラグインの実装について紹介します。
以下が今回作成したサンプルプロジェクトとプラグインです。
導入手順
サンプルプロジェクトを開いた状態、もしくは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
ダウンロード後に、以下の手順を進めてください。
/google-play-services/libproject/google-play-services_lib/libs/google-play-services.jar
を、UnityのAssets/Plugins/Android
以下に追加する/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)の利用を前提としたプラグインの作成にあたり、公開範囲などをきちんと意識する必要があり、勉強になりました。