it-swarm.com.de

Interstitial Admob-Anzeigen: "IllegalStateException: Nur Vollbildaktivitäten können Orientierung anfordern"

Hintergrund

Ich habe eine App mit Admob SDK verwendet, um Interstitial-Anzeigen (Vollbild-Anzeigen) anzuzeigen.

Kürzlich hat Google das SDK zusammen mit vielen anderen Dingen (Build-Tools, Gradle-Plugin, IDE usw.), einschließlich Admob (Firebase-Anzeigen), aktualisiert.

compile 'com.google.firebase:firebase-ads:11.4.2'

Das Problem

Nach der Aktualisierung habe ich festgestellt, dass die App abstürzt, wenn die App versucht, eine Interstitial-Anzeige anzuzeigen.

Das Absturzprotokoll ist so:

10-28 14:01:01.394 4523-4523/... I/Ads: Ad opening.
10-28 14:01:01.400 1606-2154/? E/ActivityManager: Activity Manager Crash. UID:10080 PID:4523 TRANS:63
                                                  Java.lang.IllegalStateException: Only fullscreen activities can request orientation
                                                      at com.Android.server.am.ActivityRecord.setRequestedOrientation(ActivityRecord.Java:2189)
                                                      at com.Android.server.am.ActivityManagerService.setRequestedOrientation(ActivityManagerService.Java:4975)
                                                      at Android.app.IActivityManager$Stub.onTransact(IActivityManager.Java:1101)
                                                      at com.Android.server.am.ActivityManagerService.onTransact(ActivityManagerService.Java:2927)
                                                      at Android.os.Binder.execTransact(Binder.Java:697)


10-28 14:01:01.403 4523-4523/... D/AndroidRuntime: Shutting down VM
10-28 14:01:01.406 4523-4523/... E/AndroidRuntime: FATAL EXCEPTION: main

Java.lang.RuntimeException: Unable to start activity ComponentInfo{.../com.google.Android.gms.ads.AdActivity}: Java.lang.IllegalStateException: Only fullscreen activities can request orientation

Die Sache ist, dass es vorher gut funktioniert hat. Nun bin ich mir nicht sicher, warum es passiert.

Beim Durchsuchen des Internets habe ich nichts gesehen, das über "Nur Vollbild-Aktivitäten kann um Orientierung" sprechen. 

Was ich im Manifest hatte, ist etwas alt, das vielleicht nicht mehr benötigt wird:

    <activity
        Android:name="com.google.Android.gms.ads.AdActivity"
        Android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
        Android:theme="@Android:style/Theme.Translucent"/>

Ich sage, es ist wahrscheinlich nicht nötig, weil ich es in den Tutorials nicht mehr sehen kann, obwohl ich mich daran erinnere, dass ich es früher getan habe:

Was ich versucht habe

  1. Ich habe versucht, den Manifesteintrag zu entfernen. Immer noch dasselbe Problem.

  2. Ich habe versucht, das Design auf "@Android: style/Theme.Translucent.NoTitleBar.Fullscreen" zu setzen, aber es hat nicht geholfen.

  3. Ich dachte sogar, dass es vielleicht daran liegt, dass ich derzeit Android 8.1 habe, aber als ich die App aus dem Play Store probierte, bemerkte ich, dass es gut funktioniert, ohne Abstürze.

  4. Ich habe versucht, auf Version 11.2.2 von admob zurückzugreifen und gradle v 2.3.3 zu verwenden, aber es half auch nicht.

  5. Beim Versuch eines Emulators mit Android 7.0 funktionierte es gut mit den neuesten Versionen von allem und dem Entfernen des gesamten Manifest-Aktivitäts-Tags.

  6. Ich habe versucht, dies in gradle file zu verwenden, anstatt das, was ich verwendet habe:

    "com.google.Android.gms: play-services-ads: 11.4.2" kompilieren 

Stürzte immer noch auf meinem Gerät ab (Nexus 5x mit Android 8.1), stürzte jedoch nicht im Emulator ab.

  1. Schließlich habe ich versucht, die App auf dem Emulator mit Android 8.1 auszuführen, und sie stürzte genauso ab wie auf dem realen Gerät. 

  2. Dies wurde dem Google Admob-Team sowie dem Android-Ausgaben-Tracker gemeldet. Ich hoffe, dass sie mir dies beantworten werden.

Die Fragen

Was könnte die Ursache für dieses Problem sein?

Liegt es an Android 8.1? Wenn ja, wie funktionierte die ältere Version der App? Ich habe versucht, viele Versionen auf alte zurückzusetzen, trotzdem stürzte es ab.

Und vor allem, wie kann ich es lösen?

67

Es scheint, dass ein Upgrade auf:

com.google.firebase:firebase-ads:15.0.1

hat dieses Problem für mich gelöst. Ich habe es gerade auf Nexus 5X mit 8.1.0 getestet und Interstitial Admob-Anzeigen funktionieren jetzt.

Vollständigere Lösung:

build.gradle der App:

...

Android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'

    defaultConfig {
        ...

        targetSdkVersion 27

        ..
    }
}

dependencies {
    ...

    implementation 'com.google.firebase:firebase-core:15.0.2'
    implementation 'com.google.firebase:firebase-ads:15.0.1'

    ...
}
apply plugin: 'com.google.gms.google-services'

