Unity AdMob - ClassNotFound: com.google.unity.ads.UnityAdListener - PullRequest
0 голосов
/ 30 декабря 2018

Мое приложение получает следующую ошибку при попытке загрузить или показать промежуточную рекламу через AdMob для Unity: ClassNotFoundException: com.google.unity.ads.UnityAdListener.

AndroidJavaException: java.lang.ClassNotFoundException: com.google.unity.ads.UnityAdListener
java.lang.ClassNotFoundException: com.google.unity.ads.UnityAdListener
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:453)
    at java.lang.Class.forName(Class.java:378)
    at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
    at com.unity3d.player.UnityPlayer.c(Unknown Source:0)
    at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source:72)
    at android.os.MessageQueue.next(MessageQueue.java:394)
    at android.os.Looper.loop(Looper.java:142)
    at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.unity.ads.UnityAdListener"

Мой основной рекламный код:

public class AdsTest : MonoBehaviour
{
  private InterstitialAd interstitial;

  public void LoadAd()
  {
    string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    interstitial = new InterstitialAd(adUnitId);

    interstitial.OnAdLoaded += HandleOnAdLoaded;
    interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
    interstitial.OnAdOpening += HandleOnAdOpened;
    interstitial.OnAdClosed += HandleOnAdClosed;
    interstitial.OnAdLeavingApplication += HandleOnAdLeavingApplication;

    AdRequest request = new AdRequest.Builder().Build();
    interstitial.LoadAd(request);
  }

  public void ShowAd()
  {
    if (interstitial.IsLoaded())
    {
        interstitial.Show();
    }
  }
  ...
}

Остальная часть класса AdsTest - это стандартные пустоты событий (OnAdLoaded, OnAdClosed и т. Д.), Такие же, как в Документы Google .

Вызов сценария объявлений из другого класса:

void OnTriggerEnter2D(Collider2D trigger)
{
    ReturnToStart();
    // where ads is a instance of the AdsTest class
    // ads = new AdsTest();
    ads.LoadAd();
    ads.ShowAd();
}

И я инициализировал AdMob Id в начале игры в объекте контроллера.

// executed when the app starts
string appId = "ca-app-pub-3522556458609123~3670809634";
MobileAds.Initialize(appId);

Я импортировал все активы из пакета Unity.и force разрешили зависимости сервисов воспроизведения.

Также мой AndroidManifest выглядит следующим образом:

screenshot

Среда и управление версиями:

Unity - 2018.3.0f2 Personal для Windows 10 x64

Android SDK - 27

Плагин AdMob - v3.15.1 (загружается с Github )

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) Client VM (build 25.191-b12, mixed mode, sharing)

Сервисы Play - как установлено через пакет Admob

Протестировано на AndRoid 8.1, API 27

emulator specs

1 Ответ

0 голосов
/ 28 июля 2019

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

  • Перейдите в раздел «Настройки сборки»> «Параметры проигрывателя»> «Параметры публикации» ( Документы по настройкам проигрывателя ).
  • Включите настраиваемую конфигурацию ProGuard.
  • Настройте файл proguard для работы с вашей проблемой.Со своей стороны фрагмент кода ниже делает эту работу.Но если вы используете дополнительные зависимости, они могут конфликтовать с этой конфигурацией.В таком случае это скорее попытка неудачи, пока не появится нужный конфиг… ProGuard docs .
-keep class com.google.unity.** {
   *;
}
-keep public class com.google.android.gms.ads.**{
   public *;
}
-keep public class com.google.ads.**{
   public *;
}
-keepattributes *Annotation*
-dontobfuscate

Подробнее читайте в блоге Я написал об этой проблеме.

ПРИМЕЧАНИЕ. В более позднем проекте с новейшей версией AdMob и Android SDK проблема не возникла.(По состоянию на май 2019 г.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...