ページへ戻る
− Links
印刷
AndroidでのAdmobのANEの作成_Android側の作成
の編集 ::
NJF Wiki
xpwiki
:
AndroidでのAdmobのANEの作成_Android側の作成
の編集
# o254a294 の編集
ページ内容:
*主処理の追加 [#o254a294] 広告表示の主処理となる部分を作っていきますが、あとでANEとして分離させないといけないので、サンプルなどにあるようにActivityに直接処理を書くわけにはいきません。admobaneライブラリの中に別クラスを作ってそこに主処理を書きます。 一方、Activityの方は、それを呼び出すテスト用のコードのみになるようにします。 まず 「aneadmob->src->main->java->jp.njf.admob」の下にANEAdmobというクラスを作成します。 &ref(admobANEAdmobClass.jpg,mw:480,mh:360); 前述しましたが、このANEには以下の機能を実装予定です。 -各種IDの設定 -バナー広告の表示 -バナー広告の非表示 -インタースティシャル広告のロード -インタースティシャル広告の表示 最初の「各種ID」とは、AdmobのアプリケーションID、バナーID、インタースティシャルIDの3つです。 よってこのクラスには以下のpublicなメソッドが必要です。 |メソッド名|引数|機能| |setAppID|アプリケーションID(String型)|アプリケーションIDを設定する| |setBannerID|バナーの広告ID(String型)|バナーの広告IDを設定する| |setInterstitialID|インタースティシャルの広告ID(String型)|インタースティシャルの広告IDを設定する| |showBanner|なし|バナー広告の表示| |hideBanner|なし|バナー広告の非表示| |loadInterstitial|なし|インタースティシャル広告のロード| |showInterstitial|なし|インタースティシャル広告の表示| 戻り値は全てなし、つまりvoid型メソッドです。 ここで「インタースティシャル広告のロード」については説明が必要かも知れません。インタースティシャル広告は全画面で表示され、場合によっては動画なども含まれるため、データ容量が大きく、ネットから広告データをロードするのに時間がかかります。 それを素早く表示するためには、あらかじめロードしておいて、それが完了していたら表示する、という手順をふむことになります。ロードの直後にすぐ表示しようとすると、ロードが終わっていないのでたいてい失敗します。 例えば、画面遷移5回毎に表示するなら一回目でロードし、4回も画面遷移すれば多分ロードは終わっているでしょうから、5回目の画面遷移で広告を表示する、といったふうに使います。そのため、ロードと表示のメソッドは分けておく必要があるのです。 ではクラスの詳細を解説します。 まずコンストラクタは広告の初期化で必要なactivityを引数とします。 public ANEAdmob(Activity activity){ this.activity = activity; } 次にアプリケーションのIDを設定するメソッドです。これは広告を表示する前であることはもちろん、他のIDを設定する前に必ず一度実行する必要があります。 public void setAppID(String appID){ MobileAds.initialize(activity, appID); } 次にバナーのIDを設定する関数です。 バナーの初期化も行い、かつアプリの下の中心に表示するようにしています。 public void setBannerID(String bannerID){ if(bannerView == null) { bannerView = new AdView(activity); bannerView.setAdUnitId(bannerID); bannerView.setVisibility(AdView.GONE); bannerView.setAdSize(AdSize.BANNER); FrameLayout.LayoutParams adLayout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); adLayout.gravity = Gravity.BOTTOM | Gravity.CENTER; FrameLayout.LayoutParams adParams = adLayout; activity.addContentView(bannerView, adParams); bannerView.setBackgroundColor(Color.BLACK); } } バナーが二つ表示されるとやっかいなので、一度しか初期化できないようにif文でくくられています。 ここでsetBackgroundColorを使って背景色を黒にしています。 これはまれに広告のロードが終わっても画像が表示されず、透明のままになることがあり、するとユーザーの誤クリックを誘発しやすくなることを防ぐためです。 誤クリックが多いと、Admobはアカウント停止になる場合もあります。 Admobは特にバナーの規約が厳しいので、アプリのどこにどう表示するかは必ず規約を確認して下さい。 詳しくは「[[AdMob実装時の注意点]]」でも書いています。 バナーの表示と非表示はバナーの更新を止めて、viewのvisibilityを切り替えるだけです。 public void showBanner(){ if(bannerView.getVisibility() == AdView.VISIBLE){ return; } bannerView.setVisibility(AdView.VISIBLE); bannerView.resume(); bannerView.loadAd(makeAdRequest()); } public void hideBanner(){ if(bannerView.getVisibility() == AdView.GONE){ return; } bannerView.pause(); bannerView.setVisibility(AdView.GONE); } 通常、バナー広告は数十秒〜数分ごとに更新されます。 AdViewのpauseメソッドはこの更新を止めます。 バナーを消すと更新は不要なので呼び出しています。 アプリがバックグラウンドにまわったときも、余計な負荷を除くため、このpauseメソッドを呼び出し、再び前にまわったらresumeメソッドを呼び出すことをお勧めします。 ここの例では、単にバックグラウンドでhideBannerを、前にきたらshowBannerを呼び出すと良いでしょう。 ここでmakeAdRequestメソッドは広告用のリクエストを作るメソッドです。 private AdRequest makeAdRequest() { return new AdRequest.Builder().build(); } 一行しかありませんが、インタースティシャル広告でも使うのでメソッドにしています。また、AdRequestの作り方を return new AdRequest.Builder().addTestDevice("デバイスID").build(); とするとテスト用の広告が表示されるようになります。 「デバイスID」の部分はlogcatに I/Ads: Use AdRequest.Builder.addTestDevice("デバイスID") to get test ads on this device. といった感じで表示されるので探してみて下さい。 Admobは開発者が自ら広告をタップしたり、開発時に実際の広告を表示するのを禁止しています。 現実的には少々テストで表示したり、一度や二度ほどタップしたからいきなり問題が生じることはありませんが、何度も表示したり誤タップしてしまうとアカウント停止などのなんらかのペナルティがある可能性があります。 そのため、テスト時にはこのようにテスト用デバイスを設定することをお勧めします。 また、その時のためにこのようにAdRequestを作成するメソッドは別に用意しておいた方が、一カ所直せば良いので便利です。 インタースティシャルの方は簡単です。 public void setInterstitialID(String interstitialID){ interstitial = new InterstitialAd(activity); interstitial.setAdUnitId(interstitialID); } public void loadInterstitial(){ interstitial.loadAd(makeAdRequest()); } public void showInterstitial(){ if(interstitial.isLoaded()){ interstitial.show(); } } isLoadedはロード完了かどうかを判定するメソッドです。 インタースティシャルは規約的にも注意するのは表示させすぎないぐらいで、それほど難しい部分はありません。
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
「名古屋」の読みがな?(ひらがなで)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
[1]
Links list
(This host) = https://njf.jp
(This host)
/cms/modules/xpwiki/?cmd=edit&help=true&page=Android%E3%81%A7%E3%81%AEAdmob%E3%81%AEANE%E3%81%AE%E4%BD%9C%E6%88%90_Android%E5%81%B4%E3%81%AE%E4%BD%9C%E6%88%90