HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0515
mktAdmobが正しく表示されない機種がある件について6解決


mkt

リンク

2020/5/15(Fri) 21:59:30|NO.90561

Admobが、一部のバージョンでバナーが正しく表示されない不具合に苦しんでいます。
過去ログのNO.85215で窓月らら様に挙げていただいているソースで
HspActivityを更新しても、以下のようなエラーが出てしまい、コンパイルできません。


[javac] 警告: [options] ソース値1.5は廃止されていて、今後のリリースで削除される予定です
[javac] 警告: [options] ターゲット値1.5は廃止されていて、今後のリリースで削除される予定です
[javac] 警告: [options] 廃止されたオプションについての警告を表示しないようにするには、-Xlint:オプションを使用します。
[javac] C:\Users\user\Pictures\t_apk_7\moon_tears02_2\src\tv\hsp\HspActivity.java:571: エラー: シンボルを見つけられません
[javac] MarginLayoutParams params = new MarginLayoutParadispms(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
[javac] ^
[javac] シンボル: クラス MarginLayoutParadispms
[javac] 注意:C:\Users\user\Pictures\t_apk_7\moon_tears02_2\src\tv\hsp\HspActivity.javaは非推奨のAPIを使用またはオーバーライドしています。
[javac] 注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
[javac] エラー1個
[javac] 警告3個

hspのバージョンは3.5
Dish helper はvr.1.6です。
その他にも要因となる要素があるのでしょうか。



この記事に返信する


mkt

リンク

2020/5/15(Fri) 22:02:16|NO.90562

どのアプリでも同じ現象に立ち向かっていますが
今Android 7.0の方から症状の報告が届いています。

https://play.google.com/store/apps/details?id=hsp20171023.moon_tears02_2



窓月らら

リンク

2020/5/19(Tue) 04:46:48|NO.90599

AdMobについてはいろいろトラブル多いですよねぇ・・・。
OSの仕様がコロコロ変わってレイアウト指定が無反応になったり。
とりあえず当方では Android 9 まで大丈夫そうなのですが、10はまだ未確認。

現在使用しているコードを晒します。
バナーは下固定で、実行時の画面縦サイズの10分の1の高さになります。
HSPコード側からも同様に下10分の1を空けることでレイアウトがほぼ一致します。
ただしDishのスケーリングを使用している場合はうまく計算が合いませんので
自前で画面サイズを調整する必要はあると思われます。
(私はいくつかの理由から自前スケーリングにしています)

なお、あえて少し古いバージョンで開発しています。
これでも一応最新OSに対応はできてます・・・。
android-sdk-windows API-21
jdk1.6.0_23 (これは署名の都合、Dish helper 改造しています)
android-ndk-r10e
apache-ant-1.9.14

以下は私の「いろぷち」で使っているものです。
https://play.google.com/store/apps/details?id=com.miecat.iroputi.free

HspActivity.java のAdMob部分。オリジナルソースと比較してみてください。

// for AdMob static AdView _adView; static final String APP_ID = ""; static final String BANNER_AD_UNIT_ID = ""; static InterstitialAd _interstitialAd; static final String INTERSTITIAL_AD_UNIT_ID = ""; //static final String TestDeviceID = "*******"; static HspActivity _instance; private static PopupWindow popUp; private static LinearLayout layout; private static LinearLayout mainLayout; private static boolean adsinited = false; private static boolean bShow = false; private static int disp_width = 0; private static int disp_height = 0; private static int ad_height = 0; //独自 public static HspActivity getInstance(){ return _instance; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _instance = this; WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE); Display disp = windowmanager.getDefaultDisplay(); disp_width = disp.getWidth(); disp_height = disp.getHeight(); ad_height = disp_height/10; //独自 Log.i("HspActivity","size"+disp_width+"x"+disp_height); MobileAds.initialize(getApplicationContext(),APP_ID); _adView = new AdView(this); _adView.setAdSize(AdSize.SMART_BANNER); _adView.setAdUnitId(BANNER_AD_UNIT_ID); _adView.setBackgroundColor(Color.TRANSPARENT); _adView.setVisibility(View.VISIBLE); _adView.loadAd( new AdRequest.Builder() //.addTestDevice(TestDeviceID) .build() ); layout = new LinearLayout(_instance); mainLayout = new LinearLayout(_instance); // The layout system for the PopupWindow will kill some pixels due to margins/paddings etc(No way to remove it), so padd it to adjust layout.setPadding(-5, -5, -5, -5); layout.setOrientation(LinearLayout.VERTICAL); //interstitial _interstitialAd = new InterstitialAd(this); _interstitialAd.setAdUnitId(INTERSTITIAL_AD_UNIT_ID); _interstitialAd.setAdListener(new AdListener() { @Override public void onAdClosed() { requestNewInterstitial(); } }); requestNewInterstitial(); } private void requestNewInterstitial() { AdRequest adRequest = new AdRequest.Builder() //.addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // All emulators //.addTestDevice(TestDeviceID) .build(); _interstitialAd.loadAd(adRequest); } public void showIntersAd() { runOnUiThread(new Runnable() { @Override public void run() { if (_interstitialAd.isLoaded()) { _interstitialAd.show(); } } }); } public int hideAd() { if(adsinited) { runOnUiThread(new Runnable() { @Override public void run() { _adView.removeView(layout); _adView.setVisibility(View.GONE); //_adView.setVisibility(View.GONE); //_adView.pause(); bShow = false; } }); return 0; } return -1; } public int showAd() { if(adsinited) { if ( bShow == false ) { //layout.setEnabled(true); //layout.setVisibility(View.VISIBLE); //_adView.resume(); //bShow = true; } return -1; } if(_adView!=null) { Log.i("HspActivity","callAdMob."); _instance.runOnUiThread(new Runnable() { @Override public void run() { adsinited = true; // Out popup window popUp = new PopupWindow(_instance); popUp.setBackgroundDrawable(null); // 背景透明(独自追加) // This is the minimum size for AdMob, we need to set this in case our target device run at 320x480 resolution (Otherwise no ad will be shown, see the padding kill below) popUp.setWidth(disp_width+10); popUp.setHeight(ad_height); popUp.setClippingEnabled(false); MarginLayoutParams params = new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); params.setMargins(0, 0, 0, 0); layout.addView(_adView, params); popUp.setContentView(layout); _instance.setContentView(mainLayout, params); Log.i("HspActivity","loadAd."); popUp.showAtLocation(mainLayout, Gravity.NO_GRAVITY, -5, disp_height-ad_height+4); popUp.update(); bShow = true; } }); } else { Log.i("HspActivity","callAdMob failed."); } return 0; } @Override protected void onResume() { super.onResume(); if (_adView != null) { _adView.resume(); } } @Override protected void onPause() { if (_adView != null) { _adView.pause(); } super.onPause(); } @Override protected void onDestroy() { if (_adView != null) { if(adsinited) { popUp.dismiss(); } _adView.destroy(); } super.onDestroy(); } public int callAdMob( int val ) { if(_adView!=null) { Log.i("HspActivity","callAdMob."); if ( val < 0 ) { hideAd(); return 0; } if ( val == 0 ) { showAd(); return 0; } if (( val & 16 )==16) { HspActivity.getInstance().showIntersAd(); return 0; } } else { Log.i("HspActivity","callAdMob failed."); } return 0; }

AndroidManifest.xml は以下のようになってます。(xxx は見本用のダミーです)
uses-permission あたりはアプリ内容によります。

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="28" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <uses-library android:name="org.apache.http.legacy" android:required="false"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> <activity android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.Translucent" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> <activity android:name="tv.hsp.HspActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:label="@string/app_name"> <meta-data android:name="android.app.lib_name" android:value="xxx" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-feature android:name="android.hardware.vibrate" android:required="false" /> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </manifest>

他所でもチラッと書いたのですが、結構重要なtips
AdMob広告が表示されている状態でend命令で終了すると、
結構な確率でエラーを吐いて終了します。
これは事前にAdMobを閉じて少しウエイトを入れてやることで解決します!

*exit devcontrol "AdMob",-1 // AdMob非表示(これが無いとエラーが出ることがある) await 100 // ウエイトを入れないとエラーになる end

公式で直してほしいのですが・・・



窓月らら

リンク

2020/5/19(Tue) 17:33:12|NO.90602

アプリの評価のコメント見ましたが、
Android 7.0 からレイアウトが無視され上部に表示される問題があります。
Android 6.0 まではこの問題はありません。
実際は7.0以降すべての環境で起こると思われます。
上記で提示したコードで Android 9.0 までは問題ないことを確認できております。
いまのところクレームついてないので10も大丈夫かもしれません。



mkt

リンク

2020/5/19(Tue) 19:12:28|NO.90603

>窓月らら様
丁寧に教えていただきまして、ありがとうございました。

いろぷち、可愛すぎます!!これははまってしまいそうです!

実機での症状で言いますと、Android6.0以降 Admobの表示が不安定でしたが
3.6bの更新後は以下を修正すると、android10に関しては表示されました。
566行目 popUp.setWindowLayoutMode(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

それでもAndroid 7.0では症状が改善されなかったため
窓月らら様の過去スレを参考にして次の部分だけ直したところ、Android7.0でも一応の改善が見られました。
popUp.showAtLocation(mainLayout, Gravity.NO_GRAVITY, -5, disp_height-(disp_height/10)+4);

今回いただいた修正で今後対応していきたいと思います。
本当にありがとうございました。



mkt

リンク

2020/5/19(Tue) 19:13:48|NO.90604

あ、いろぷちのバナー
Android10では、とてもきれいに表示されていましたよ。



窓月らら

リンク

2020/5/24(Sun) 00:55:34|NO.90621

解決された様子でよかったです。
Android 10でも動くみたいですね、ご報告ありがとうございます。



ONION software Copyright 1997-2023(c) All rights reserved.