在 xamarin 中实施 admob android 抛出 Java.Lang.RuntimeException
Implementing admob in xamarin android throws Java.Lang.RuntimeException
我正在使用 xamarin 创建一个 android 应用程序并希望使用 admob 添加广告,我已经注册并创建了一个横幅单元,所以我有一个应用程序 ID 和一个广告 ID。我已经根据一些指南实现了所有内容,但是在我想在我的设备上 运行 它抛出以下异常:
Java.Lang.RuntimeException
Message=Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException:
******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers *
* should follow the instructions here: googl link to add a valid *
* App ID inside the AndroidManifest. Google Ad Manager publishers should *
* follow instructions here: googl link. *
******************************************************************************
这是我AndroidManifest.xml的相关部分:
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-myappid"/> <!-- I have my actual app id here -->
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:exported="false"
android:theme="@android:style/Theme.Translucent" />
<provider android:name="com.google.android.gms.ads.MobileAdsInitProvider"
android:authorities="com.companyname.tapitmate.mobileadsinitprovider"
android:exported="false"
android:initOrder="100" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
这是我的广告class:
public class AdControlView : View
{
}
这是我的视图渲染器:
public class AdViewRenderer : ViewRenderer<AdControlView, AdView>
{
//This is the test id according to the documentation
private readonly string _adUnitId = "ca-app-pub-3940256099942544/6300978111";
private readonly AdSize _adSize = AdSize.SmartBanner;
private AdView _adView;
public AdViewRenderer(Context context) : base(context)
{
}
AdView CreateAdView()
{
if (_adView != null)
return _adView;
_adView = new AdView(Context);
_adView.AdSize = _adSize;
_adView.AdUnitId = _adUnitId;
var adParams = new LinearLayout.LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent);
_adView.LayoutParameters = adParams;
_adView.LoadAd(new AdRequest.Builder().Build());
return _adView;
}
protected override void OnElementChanged(ElementChangedEventArgs<AdControlView> e)
{
base.OnElementChanged(e);
if (Control is null)
{
CreateAdView();
SetNativeControl(_adView);
}
}
}
这是我的主要内容 activity:
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
RequestedOrientation = ScreenOrientation.Portrait;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
MobileAds.Initialize(ApplicationContext);// I have tried both ways, same exception.
//MobileAds.Initialize(ApplicationContext, "myactualappid");
LoadApplication(new App());
我正在使用:
- Xamarin.Essentials 1.5.1
- Xamarin.Forms 4.5.0.396
- Xamarin.GooglePlayServices.Ads71.1720.1
我做错了什么?请帮忙。
}
很可能你只需要删除 MobileAdsInitProvider
:
<provider
android:name="com.google.android.gms.ads.MobileAdsInitProvider"
android:authorities="com.companyname.tapitmate.mobileadsinitprovider"
android:exported="false"
android:initOrder="100" />
documentation连它都没有;因此我假设你指的是一个过时的例子。
看来您错过了 ExportRenderer
[assembly: ExportRenderer(typeof(AdControlView), typeof(AdViewRenderer))]
在 mainactivity 下面的行应该在 Forms.Init 行之前,你已经在 Init
之后添加了
MobileAds.Initialize(ApplicationContext, "ca-app-pub-3940256099942544/6300978111");
您的清单应在应用程序元素内的元数据元素中包含 adUnitId
。不确定,因为这里没有发布整个清单。 Like here
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.samplemtadmob">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="SampleMTAdmob.Android">
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/>
<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" android:theme="@android:style/Theme.Translucent" />
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
还有
Important
To test the banner during the development google uses two Banner Id, one for Android > and the other for iOS. Use them then remember to replace them with your own IDs:
Android: ca-app-pub-3940256099942544/6300978111
iOS: ca-app-pub-3940256099942544/2934735716
试试这个 nuget 而不是实现渲染器 marcojak/MTAdmob
我在将广告更新到版本 71.1720.1 时遇到了这个问题,回滚到版本 60.1142.1 解决了这个问题,我不得不对 Xamarin.maps
做同样的事情
我正在使用 xamarin 创建一个 android 应用程序并希望使用 admob 添加广告,我已经注册并创建了一个横幅单元,所以我有一个应用程序 ID 和一个广告 ID。我已经根据一些指南实现了所有内容,但是在我想在我的设备上 运行 它抛出以下异常:
Java.Lang.RuntimeException
Message=Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException:
******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers *
* should follow the instructions here: googl link to add a valid *
* App ID inside the AndroidManifest. Google Ad Manager publishers should *
* follow instructions here: googl link. *
******************************************************************************
这是我AndroidManifest.xml的相关部分:
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-myappid"/> <!-- I have my actual app id here -->
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:exported="false"
android:theme="@android:style/Theme.Translucent" />
<provider android:name="com.google.android.gms.ads.MobileAdsInitProvider"
android:authorities="com.companyname.tapitmate.mobileadsinitprovider"
android:exported="false"
android:initOrder="100" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
这是我的广告class:
public class AdControlView : View
{
}
这是我的视图渲染器:
public class AdViewRenderer : ViewRenderer<AdControlView, AdView>
{
//This is the test id according to the documentation
private readonly string _adUnitId = "ca-app-pub-3940256099942544/6300978111";
private readonly AdSize _adSize = AdSize.SmartBanner;
private AdView _adView;
public AdViewRenderer(Context context) : base(context)
{
}
AdView CreateAdView()
{
if (_adView != null)
return _adView;
_adView = new AdView(Context);
_adView.AdSize = _adSize;
_adView.AdUnitId = _adUnitId;
var adParams = new LinearLayout.LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent);
_adView.LayoutParameters = adParams;
_adView.LoadAd(new AdRequest.Builder().Build());
return _adView;
}
protected override void OnElementChanged(ElementChangedEventArgs<AdControlView> e)
{
base.OnElementChanged(e);
if (Control is null)
{
CreateAdView();
SetNativeControl(_adView);
}
}
}
这是我的主要内容 activity:
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
RequestedOrientation = ScreenOrientation.Portrait;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
MobileAds.Initialize(ApplicationContext);// I have tried both ways, same exception.
//MobileAds.Initialize(ApplicationContext, "myactualappid");
LoadApplication(new App());
我正在使用:
- Xamarin.Essentials 1.5.1
- Xamarin.Forms 4.5.0.396
- Xamarin.GooglePlayServices.Ads71.1720.1
我做错了什么?请帮忙。 }
很可能你只需要删除 MobileAdsInitProvider
:
<provider
android:name="com.google.android.gms.ads.MobileAdsInitProvider"
android:authorities="com.companyname.tapitmate.mobileadsinitprovider"
android:exported="false"
android:initOrder="100" />
documentation连它都没有;因此我假设你指的是一个过时的例子。
看来您错过了 ExportRenderer
[assembly: ExportRenderer(typeof(AdControlView), typeof(AdViewRenderer))]
在 mainactivity 下面的行应该在 Forms.Init 行之前,你已经在 Init
之后添加了 MobileAds.Initialize(ApplicationContext, "ca-app-pub-3940256099942544/6300978111");
您的清单应在应用程序元素内的元数据元素中包含 adUnitId
。不确定,因为这里没有发布整个清单。 Like here
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.samplemtadmob">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="SampleMTAdmob.Android">
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/>
<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" android:theme="@android:style/Theme.Translucent" />
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
还有
Important
To test the banner during the development google uses two Banner Id, one for Android > and the other for iOS. Use them then remember to replace them with your own IDs:
Android: ca-app-pub-3940256099942544/6300978111 iOS: ca-app-pub-3940256099942544/2934735716
试试这个 nuget 而不是实现渲染器 marcojak/MTAdmob
我在将广告更新到版本 71.1720.1 时遇到了这个问题,回滚到版本 60.1142.1 解决了这个问题,我不得不对 Xamarin.maps
做同样的事情