Siemka. Próbuję zaimplementować do aplikacji reklamy Google AdMob.
Korzystając z poradnika: https://www.c-sharpcorner.com/article/google-admob-display-ads-in-xamarin-forms/.
Napisałem, a raczej przepisałem kod, który kiedyś działał (około roku temu :) ), a teraz nie chce....
**Id reklamy jest testowe (formatu banner): "ca-app-pub-3940256099942544/6300978111" **
Android manifest:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="xxx.Android">
<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>
Android Service:
[assembly: Dependency(typeof(AdMob_AndroidService))]
namespace xxx.Droid.Services
{
public class AdMob_AndroidService : IAdMob
{
InterstitialAd interstitialAd;
public AdMob_AndroidService()
{
interstitialAd = new InterstitialAd(Android.App.Application.Context);
interstitialAd.AdUnitId = AppManager.AdMobId;
LoadAd();
}
void LoadAd()
{
var requestbuilder = new AdRequest.Builder();
interstitialAd.LoadAd(requestbuilder.Build());
}
public void ShowAd()
{
Device.BeginInvokeOnMainThread(async () =>
{
// if(interstitialAd.IsLoading == false && interstitialAd.IsLoaded == false) LoadAd();
await Task.Delay(3000);
if (interstitialAd.IsLoaded)
interstitialAd.Show();
else ShowAd();
});
}
}
}
Android Renderer:
[assembly: ExportRenderer(typeof(AdMobBanner), typeof(AdMobBanner_AndroidRenderer))]
namespace xxx.Droid.Renderer
{
public class AdMobBanner_AndroidRenderer : ViewRenderer
{
Context context;
public AdMobBanner_AndroidRenderer(Context _context) : base(_context)
{
context = _context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
var adView = new AdView(Context);
switch ((Element as AdMobBanner).Sizes)
{
case AdMobSizeEnum.Standardbanner:
adView.AdSize = AdSize.Banner;
break;
case AdMobSizeEnum.LargeBanner:
adView.AdSize = AdSize.LargeBanner;
break;
case AdMobSizeEnum.MediumRectangle:
adView.AdSize = AdSize.MediumRectangle;
break;
case AdMobSizeEnum.FullBanner:
adView.AdSize = AdSize.FullBanner;
break;
case AdMobSizeEnum.Leaderboard:
adView.AdSize = AdSize.Leaderboard;
break;
case AdMobSizeEnum.SmartBannerPortrait:
adView.AdSize = AdSize.SmartBanner;
break;
default:
adView.AdSize = AdSize.Banner;
break;
}
// TODO: change this id to your admob id
adView.AdUnitId = AppManager.AdMobId;
var requestbuilder = new AdRequest.Builder();
adView.LoadAd(requestbuilder.Build());
SetNativeControl(adView);
}
}
}
}
Xamarin.Forms metoda dodająca baner:
public void DisplayAddMob(StackLayout stack, AdMobBanner banner, string adMobId = "")
{
if (Connectivity.NetworkAccess == NetworkAccess.Internet && Device.RuntimePlatform == Device.Android)
{
AppManager.Instance.SetAdMobId(adMobId);
if(banner != null) stack.Children.Add(banner);
DependencyService.Get<IAdMob>().ShowAd();
}
}
i jej użycie:
ViewManager.Instance.DisplayAddMob(StackLayout, new ViewItems.AdMobBanner()
{
VerticalOptions = LayoutOptions.End,
HorizontalOptions = LayoutOptions.Fill,
HeightRequest = 60,
Sizes = Enums.AdMobSizeEnum.Standardbanner
});
Testowane na emulatorze oraz telefonie. Reklama po prostu się nie wyświetla.
Jakieś pomysły / podpowiedzi co może być problemem? :)