AdMob SmartBanner в сетке форм Xamain с автоматической высотой не отображается - PullRequest
0 голосов
/ 09 февраля 2020

Я создал приложение Hello World Xamarin Forms и добавил код для добавления объявления AdMob Smart Banner после этого учебного пособия. Это работало нормально, пока я не получил письмо от AdMob с надписью «Ограниченное обслуживание объявлений». Поэтому я вытащил свой старый код и запустил его в эмуляторе, и объявление вообще не показывалось, даже пустое пространство (хотя я все еще вижу пустое пространство в версии App Store).

Поэтому я создал пустое приложение «Hello World», следуя тому же руководству. Объявление вообще не показывалось. Я все проверил.

XAML -

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <!-- Place new controls here -->
    <Label Text="Welcome to Xamarin.Forms!" 
       HorizontalOptions="Center"
       VerticalOptions="CenterAndExpand" />
    <ctrl:GoogleAdView Grid.Row="1"/>
</Grid>

Тогда просто из любопытства я указал некоторую случайную высоту для строки объявления, и вуаля объявление появляется.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="50"/>
    </Grid.RowDefinitions>
    <!-- Place new controls here -->
    <Label Text="Welcome to Xamarin.Forms!" 
       HorizontalOptions="Center"
       VerticalOptions="CenterAndExpand" />
    <ctrl:GoogleAdView Grid.Row="1"/>
</Grid>

Ниже приведены подробности моего проекта (Android) -

NuGet packages list for Xamarin Forms Android project

Что-то изменилось в том, как мы используем AdMob в формах Xamarin?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Принятый ответ великолепен. Проблема возникает, когда нет соединения inte rnet. Вы остались с пустым пространством. Чтобы решить эту проблему, рассмотрите возможность использования плагина под названием Xam.Plugin.Connectivity . Вы можете использовать его для проверки состояния соединения во время инициализации, а также для обработки события ConnectivityChanged , чтобы помочь вам установить высоту равной нулю, если нет соединения inte rnet или соответствующей высоты, если устройство подключено. Также обратите внимание, что вам необходимо включить эти два разрешения android: ACCESS_NETWORK_STATE и ACCESS_WIFI_STATE . Вы можете включить их по адресу: Щелкните правой кнопкой мыши проект android> Свойства> Android Манифест> Необходимые разрешения. Пример:

public MyPage()
{
    InitializeComponent();

    if(CrossConnectivity.Current.IsConnected)
    {
        AdContainer.HeightRequest = //Set appropriate height;
    }
    CrossConnectivity.Current.ConnectivityChanged += ConnectionHasChanged;
}


private void ConnectionHasChanged(object sender, ConnectivityChangedEventArgs e)
{
    if (e.IsConnected)
    {
        AdContainer.HeightRequest = //Set appropriate height;
    }
    else
    {
        AdContainer.HeightRequest = 0;
    }
}


0 голосов
/ 09 февраля 2020

Мне всегда приходилось устанавливать Height на моем умном баннере. Мой макет немного отличается, так как у меня есть мой рекламный элемент управления внутри ViewCell, но высота logi c должна быть аналогичной для вашего RowDefinition.Height. Попробуйте следующий метод (я использую плагин Xamarin.Essentials, чтобы получить доступ к DeviceDisplay.MainDisplayInfo, но есть другие способы получить эти значения)

    public static int GetSmartBannerHeight() {
        DisplayInfo metrics = DeviceDisplay.MainDisplayInfo;

        double heightDp = metrics.Height / metrics.Density;

        if (heightDp <= 400) {
            return 32;
        }

        if (heightDp <= 720) {
            return 50;
        }

        return 90;
    }
...