4: 2016-07-20 (水) 13:07:38 njf[6] [7] [8] | 5: 2016-07-20 (水) 16:36:21 njf[6] [9] [10] | ||
---|---|---|---|
Line 118: | Line 118: | ||
あとは「Sync Now」という表示が出ていると思うので、それをクリックしてgradleファイルの内容をプロジェクトに反映させれば、Admobの広告表示に必要なライブラリの取り込みができます。 | あとは「Sync Now」という表示が出ていると思うので、それをクリックしてgradleファイルの内容をプロジェクトに反映させれば、Admobの広告表示に必要なライブラリの取り込みができます。 | ||
- | *主処理の追加とAndroidアプリとしてのテスト [#o254a294] | + | *主処理の追加 [#o254a294] |
広告表示の主処理となる部分を作っていきますが、あとでANEとして分離させないといけないので、サンプルなどにあるようにActivityに直接処理を書くわけにはいきません。admobaneライブラリの中に別クラスを作ってそこに主処理を書きます。 | 広告表示の主処理となる部分を作っていきますが、あとでANEとして分離させないといけないので、サンプルなどにあるようにActivityに直接処理を書くわけにはいきません。admobaneライブラリの中に別クラスを作ってそこに主処理を書きます。 | ||
Line 156: | Line 156: | ||
例えば、画面遷移5回毎に表示するなら一回目でロードし、4回も画面遷移すれば多分ロードは終わっているでしょうから、5回目の画面遷移で広告を表示する、といったふうに使います。そのため、ロードと表示のメソッドは分けておく必要があるのです。 | 例えば、画面遷移5回毎に表示するなら一回目でロードし、4回も画面遷移すれば多分ロードは終わっているでしょうから、5回目の画面遷移で広告を表示する、といったふうに使います。そのため、ロードと表示のメソッドは分けておく必要があるのです。 | ||
+ | |||
+ | ではクラスの詳細を解説します。 | ||
+ | まずコンストラクタは広告の初期化で必要なactivityを引数とします。 | ||
+ | |||
+ | public ANEAdmob(Activity activity){ | ||
+ | this.activity = activity; | ||
+ | } | ||
+ | |||
+ | 次にアプリケーションの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); | ||
+ | } | ||
+ | } | ||
+ | ここで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); | ||
+ | } | ||
+ | |||
+ | ここで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(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | *Androidアプリとしてのテスト [#w2a72b1c] | ||
+ | |||
+ | 次にANEAdmobクラスをAndroidでテストします。 | ||
+ | まずappの下のbuild.gradleに次の一行を加えます。 | ||
+ | |||
+ | compile project(':aneadmob') | ||
+ | |||
+ | さらにapp/src/main/AndroidManifest.xmlに次のパーミッションを加えます。 | ||
+ | |||
+ | <uses-permission android:name="android.permission.INTERNET"/> | ||
+ | <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> | ||
+ | |||
+ | あとはonCreateメソッドにボタンを押したときの処理を入れます。 | ||
+ | |||
+ | @Override | ||
+ | protected void onCreate(Bundle savedInstanceState) { | ||
+ | super.onCreate(savedInstanceState); | ||
+ | setContentView(R.layout.activity_main); | ||
+ | |||
+ | aneAdmob = new ANEAdmob(this); | ||
+ | |||
+ | aneAdmob.setAppID(APP_ID); | ||
+ | aneAdmob.setBannerID(BANNER_ID); | ||
+ | aneAdmob.setInterstitialID(INTER_ID); | ||
+ | |||
+ | Button button = (Button) findViewById(R.id.showBannerBtn); | ||
+ | |||
+ | assert button != null; | ||
+ | button.setOnClickListener(new View.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(View v) { | ||
+ | aneAdmob.showBanner(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | ); | ||
+ | |||
+ | button = (Button) findViewById(R.id.hideBannerBtn); | ||
+ | |||
+ | assert button != null; | ||
+ | button.setOnClickListener(new View.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(View v) { | ||
+ | aneAdmob.hideBanner(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | ); | ||
+ | button = (Button) findViewById(R.id.loadInterstitialBtn); | ||
+ | |||
+ | assert button != null; | ||
+ | button.setOnClickListener(new View.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(View v) { | ||
+ | aneAdmob.loadInterstitial(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | ); | ||
+ | |||
+ | button = (Button) findViewById(R.id.showInterstitialBtn); | ||
+ | |||
+ | assert button != null; | ||
+ | button.setOnClickListener(new View.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(View v) { | ||
+ | aneAdmob.showInterstitial(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | ); | ||
+ | |||
+ | } | ||
+ | |||
+ | これでテスト可能です。 | ||
*ANE呼び出し処理の追加 [#i5cd3b6c] | *ANE呼び出し処理の追加 [#i5cd3b6c] | ||
+ | Android上で問題なく実行されたら、ANEにするための処理を入れます。 | ||
+ | |||
+ | [[こちらを参考に: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に配置します。 | ||
制作中 | 制作中 |
(This host) = https://njf.jp