Admob 插页式广告在从网站视图调用时不可点击


嘿,我

有一个Web html5游戏,我为它构建了一个应用程序,通过Admob获利。我使用 JavaScript 接口来处理来自 JavaScript 代码的应用程序事件。

大多数内容都运行良好,但显示的广告不可点击。其中一部分是完全无法点击的 - 您无法单击"关闭"按钮,"x"图标和"安装"按钮(移动到android播放并从广告下载应用程序)。在其他时候,只有"安装"按钮不起作用,或者计时器不倒计时只是写"还剩 30 秒"。

这是清单文件。我的详细信息替换为"xxx"

<manifest
    package="com.example.app"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <meta-data
        android:name="com.google.android.gms.ads.xxxxxx.xx.xxxxxxx"
        android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxx"
        />
    <application
        android:name="android.support.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:fullBackupContent="true"
        android:icon="@mipmap/ic_launcher"
        android:label="xxxxxx xxxxxxxx"
        android:theme="@style/AppTheme"
        android:debuggable="false"
        tools:ignore="GoogleAppIndexingWarning,HardcodedDebugMode"
        tools:replace="android:icon,android:label">
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
        <receiver android:name="com.tenjin.android.TenjinReferrerReceiver" android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER"/>
            </intent-filter>
        </receiver>
        <activity
            android:name="com.example.app.MainActivity"
            android:label="xxxxxxx xxxxxxxx" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- Required to get network connectivity (i.e. wifi vs. mobile) -->
</manifest>

这是主要活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myWebView = (WebView)findViewById(R.id.activity_main_webview);
    WebSettings ws= myWebView.getSettings();
    ws.setJavaScriptEnabled(true);
    ws.setDomStorageEnabled(true);
    ws.setMediaPlaybackRequiresUserGesture(false);
    myWebView.getSettings().setUseWideViewPort(true);
    myWebView.addJavascriptInterface(new WebAppInterface(this), "MyJSClient");
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebChromeClient(new WebChromeClient());
    myWebView.getSettings().setBuiltInZoomControls(true);
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    myWebView.loadUrl(gameUrl);
    if(allowInterstitialAds){
        mInterstitialAd = new InterstitialAd(this);
        if(isTest){
            mInterstitialAd.setAdUnitId(TESTadmobUnitIdInterstitial);
        } else{
            mInterstitialAd.setAdUnitId(admobAdUnitIdInterstitial);
        }
        loadInterstitialAd();
        mInterstitialAd.setAdListener(new AdListener(){
            @Override
            public void onAdLoaded(){
                Log.i(TAG,"ad successfully loaded");
            }
            @Override
            public void onAdClosed() {
                makeWebviewVisible();
                myWebView.loadUrl("javascript:(window.onload = function(){onAdClosed();})()");
                // Load the next interstitial.
                loadInterstitialAd();
            }
        });
    }
}
public void loadInterstitialAd(){
    Log.i(TAG,"loadInterstitialAd function called");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
public void startInterstitialAdProcess(){
    if (mInterstitialAd.isLoaded()) {
        Log.i(TAG,"Ad will run now");
        hideWebView();
        mInterstitialAd.show();
        loadInterstitialAd();
    }
    else {
        Log.i(TAG, "Ad not loaded");
    }
}
public void hideWebView(){
    Log.i(TAG,"hiding webview");
    myWebView.setVisibility(View.GONE);
}
public void makeWebviewVisible(){
    Log.i(TAG,"making webview visible");
    myWebView.setVisibility(View.VISIBLE);
}
@Override
protected void onPause(){
    super.onPause();
    if(myWebView != null){
        myWebView.onPause();
        myWebView.pauseTimers();
        myWebView.loadUrl("javascript:(window.onload = function(){onPause();})()");
    }
}
@Override
protected void onResume(){
    super.onResume();
    TenjinSDK instance = TenjinSDK.getInstance(this, TenjinApiKey);
    instance.connect();
    if(myWebView != null){
        myWebView.onResume();
        myWebView.resumeTimers();
        myWebView.loadUrl("javascript:(window.onload = function(){onResume();})()");
    }
}
public class WebAppInterface {
    Context mContext;
    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }
    @JavascriptInterface
    public void JSshowInterstitialVideo(){
        Log.i(TAG,"JSshowInterstitialVideo called in the app jsinterface");
        displayLoadedAd();
    }
 }

我试图修复它几天
感谢您的任何帮助。

回复晚了,但可能会帮助某人。

pauseTimers() 是这里的罪魁祸首。删除它以解决问题。暂停活动时执行它会冻结所有内容,包括与广告相关的 Web 视图。

根据文档。 暂停计时器是全局调用。

暂停所有 Web 视图的所有布局、分析和 JavaScript 计时器。这是一个全局请求,不仅限于此 WebView。如果应用程序已暂停,这可能很有用。

if (mInterstitialAd.isLoaded()) {
 mInterstitialAd.show();
//here call webview
}else{
//here call webview some time not load ad so, it open webview}

使用此方法解决您的问题。首先加载广告和广告加载 onCreate() 比显示和广告关闭并打开网络视图。如果广告没有加载互联网问题,所以你直接调用网络视图。如果在真实设备中进行测试,则添加测试设备ID。