How to integrate AdMob ads in the latest MonoGame Android (XNA)?

人走茶凉 提交于 2019-12-03 09:23:18

After a long time looking for answers and testing multiple suggestions, I have finally found the solution.

Xamarin has a Google Play Services component that can be downloaded from the component store. I had originally tried this, but was running into problems with my solution file in VS2012. So this is what I did to add the component manually:

  • Login and download the component from https://components.xamarin.com/view/googleplayservices/

  • Create a folder in your Android solution called "lib" and extract the dll files from the zipped component folder into it

  • Add the dll files as references to your project. You should now have these four references added:

    1. GooglePlayServicesLib
    2. Xamarin.Android.Support.v4
    3. Xamarin.Android.Support.v7.AppCompat
    4. Xamarin.Android.Support.v7.MediaRouter
  • Navigate into your project properties, click on the Application tab (first one) and under "Java Max Heap Size", type in 1G (otherwise you get a Java Heap out of memory error while compiling)

  • Make sure your App is set to use API 14 or higher (Android 4.0). This can be done is the project properties page as well

  • In your AndroidManifest.xml file, make sure you have the following:

    <activity 
        android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
    
  • Get your AdMob Unit ID

  • Change your Activity.cs file to something like this:

    using Android.Gms.Ads; // Add this include
    
    // Easy constants
    private const string AD_UNIT_ID = "YOUR_AD_ID";
    private const string TEST_DEVICE_ID = "YOUR_DEVICE_ID";
    private AdView adView;
    
    // Change OnCreate and make sure you're not trying to set SetContentView()
    // more than once
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        Puzzle.ARunningMan.Activity = this;
        var g = new Puzzle.ARunningMan();
    
        createAds(g.Window);
    
        g.Run();
    }
    
    // Wrapped everything in a function for less confusion.
    // Thanks to Dylan Wilson at Craftwork Games for the
    // simple layout
    private void createAds(AndroidGameWindow window)
    {
        var frameLayout = new FrameLayout(this);
        var linearLayout = new LinearLayout(this);
    
        linearLayout.Orientation = Orientation.Horizontal;
        linearLayout.SetGravity(Android.Views.GravityFlags.Right | Android.Views.GravityFlags.Bottom);
    
        frameLayout.AddView(window);
    
        adView = new AdView(this);
        adView.AdUnitId = AD_UNIT_ID;
        adView.AdSize = AdSize.Banner;
    
        linearLayout.AddView(adView);
        frameLayout.AddView(linearLayout);
        SetContentView(frameLayout);
    
        try
        {
            // Initiate a generic request.
            var adRequest = new AdRequest.Builder()
                .AddTestDevice(AdRequest.DeviceIdEmulator)
                .AddTestDevice(TEST_DEVICE_ID)
                .Build();
    
            // Load the adView with the ad request.
            adView.LoadAd(adRequest);
        }
        catch (Exception ex)
        {
            // your error logging goes here
        }
    }
    
  • Compile (will take a little while at first), Run it, look in the LogCat window for a message tagged as "ads" that contains your device ID. More info here: http://webtutsdepot.com/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

  • Set the device ID string, recompile, run it

And finally, if you wait about 30-60 seconds, you will see a test add show up as a banner. Good luck to all, I hope this helps, as it is now current information

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!