NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 6:29

Ahoj, chtěl jsem si zkusit přidat do aplikace banery admob. Všechno jsem dělal podle tohoto videa: https://www.youtube.com/watch?…. Na výstupu se mi ale ani jedna z reklam nezobrazí , ani dva banery, ani interstitial po skisknutí tlačítka. Nevím proč. Ukážu vám tedy svůj kód. Budu rád, když se na to podíváte.
Díky moc

Main activity

package com.example.admobadsdemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;


public class MainActivity extends AppCompatActivity {

    Button btShow;
    AdView adView1, adView2;
    InterstitialAd interstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btShow = findViewById(R.id.bt_show);
        adView1 = findViewById(R.id.ad_view1);
        adView2 = findViewById(R.id.ad_view2);
        MobileAds.initialize(this, "ca-app-pub-******5078870241~******8095");

        AdRequest adRequest = new AdRequest.Builder().build();
        adView1.loadAd(adRequest);
        adView2.loadAd(adRequest);

        interstitialAd = new InterstitialAd(this);
        interstitialAd.setAdUnitId("ca-app-pub-******5078870241/******7313");
        interstitialAd.loadAd(new AdRequest.Builder().build());

        btShow.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                interstitialAd.show();

            }
        });
    }
}

activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/bt_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show ad"
        android:textAllCaps="false"
        android:layout_centerInParent="true"/>

    <com.google.android.gms.ads.AdView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ad_view1"
        android:layout_centerHorizontal="true"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-***7865078870241/***5339174"
        />

    <com.google.android.gms.ads.AdView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ad_view2"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-***7865078870241/***3374818"
        />


</RelativeLayout>

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.admobadsdemo">
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

build.gradle(mo­dule app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.admobadsdemo"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.android.gms:play-services-ads:15.0.1'
}
 
Odpovědět
3.3.2020 6:29
Avatar
Odpovídá na Døminik
Matúš Olejník:3.3.2020 7:17

Ahoj, ja by som išiel podľa oficiálnej dokumentácie, tu je celý postup https://developers.google.com/…/quick-start

Nižšie si môžeš rozkliknúť zasa postup pre jednotlivé typy reklám, napr. banner reklama https://developers.google.com/…droid/banner
kde máš aj spomenuté, že testovať máš s testovacími reklamami

Always test with test ads
ca-app-pub-3940256099942­544/6300978111

Keď budeš chcieť vyskúšať reálne reklamy budeš musieť vygenerovať podpísaný .apk súbor

Nahoru Odpovědět
3.3.2020 7:17
/* I am not sure why this works but it fixes the problem */
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 9:48

Dobře, pak jenom nechápu proč mu to funguje, když to spouští ze studia na virtuálním zařízení...?

Editováno 3.3.2020 9:49
 
Nahoru Odpovědět
3.3.2020 9:48
Avatar
Odpovídá na Døminik
Matúš Olejník:3.3.2020 10:31

Aha, ale to si v pôvodnom príspevku nespomenul :D Na Googli sa dá dočítať, že kedysi existoval taký problém tak skús najprv použiť najnovšiu verziu

implementation 'com.google.android.gms:play-services-ads:19.0.0'
Nahoru Odpovědět
3.3.2020 10:31
/* I am not sure why this works but it fixes the problem */
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 11:16

Až budu na pc, zkusím. Mimochodem tam ale taky píšou že pokud někdo zobrazuje reálné reklamy na virtuálním zařízení, hrozí mu pozastavení účtu. Ale stejně tam mám 0,-

 
Nahoru Odpovědět
3.3.2020 11:16
Avatar
Odpovídá na Døminik
Matúš Olejník:3.3.2020 12:57

Áno, je to možné preto máš používať najprv tie testovacie. Inak za zobrazenie sa mi zdá, že ani peniaze nie sú, treba aby na ne niekto klikol :D

Nahoru Odpovědět
3.3.2020 12:57
/* I am not sure why this works but it fixes the problem */
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 13:51

Ale ano, i za pouhé zobrazení jsou ale je to jen třeba kolem 1$ za 1000 zobrazení.

 
Nahoru Odpovědět
3.3.2020 13:51
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 16:02

Tak teď opravdu nevím co je v manifestu na tomto špatně...
Nebo přece tam nemá být místo toho mého id(za com.google.an­droid.gms.ads) napsáno "APPLICATION_ID" jak je to v dokuntaci.

...
  <application
        android:name="com.google.android.gms.ads.ca-app-pub-5217865078870241~3715738095"
        android:value="ca-app-pub-5217865078870241~3715738095"

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 
Nahoru Odpovědět
3.3.2020 16:02
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 16:11

Chybělo mi tam > :-)

 
Nahoru Odpovědět
3.3.2020 16:11
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 17:30

Tak jsem přidal tu novější verzi, id toho banneru jsem přepsal na zkušební, upravil manifest. Teď se aplikace ihned po spuštění stopne("com.e­xample.google­adsdemo2 has stopped").
Main activity

package com.example.googleadsdemo2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAdView = findViewById(R.id.adView);

        MobileAds.initialize(this, "ca-app-pub-5217865078870241~3715738095");
           /*
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }

            */
        //});




        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);


    }
}

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.googleadsdemo2">

    <uses-permission android:name="android.permission.INTERNET"/>



    <application>
        <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-5217865078870241~3715738095"

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 
Nahoru Odpovědět
3.3.2020 17:30
Avatar
Odpovídá na Døminik
Matúš Olejník:3.3.2020 18:33

