gpt4 book ai didi

android - AdMob 广告未在 Xamarin Android 应用程序中显示

转载 作者:搜寻专家 更新时间:2023-11-01 09:36:13 24 4
gpt4 key购买 nike

我最近成功完成了我的第一个 Android 应用并将其部署到 Google Play,现在我正在尝试添加 AdMob。

在几次错误启动、几次清理和重建之后,我正处于构建应用程序的阶段,但我无法显示广告。

因此,我创建了一个名为 AdMobView 的内容 View ;

using Xamarin.Forms;

namespace MyApplication
{
public partial class AdMobView : ContentView
{
public AdMobView()
{
}
}
}

然后下课;

using Android.Gms.Ads;
using Xamarin.Forms;
using MyApplication;
using Xamarin.Forms.Platform.Android;


[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobRenderer))]

namespace MyApplication
{
public class AdMobRenderer : ViewRenderer <AdMobView, AdView>
{
protected override void OnElementChanged(ElementChangedEventArgs<AdMobView> e)
{
base.OnElementChanged(e);

if (Control == null)
{
var ad = new Android.Gms.Ads.AdView(Forms.Context);
ad.AdSize = Android.Gms.Ads.AdSize.Banner;
ad.AdUnitId = "<the AdUnit id>";

var requestbuilder = new Android.Gms.Ads.AdRequest.Builder();
ad.LoadAd(requestbuilder.Build());

SetNativeControl(ad);
}
}
}
}

在我希望显示广告的 XAML 中,我添加了

<controls:AdMobView WidthRequest="320" HeightRequest="50" />

同样在这个 XAML 中,我为控件添加了一个 xmln

xmlns:controls="clr-namespace:MyApplication;assembly=MyApplication"

在我添加的MainActivity.cs中

MobileAds.Initialize(ApplicationContext, "<the AdUnit id>");

在我添加的AssemblyInfo.cs中;

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

我在AndroidManifest.xml中添加了;

    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

所以,正如我所说,它可以在真实设备和模拟器上构建并以 Debug模式运行,但广告应该显示的区域没有任何内容。我只能看到正常的背景 - 甚至没有“空白”框。

如果有人有任何想法,你可以让我少睡几个不眠之夜!

最佳答案

好的,我已经设法让它工作了。
以防其他人遇到困难,我将在此处发布完整代码,因为我没有找到一个单独运行的教程并且必须从多个来源拼凑...

Android list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="<your package name>"
android:versionCode="<your version code>" android:versionName="<your version number>" android:installLocation="auto">
<uses-sdk android:minSdkVersion="16" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="<your app title>" android:icon="@drawable/Icon">
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</application>

主 Activity .cs:

 using Android.Gms.Ads;
.
.
.
MobileAds.Initialize(ApplicationContext, "<your unit id>");
LoadApplication(new App());

重要说明 - 确保这是应用程序单元 ID,而不是看起来相似的应用程序 ID。单位 id 是具有格式的ca-app-pub-9nnnnnnnnnnnnnnn/nnnnnnnnnn应用程序 ID 看起来很相似,但有一个 ~ 而不是/如果您在主要 Activity 中使用 LoadApplication,请确保这是在 Initialize 之后 - 这是我犯的小学生错误之一。在 VS2015 中,这实际上有一条绿色下划线和一条消息,表明它已被弃用,但我发现它仍然是转换广告所必需的。

创建一个名为 AdMobView.cs 的 View :

using Xamarin.Forms;

namespace FightJudgeAssistant
{
public class AdMobView : View
{

}
}

当您在 Visual Studio 中创建 View 时,它会放入不同的 Using 语句。您可以摆脱所有这些,只使用 Using Xamarin.Forms

创建一个名为 AdViewRenderer.cs 的类:

using Android.Widget;
using Android.Gms.Ads;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using FightJudgeAssistant;

[assembly: ExportRenderer(typeof(mynamespace.AdMobView), typeof(AdMobRenderer))]

namespace mynamespace
{
public class AdMobRenderer : ViewRenderer<mynamespace.AdMobView, Android.Gms.Ads.AdView>
{
protected override void OnElementChanged(ElementChangedEventArgs<mynamespace.AdMobView> e)
{
base.OnElementChanged(e);

if (Control == null)
{
var ad = new Android.Gms.Ads.AdView(Forms.Context);
ad.AdSize = Android.Gms.Ads.AdSize.Banner;
ad.AdUnitId = "<your unit id>";

var requestbuilder = new Android.Gms.Ads.AdRequest.Builder();
ad.LoadAd(requestbuilder.Build());

SetNativeControl(ad);
}
}
}

在您想要显示广告的屏幕上(在我的例子中是 GridView 中的 XAML):

<ContentPage.Content>
<Grid x:Name="controlGrid" RowSpacing="1" ColumnSpacing="1">

<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
.
.
.
.
<controls:AdMobView Grid.Row="6"/>
</Grid>

我在上面没有显示的网格行中有其他内容。您会注意到我已将第 6 行的行高设置为“自动”而不是“*”,以确保广告占用尽可能多的空间。

还在 ContentPage 部分添加了以下 XMLNS:

xmlns:controls="clr-namespace:mynamespace;assembly=myAssemblyname>

就是这样!为了测试它是否有效,我使用了 ca-app-pub-3940256099942544/6300978111,它专门用于测试横幅广告

关于android - AdMob 广告未在 Xamarin Android 应用程序中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43032609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com