Я хочу интегрировать Microsoft Ads в свой проект Xamarin.Forms. Я реализовал рекламу Microsoft, как показано в этом уроке Джеймса Монтемагно . Я добавил рекламный баннер на 2 страницах. Баннерная реклама показывается на первой и второй странице. Сначала реклама показывается на первой странице при запуске приложения, затем при переходе на вторую страницу показывается реклама. Но как только я возвращаюсь на первую страницу со страницы второй страницы, я получаю эту ошибку
System.InvalidOperationException: 'Cannot assign a native control without an Element; Renderer unbound and/or disposed. Please consult Xamarin.Forms renderers for reference implementation of OnElementChanged.'
Я также сослался на этот ответ в Stackoverflow . Когда я реализовал код в ответе, приведенном здесь, я не получаю никакого объявления на первой странице при возвращении со второй страницы.
Вот мой код:
[assembly: ExportRenderer(typeof(MicrosoftBannerAdControlView), typeof(MicrosoftBannerAdsImplementation))]
namespace AdExampleApp.UWP.PlatformSpecific.MicrosoftAdsImplementation
{
public class MicrosoftBannerAdsImplementation : ViewRenderer<Controls.AdsControl.MicrosoftAds.MicrosoftBannerAdControlView, AdControl>
{
string bannerId = "test";
AdControl adView;
string applicationId = "3f83fe91-d6be-434d-a0ae-7351c5a997f1";
bool isRegist = false;
protected override void OnElementChanged(ElementChangedEventArgs<MicrosoftBannerAdControlView> e)
{
base.OnElementChanged(e);
if (Control == null && isRegist != true)
{
CreateNativeAdControl();
SetNativeControl(adView); // I am getting the ERROR Here
isRegist = true;
}
}
void CreateNativeAdControl()
{
if (adView != null)
return;
var width = 300;
var height = 50;
if (AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Desktop")
{
width = 728;
height = 90;
}
adView = new AdControl
{
ApplicationId = applicationId,
AdUnitId = bannerId,
HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center,
VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom,
Height = height,
Width = width
};
}
}
}
Вот мой XAML-код первой страницы
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
....
xmlns:MicrosoftAds="clr-namespace:AdExampleApp.Controls.AdsControl.MicrosoftAds">
<ContentPage.Content>
<StackLayout>
<Button Text="Go To Page 2" Clicked="GoToPage2" />
<MicrosoftAds:MicrosoftBannerAdControlView x:Name="MicrosoftBannerAd" VerticalOptions="EndAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
Я аналогичным образом реализовал Microsoft Ads на второй странице. На первой и второй странице показывается реклама, но когда я go возвращаюсь со второй страницы на первую страницу, я получаю сообщение об ошибке.