Xamarin Xamain表单网格中的AdMob SmartBanner未显示自动高度
我创建了一个Hello World Xamarin表单应用程序,并在教程之后添加了添加AdMob智能横幅广告的代码。在我收到AdMob的一封邮件说“限制广告服务”之前,这一切都很正常。所以我拿出我的旧代码,在模拟器中运行了一下,广告根本没有出现,甚至没有显示空白(尽管我仍然可以在应用商店版本中看到空白) 所以我按照同样的教程创建了一个空白的“Hello World”应用程序。广告根本没有出现。我核实了一切 XAML-Xamarin Xamain表单网格中的AdMob SmartBanner未显示自动高度,xamarin,xamarin.forms,xamarin.android,admob,Xamarin,Xamarin.forms,Xamarin.android,Admob,我创建了一个Hello World Xamarin表单应用程序,并在教程之后添加了添加AdMob智能横幅广告的代码。在我收到AdMob的一封邮件说“限制广告服务”之前,这一切都很正常。所以我拿出我的旧代码,在模拟器中运行了一下,广告根本没有出现,甚至没有显示空白(尽管我仍然可以在应用商店版本中看到空白) 所以我按照同样的教程创建了一个空白的“Hello World”应用程序。广告根本没有出现。我核实了一切 XAML- <Grid> <Grid.RowDefinition
<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)的详细信息-
我们在Xamarin表单中使用AdMob的方式是否有所改变?我一直必须在smart banner控件上设置高度。我的布局有点不同,因为我的广告控件位于
ViewCell
中,但是对于RowDefinition.height
,高度逻辑应该类似。尝试以下方法(我使用Xamarin.Essentials插件访问DeviceDisplay.MainDisplayInfo
,但还有其他方法可以获取这些值)
public static int GetSmartBannerHeight(){
DisplayInfo metrics=DeviceDisplay.MainDisplayInfo;
双倍高度dp=公制高度/公制密度;
如果HealdDP 所接受的答案是非常好的。当没有Internet连接时,问题就出现了。您需要留下一个空白。要解决这个问题,请考虑使用称为“强> XAM.Puxin”的插件。t以帮助您在没有互联网连接时将高度设置为零,或者在设备已连接时将高度设置为适当的高度。还请注意,您需要启用以下两个android权限:访问网络状态和访问WIFI状态。您可以在以下位置启用它们:右键单击android项目>属性>android Manifest>所需权限。示例:
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;
}
}
我同意你的方法。但是,我仍然不相信我们需要指定横幅的高度。因为internet上的每个示例都为SmartBanner设置了Auto
。我会再等一段时间,如果没有效果,我会将此标记为答案。@GauravMathur是的,我希望有人有更好的解决方案。最后,我摆脱了Auto
,似乎是唯一的解决方案。谢谢。在该教程中,作者还说您可能需要设置HeightRequest=“90”让它显示出来。我发现了几个类似的问题,然后引发了一个问题。麻烦的是,它对我所有高度Auto
的应用程序都正常工作。但是,现在我一在本地运行它,它就停止显示。那些应用程序使用与本地应用程序版本相同的软件包吗?是的,在我在app Store上发布它们之后修改了代码。最近我再次打开了它们,只是将android版本更改为最新的pie,其他所有内容都完全相同。这听起来很奇怪,不知道发生了什么,可能在发布或调试时有所不同。这是可行的,但你也可以使用广告控件本身的错误回调来确定何时将高度设置为0。这将涵盖连接问题和其他问题,如AdMob填充率问题。建议为横幅广告分配固定空间。如果您更改容器高度,用户可能会意外单击广告而不是实际的应用程序内容。@Márcio Souza Júnior您是对的。但是,这取决于应用程序。如果内容有足够的间隙,则嗯,应该没有问题。
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;
}
}