Рекламные вставки Admob не кликабельны при вызове из Webview - PullRequest
0 голосов
/ 07 января 2019

Эй, у меня есть веб-игра html5, и я создал приложение для нее, чтобы превратить ее в деньги с помощью Admob. Я использую интерфейс JavaScript для обработки события приложения из кода JavaScript.

Большинство вещей работает нормально, но показанная реклама не активна. Часть из них полностью недоступна для клика - вы не можете нажать на кнопку «закрыть», значок «x» и кнопку «установить» (чтобы перейти к игре на Android и загрузить приложение из рекламы). В других случаях не работает только кнопка «установить», или таймер не отсчитывает, а просто записывает «30 секунд до конца».

Вот файл манифеста. мои данные заменены на "ххх"

<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();
    }
 }

Я пытался исправить это в течение нескольких дней
Спасибо за любую помощь.

1 Ответ

0 голосов
/ 10 января 2019
if (mInterstitialAd.isLoaded()) {
 mInterstitialAd.show();
//here call webview
}else{
//here call webview some time not load ad so, it open webview}

Используйте этот метод для решения вашей проблемы. Сначала в onCreate () загружается реклама, и реклама загружается, а затем показывается, и реклама закрывается и открывается веб-просмотр. Если реклама не загружается из-за проблем с интернетом, звоните прямо в веб-браузер. Если вы тестируете на реальном устройстве, вы добавляете testDeviceId.

...