Я разрабатываю игру с MonoGame в течение нескольких месяцев, и я только что выпустил ее несколько дней назад. Теперь я пытаюсь заставить AdMob работать правильно, поэтому я могу освободить бесплатную облегченную версию приложения. Я новичок в макетах Android, поэтому я понятия не имею, что я делаю.
Я смог отобразить объявление в своем приложении после очистки веб-страниц за некоторую информацию об использовании AdMob с MonoGame, но приложение всегда отображается в верхней части экрана. Мне очень не повезло найти информацию о перепозиционировании объявления специально с MonoGame / Xamarin.
Вот код, который работает, и отображает объявление в верхней части экрана:
Activity1.cs:
public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity { internal View adView = null; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game1.Activity = this; var g = new Game1(); FrameLayout fl = new FrameLayout(this); fl.AddView(g.Window); adView = AdMobHelper.CreateAdView(this, "<my id here>"); var layoutParams = new ViewGroup.LayoutParams(Android.Views.ViewGroup.LayoutParams.FillParent, Android.Views.ViewGroup.LayoutParams.WrapContent); fl.AddView(adView, layoutParams); SetContentView(fl); AdMobHelper.RequestFreshAd(adView); g.Run(); } }
Это работает без каких-либо дополнительных макетов. Теперь, вот код, который я усвоил с нескольких сайтов, охватывающих тему:
Activity1.cs:
public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity { internal View adView = null; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game1.Activity = this; var g = new Game1(); SetContentView(Resource.Layout.Main); View gameView = FindViewById(Resource.Id.GameView); ViewGroup parent = (ViewGroup)gameView.Parent; int index = parent.IndexOfChild(gameView); parent.RemoveView(gameView); parent.AddView(g.Window, index); adView = FindViewById(Resource.Id.Ad); parent = (ViewGroup)adView.Parent; index = parent.IndexOfChild(adView); parent.RemoveView(adView); var layoutParams = adView.LayoutParameters; adView = AdMobHelper.CreateAdView(this, "<my id here>"); adView.LayoutParameters = layoutParams; parent.AddView(adView, index); AdMobHelper.RequestFreshAd(adView); g.Run(); } }
И мой дополнительный файл Main.axml:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <SurfaceView android:id="@+id/GameView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <com.google.ads.AdView android:id="@+id/Ad" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="bottom" /> </FrameLayout>
Однако, когда я запускаю это, я сталкиваюсь с сбоем в строке «SetContentView (Resource.Layout.Main)»; В Activity1.cs. Visual Studio дает ошибку:
Unhandled Exception: Android.Views.InflateException: Binary XML file line #1: Error inflating class com.admob.android.ads.AdView
Хотя в окне вывода ошибок нет ошибок, чтобы проверить … Любая помощь? В идеале, я хотел бы просто получить это объявление admob в нижней части моего приложения. Благодаря!
Это код для добавления admob. Я сделал успешно, это может сработать для вас
<com.google.ads.AdView xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:id="@+id/adView" android:layout_width="fill_parent" android:layout_height="fill_parent" ads:adSize="BANNER" ads:adUnitId="Your Admob 15 digit alpha numeric ID" />
И в вашей деятельности, в методе onCreate добавьте следующий код
AdView adview = (AdView)findViewById(R.id.adView); AdRequest re = new AdRequest(); re.setTesting(true); adview.loadAd(re);
Это работа для меня. Для более подробной информации вы можете посетить сайт admob
Решение №2
Быстрый способ без кодирования – просто добавить xmlns к элементу приложения и ads:loadAdOnCreate="true"
элементу adView
в AndroidManifest.xml
Это должно работать для вас, я использую его таким образом без проблем.
public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity { internal View adView = null; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game1.Activity = this; var g = new Game1(); FrameLayout fl = new FrameLayout(this); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); ll.setGravity(Gravity.BOTTOM); fl.AddView(g.Window); adView = AdMobHelper.CreateAdView(this, "<my id here>"); ll.addView(adView); fl.AddView(ll); SetContentView(fl); AdMobHelper.RequestFreshAd(adView); g.Run(); } }
Я сделал удобный фрагмент кода в своем блоге. Надеюсь, это поможет следующему человеку с этим вопросом.
http://www.craftworkgames.com/blog/using-admob-with-monogame/