oberste Ebene build.gradle:

buildscript {
    ...

    dependencies {
        ...

        classpath 'com.google.gms:google-services:3.3.0'

        ...
    }
}

...
1
Ziem

EDIT

Jetzt ist eine neuere Version von Admob verfügbar. Ich bestätige, dass das Problem bei Verwendung der neuesten Versionen (15.0.1 oder neuer) nicht mehr erscheint, sodass Sie die neueste Version von Admob verwenden können

com.google.firebase:firebase-ads:17.1.2

festlegen der Zielversion auf die neueste Version, wenn Sie die zuvor vorgeschlagene Problemumgehung verwendet haben.

------------------------------------------------ ----------

Setzen Sie das Ziel auf Android API Level auf 26, um das Problem zu beheben, und warten Sie auf die Admob-Aktualisierung

In build.gradle

targetSdkVersion 26

wenn targetSdkVersion> 27 ist (> Android.os.Build.VERSION_CODES.Odies ist 26), erhalten Sie diese Fehlermeldung. Sie haben ActivityRecord in der neuesten Android-Version geändert und Folgendes hinzugefügt:

void setRequestedOrientation(int requestedOrientation) {
        if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen
                && appInfo.targetSdkVersion > O) {
            throw new IllegalStateException("Only fullscreen activities can request orientation");
        ....
        }

Die Änderung wurde in this commit eingeführt. 

Verhindern, dass Nicht-Vollbild-Aktivitäten die Orientierung beeinflussen. Dieses Die Änderungsliste erzwingt, dass Aktivitäten, die auf O und darüber hinaus abzielen, nur .__ sein können. Legen Sie eine Ausrichtung fest, wenn sie Vollbild sind.

und wahrscheinlich in admob lib haben einige Checks durcheinander gebracht

61
Silverstorm

versuchen Sie, dies in Ihrem Manifest hinzuzufügen 

<activity
Android:name="com.google.Android.gms.ads.AdActivity"
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
tools:replace="Android:theme"
 />

Oder, wenn Sie appcompat verwenden:

<style name="TranslucentTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowActionBar">false</item>
    <item name="Android:windowFullscreen">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    etc

Stellen Sie im Manifest sicher, dass die Aktivität mit deklariert ist

Android:theme="@style/TranslucentTheme"
41
Omar Mahmoud

Dieses Problem wird automatisch behoben, wenn Ad Mob sein Anzeigen-SDK für API 27 aktualisiert. Die Anzeigenabhängigkeit unterstützt API 27 daher aufgrund dieses Problems nicht.

 compile 'com.google.Android.gms:play-services-ads:11.8.0'

Nur Vollbild-Aktivitäten können Orientierung verlangen. Dies liegt an den Metadaten der Anzeigen in Ihrer Hauptfest-Datei. Admob sollte ihre SDK-Version für 27 aktualisieren. enter image description here

wenn Sie die Ziel-SDK-Version 27 eingestellt haben, erhalten Sie diesen Fehler, indem Sie Android sdk sehr schnell aktualisieren und einige Update-ADMOBs für die Integration mit Android sdk zurücklassen admob haben dieses Update ausstehend, sie sollten dies sehr bald tun. Es ist kein entwicklerseitiges Problem, wenn Sie diesem Absturz entkommen möchten, setzen Sie Ihr sdk auf 26.

2
Najaf Ali

bitte verwenden Sie keine Eigenschaften in Android Manifest-Dateien AdActivity.

bitte entfernen Sie diese Zeile aus der AdActivity in Manifest-Datei

Android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

Fügen Sie einfach die folgende Zeile zur Android Manifest-Datei hinzu.

    <activity Android:name="com.google.Android.gms.ads.AdActivity" />

Wenn Sie die gewünschte Aktivität als Hochformatmodus festlegen möchten, fügen Sie Ihrer Aktivität onCreate-Methode folgende Zeile hinzu:

if (Android.os.Build.VERSION.SDK_INT != Build.VERSION_CODES.O) {
   activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Bei Firebase ADS 17.0.0 und höheren Versionen verwenden Sie diese Zeile, um die Datei zu manifestieren. 

<application
...........>

    <meta-data
        Android:name="com.google.Android.gms.ads.APPLICATION_ID"
        Android:value="@string/app_id" />

</application>

Sie erhalten die App-ID über Admob -> Apps -> Ihre App -> App-Einstellungen -> App-ID. Bitte kopieren Sie diese App_Id in Ihr Projekt.

2

Ich habe den gleichen Absturz mit dem Vungle SDK (das über das Appodeal SDK mitgeliefert wurde) bekommen, so dass die Frage zu Admob SDK nicht genau beantwortet wird. Falls dies jedoch jemand mit Vungle oder Appodeal SDK bekommt:

Die Versionen waren wie folgt: Appodeal SDK - 2.4.2-220518, Vungle SDK - 6.2.5. Nach dem Upgrade auf das damals neueste Appodeal SDK (Version 2.4.9-051218) wurde ein neueres Vungle SDK (Version 6.3.12) hinzugefügt, und der Absturz trat nicht mehr auf.

0
Adomas