Neviem ako skúsený si v programovaní, ale popis že sa aplikácia nečakane zastavila nijako nám, ktorí ti chceme pomôcť, nepomôže.

Treba otvoriť Logcat nájsť tam chybu ktorá nastala a poslať ju sem.

Ďalej nevidím že by si používal to testovacie unitId ako je v oficiálnej dokumentácii a rovnako inicializáciu toho všetkého máš tiež úplne inak. V dokumentácii do tej metódy initialize neposielajú to id ale listener.

Keď uz si použil najnovšiu knižnicu tak postupuj aj podľa najnovšej príručky.

Nahoru Odpovědět
3.3.2020 18:33
/* I am not sure why this works but it fixes the problem */
Avatar
Døminik
Člen
Avatar
Døminik:3.3.2020 20:01

Ten unitId jsi nemohl vidět, protože jsem neposlal activity_main. Dávám ji sem tedy taky stejně jako logcast.
Tu inicializaci jsem udělal podle dokumentace. No a APPLICATION_ID mám dát svoje, nikoliv nějaké testovací.

Logcast logcast screen s označenými chybami

2020-03-03 19:36:48.024 13031-13031/? I/zygote: Not late-enabling -Xcheck:jni (already on)
2020-03-03 19:36:48.053 13031-13031/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
2020-03-03 19:36:48.112 13031-13046/? E/zygote: Failed writing handshake bytes (-1 of 14): Broken pipe
2020-03-03 19:36:48.112 13031-13046/? I/zygote: Debugger is no longer active
2020-03-03 19:36:48.284 13031-13031/? D/AndroidRuntime: Shutting down VM
2020-03-03 19:36:48.286 13031-13031/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.googleadsdemo2, PID: 13031
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.googleadsdemo2/com.example.googleadsdemo2.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:696)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:659)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:552)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.example.googleadsdemo2.MainActivity.onCreate(MainActivity.java:24)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:8072020-03-03 19:36:48.427 13031-13059/? W/zygote: Unsupported class loader
2020-03-03 19:36:48.427 13031-13059/? W/zygote: Skipping duplicate class check due to unsupported classloader
2020-03-03 19:36:48.430 13031-13059/? I/DynamiteModule: Considering local module com.google.android.gms.ads.dynamite:0 and remote module com.google.android.gms.ads.dynamite:21200
2020-03-03 19:36:48.430 13031-13059/? I/DynamiteModule: Selected remote version of com.google.android.gms.ads.dynamite, version >= 21200
2020-03-03 19:36:48.431 13031-13059/? V/DynamiteModule: Dynamite loader version >= 2, using loadModule2NoCrashUtils
2020-03-03 19:36:48.457 13031-13066/? W/DynamiteModule: Local module descriptor class for com.google.android.gms.measurement.dynamite not found.
2020-03-03 19:36:48.462 13031-13066/? I/DynamiteModule: Considering local module com.google.android.gms.measurement.dynamite:0 and remote module com.google.android.gms.measurement.dynamite:11
2020-03-03 19:36:48.462 13031-13066/? I/DynamiteModule: Selected remote version of com.google.android.gms.measurement.dynamite, version >= 11
2020-03-03 19:36:48.462 13031-13066/? V/DynamiteModule: Dynamite loader version >= 2, using loadModule2NoCrashUtils
2020-03-03 19:36:48.463 13031-13059/? W/zygote: Unsupported class loader
2020-03-03 19:36:48.464 13031-13059/? W/zygote: Skipping duplicate class check due to unsupported classloader
2020-03-03 19:36:48.488 13031-13066/? W/zygote: Unsupported class loader
2020-03-03 19:36:48.493 13031-13066/? W/zygote: Skipping duplicate class check due to unsupported classloader
2020-03-03 19:36:48.515 13031-13066/? W/DynamiteModule: Local module descriptor class for com.google.android.gms.measurement.dynamite not found.
2020-03-03 19:36:48.766 13031-13069/? I/FA-Ads: App measurement initialized, version: 22013
2020-03-03 19:36:48.766 13031-13069/? I/FA-Ads: To enable debug logging run: adb shell setprop log.tag.FA VERBOSE

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.gms.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
        tools:ignore="MissingConstraints">
    </com.google.android.gms.ads.AdView>


</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity

package com.example.googleadsdemo2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

    }

}
 
Nahoru Odpovědět
3.3.2020 20:01
Avatar
Odpovídá na Døminik
Matúš Olejník:3.3.2020 20:22

Okey, sorry ja som narážal na tie "ca-app-pub.." v java kóde, som sa zle vyjadril.

Tá chyba

Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

V manifeste máš

android:theme="@style/AppTheme"

ale to potom potom prepíšeš v java kóde tým, že tvoja aktivita extenduje AppCompatActivity. Tak buď skús v manifeste zmeniť tému napr. na

android:theme="@style/Theme.AppCompat.Light"

alebo tvoja aktivita nech neextenduje AppCompatActivity ale len Activity.

A ešte by som odporúčil, neviem v čom to kódiš ale ak v AS alebo IntelliJ tak v tom editore vyklikaj tie constrainty namiesto toho že ich ignoruješ :D

tools:ignore="MissingConstraints"
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
3.3.2020 20:22
/* I am not sure why this works but it fixes the problem */
Avatar
Døminik
Člen
Avatar
Døminik:4.3.2020 8:21

Jo, po té změně z AppCompatActivity na Activity to jede. Tyhle vlastnosti se musím ještě doučit. Díky

 
Nahoru Odpovědět
4.3.2020 8:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.