Как можно проверить в Unity, была ли закрыта межстраничная реклама от AdMob?

После отображения межстраничной рекламы необходимо её очистить. Однако если вызвать Destroy() сразу после показа, реклама открывается и тут же закрывается. Как можно проверить, что реклама была просмотрена и закрыта, прежде чем вызвать Destroy()? Поделитесь, пожалуйста, возможными решениями для этой задачи.
  • 11 октября 2024 г. 17:32
Ответы на вопрос 2
В Unity с использованием SDK AdMob для отображения межстраничной рекламы можно отслеживать состояния рекламы с помощью колбэков, предоставляемых библиотекой. Чтобы проверить, была ли реклама закрыта, вы можете реализовать обработчики событий на статус показа рекламы.

Вот основные шаги, чтобы реализовать это:

1. **Подписывайтесь на события**: Используйте события `OnAdClosed` и `OnAdFailedToShow` для обработки состояния рекламы.

2. **Создайте обработчики**: Реализуйте логику, которая будет управлять уничтожением рекламы только после того, как она была закрыта.

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

```csharp
using GoogleMobileAds.Api;
using UnityEngine;

public class AdManager : MonoBehaviour
{
    private InterstitialAd interstitial;

    void Start()
    {
        // Инициализация AdMob
        MobileAds.Initialize(initStatus => { });
        
        RequestInterstitial();
    }

    private void RequestInterstitial()
    {
        string adUnitId = "ваш_идентификатор_рекламы";
        interstitial = new InterstitialAd(adUnitId);

        // Подписка на события
        interstitial.OnAdClosed += HandleOnAdClosed;
        interstitial.OnAdFailedToShow += HandleOnAdFailedToShow;

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

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

    private void HandleOnAdClosed(object sender, System.EventArgs args)
    {
        // Эта функция будет вызвана, когда реклама закрыта
        Debug.Log("Реклама закрыта!");
        
        // Уничтожаем объект рекламы после её закрытия
        Destroy(interstitial);
        RequestInterstitial(); // Загружаем новую рекламу
    }

    private void HandleOnAdFailedToShow(object sender, System.EventArgs args)
    {
        Debug.Log("Не удалось показать рекламное объявление.");
        Destroy(interstitial);
        RequestInterstitial(); // Загружаем новую рекламу
    }
}
```

### Пояснение:

1. **Инициализация AdMob**: В методе `Start` вы инициализируете AdMob и запрашиваете межстраничную рекламу.

2. **Подписка на события**:
   - `HandleOnAdClosed`: Этот метод вызывается, когда реклама закрыта. Здесь вы уничтожаете объект рекламы и при необходимости запрашиваете новую.
   - `HandleOnAdFailedToShow`: Этот метод вызывается, если реклама не может быть показана; в этом случае также уничтожается текущая реклама и запрашивается новая.

Это позволит вам управлять ресурсами и обеспечит правильное освобождение объектов после завершения показа рекламы.
Можно использовать событие OnAdFullScreenContentClosed, оно срабатывает, когда реклама закрывает полноэкранное содержимое. Ещё один вариант: использовать колбеки, например, OnUnityAdsDidFinish. Они помогают определить, что рекламу закрыли.
Похожие вопросы