5: 2016-07-20 (水) 16:36:21 njf |
6: 2016-07-21 (木) 07:54:18 njf |
| } | | } |
| | | |
- | 次にアプリケーションのIDを設定するメソッドです。これは広告を表示する前に必ず一度実行する必要があります。 | + | 次にアプリケーションのIDを設定するメソッドです。これは広告を表示する前であることはもちろん、他のIDを設定する前に必ず一度実行する必要があります。 |
| | | |
| public void setAppID(String appID){ | | public void setAppID(String appID){ |
| } | | } |
| } | | } |
| + | バナーが二つ表示されるとやっかいなので、一度しか初期化できないようにif文でくくられています。 |
| ここでsetBackgroundColorを使って背景色を黒にしています。 | | ここでsetBackgroundColorを使って背景色を黒にしています。 |
| これはまれに広告のロードが終わっても画像が表示されず、透明のままになることがあり、するとユーザーの誤クリックを誘発しやすくなることを防ぐためです。 | | これはまれに広告のロードが終わっても画像が表示されず、透明のままになることがあり、するとユーザーの誤クリックを誘発しやすくなることを防ぐためです。 |
| bannerView.setVisibility(AdView.GONE); | | bannerView.setVisibility(AdView.GONE); |
| } | | } |
| + | |
| + | 通常、バナー広告は数十秒〜数分ごとに更新されます。 |
| + | AdViewのpauseメソッドはこの更新を止めます。 |
| + | バナーを消すと更新は不要なので呼び出しています。 |
| + | |
| + | アプリがバックグラウンドにまわったときも、余計な負荷を除くため、このpauseメソッドを呼び出し、再び前にまわったらresumeメソッドを呼び出すことをお勧めします。 |
| + | |
| + | ここの例では、単にバックグラウンドでhideBannerを、前にきたらshowBannerを呼び出すと良いでしょう。 |
| + | |
| | | |
| ここでmakeAdRequestメソッドは広告用のリクエストを作るメソッドです。 | | ここでmakeAdRequestメソッドは広告用のリクエストを作るメソッドです。 |
| } | | } |
| | | |
- | これはインタースティシャル広告でも使うのでメソッドにしています。また、AdRequest作り方を | + | 一行しかありませんが、インタースティシャル広告でも使うのでメソッドにしています。また、AdRequestの作り方を |
| return new AdRequest.Builder().addTestDevice("デバイスID").build(); | | return new AdRequest.Builder().addTestDevice("デバイスID").build(); |
| とするとテスト用の広告が表示されるようになります。 | | とするとテスト用の広告が表示されるようになります。 |
| } | | } |
| } | | } |
| + | |
| + | isLoadedはロード完了かどうかを判定するメソッドです。 |
| + | |
| + | インタースティシャルは規約的にも注意するのは表示させすぎないぐらいで、それほど難しい部分はありません。 |
| | | |
| *Androidアプリとしてのテスト [#w2a72b1c] | | *Androidアプリとしてのテスト [#w2a72b1c] |
| | | |
| これでテスト可能です。 | | これでテスト可能です。 |
| + | |
| + | これで動かないと当然ながらANEにしたところで動きません。ANEへの変換は手間がかかるので、作業を能率化するにはこの段階で入念にテストしておく必要があります。 |
| | | |
| *ANE呼び出し処理の追加 [#i5cd3b6c] | | *ANE呼び出し処理の追加 [#i5cd3b6c] |
| | | |
| [[こちらを参考に:http://njf.jp/cms/modules/xpwiki/?Android%E3%81%A7%E3%81%AEANE%E3%81%AE%E4%BD%9C%E6%88%901_Android%E5%81%B4%E3%81%AE%E4%BD%9C%E6%88%90#a17e7947]]FlashRuntimeExtensions.jarをaneadmobの下のlibに配置します。 | | [[こちらを参考に:http://njf.jp/cms/modules/xpwiki/?Android%E3%81%A7%E3%81%AEANE%E3%81%AE%E4%BD%9C%E6%88%901_Android%E5%81%B4%E3%81%AE%E4%BD%9C%E6%88%90#a17e7947]]FlashRuntimeExtensions.jarをaneadmobの下のlibに配置します。 |
| + | |
| + | 最終的にaneadmobのbuild.gradleのdependencies以下に次の一行が挿入されていればOKです。 |
| + | |
| + | compile files('libs/FlashRuntimeExtensions.jar') |
| + | |
| + | 次にActionScriptから呼び出される部分を作ります。 |
| + | |
| + | 呼び出しには次の二つのクラスが必要です。 |
| + | |
| + | |名前|機能|インターフェイス| |
| + | |ANEAdmobFREExtension|呼び出しの定義と振り分け処理|FREExtension| |
| + | |ANEAdmobFREFunction|実際に呼び出される関数|FREFunction| |
| + | |
| + | ここではこれらのクラスをjp.njf.aneadmobパッケージとして制作します。 |
| + | |
| + | ここで呼び出されるクラスの設計には二つの選択肢があります。 |
| + | 呼び出される関数はFREFunctionをimplementsしておくと、その中のcallメソッドが呼ばれます。 |
| + | |
| + | よって呼び出しメソッドの数だけクラスを作るか、一つのクラスを作って内部的に振り分けるか、という設計があり得ます。 |
| + | |
| + | 前節のように、このANEには7つのメソッドがあるので、7つもクラスを作るのは面倒です。よって一つのクラスを作って第一引数を使って処理の分岐を行うようにします。そのクラスが上記のANEAdmobFREFunctionで、メソッドの数だけクラスがないのはそのためです。 |
| + | |
| + | ただし、メソッドごとにクラスを作った方が呼び出しエラーなどがFlash側のtraceメッセージなどと一緒に表示されるため、デバッグは楽です。自分で振り分けする場合は、もちろん自分でエラー処理もしなくてはなりません。 |
| + | |
| + | このように一長一短ありますので、場合に応じて設計を変えて下さい。 |
| + | |
| + | |
| + | |
| + | まずANEAdmobFREExtensionクラスのcreateContextメソッドです。"admob"という名前で呼び出せるようにしておきます。 |
| + | |
| + | @Override |
| + | public FREContext createContext(String s) { |
| + | FREContext context = new FREContext() { |
| + | @Override |
| + | public Map<String, FREFunction> getFunctions() { |
| + | Map<String, FREFunction> result = new HashMap<String, FREFunction>(); |
| + | result.put("admob", new ANEAdmobFREFunction()); |
| + | return result; |
| + | } |
| + | |
| + | @Override |
| + | public void dispose() { |
| + | |
| + | } |
| + | }; |
| + | return context; |
| + | } |
| + | |
| + | 特に難しい部分はないはずです。分からない部分があれば「[[AndroidでのANEの作成1_Android側の作成]]」を参照してください。 |
| + | |
| + | 次にANEAdmobFREFunctionのcallメソッドです。 |
| + | 第一引数をメソッドの振り分けに、第二引数をパラメータとして使っています。 |
| + | |
| + | public FREObject call(FREContext freContext, FREObject[] freObjects) { |
| + | String method = ""; |
| + | String prm = ""; |
| + | try { |
| + | method = freObjects[0].getAsString(); |
| + | } catch (Exception e) { |
| + | Log.e("njf.jp.aneadmob", "ANEAdmobFREFunction:can't parse : arg 0"); |
| + | } |
| + | try { |
| + | prm = freObjects[1].getAsString(); |
| + | } catch (Exception e) { |
| + | Log.w("njf.jp.aneadmob", "ANEAdmobFREFunction:can't parse : arg 1"); |
| + | } |
| + | |
| + | if(aneAdmob == null){ |
| + | aneAdmob = new ANEAdmob(freContext.getActivity()); |
| + | } |
| + | |
| + | if(method.equals("setAppID") && !prm.equals("")){ |
| + | aneAdmob.setAppID(prm); |
| + | }else if(method.equals("setBannerID") && !prm.equals("")){ |
| + | aneAdmob.setBannerID(prm); |
| + | }else if(method.equals("setInterstitialID") && !prm.equals("")){ |
| + | aneAdmob.setInterstitialID(prm); |
| + | }else if(method.equals("showBanner")){ |
| + | aneAdmob.showBanner(); |
| + | }else if(method.equals("hideBanner")){ |
| + | aneAdmob.hideBanner(); |
| + | }else if(method.equals("showInterstitial")){ |
| + | aneAdmob.showInterstitial(); |
| + | }else if(method.equals("loadInterstitial")){ |
| + | aneAdmob.loadInterstitial(); |
| + | }else{ |
| + | Log.e("njf.jp.aneadmob", "ANEAdmobFREFunction:no method or invalid prm " + method); |
| + | } |
| + | return null; |
| + | } |
| + | |
| + | |
| + | こちらも分からない部分があれば「[[AndroidでのANEの作成1_Android側の作成]]」を参照してください。 |
| + | |
| + | *jarファイルの取り出し [#re49287b] |
| + | |
| + | jarファイルの取り出しについては、[[こちらの記事:http://njf.jp/cms/modules/xpwiki/?Android%E3%81%A7%E3%81%AEANE%E3%81%AE%E4%BD%9C%E6%88%901_Android%E5%81%B4%E3%81%AE%E4%BD%9C%E6%88%90#veeed4bc]]と同じです。 |
| + | |
| + | ツールバーの「Build->Rebuild Project」でビルドし直して、aneadmob-release.aarファイルを探し出し、zip解凍してください。必要なのは「classes.jar」のみです。 |
| | | |
| | | |
- | 制作中 | + | -[[AndroidでのAdmobのANEの作成]]にもどる |
| + | -[[AndroidでのAdmobのANEの作成_swcの作成]]に進む |