【问题标题】:How to integrate AdMob ads in the latest MonoGame Android (XNA)?如何在最新的 MonoGame Android (XNA) 中集成 AdMob 广告?
【发布时间】:2014-07-23 17:39:16
【问题描述】:

过去几天我一直在研究 MonoGame Android 的 AdMob 集成,但到目前为止还未能成功地将横幅添加到我刚刚制作的游戏中。 到目前为止,我发现的所有答案都非常过时,而且我发现的所有示例都不能在最新的 Android API 中运行。

我在 Visual Studio 中使用 MonoGame 3.2 的开发版本 #983。

我试过了:

以及在互联网上找到的其他方法。在将 JAVA 源和 JAR 文件添加到项目中时,我一直非常小心地选择正确的构建选项,但我从未找到任何 AdView 类,并且不再存在的“Google Mobile Ads SDK v6.4.1”JAR由谷歌支持,如下所述:https://developers.google.com/mobile-ads-sdk/

如果有人有任何将 AdMob 广告集成到 MonoGame Android 项目中的最新方法,我认为答案需要刷新(我将非常感激)=)

【问题讨论】:

  • 我通过手动添加 google play services 组件找到了解决方案。由于我的声誉很低,直到 8 小时过去了我才能回答我自己的问题,所以我稍后会发布它
  • 我是您在问题中链接的博客文章的作者。我没有机会使用最新的 SDK 实施 AdMob,对此我深表歉意。我会密切关注这个问题,当你发布答案时,我会更新博客。干杯。
  • @craftworkgames 没问题,您的页面将我引向了正确的方向。如果有的话,只要 GooglePlayServices 组件正常工作,按原样使用您的代码应该很容易,但在我的情况下,其中的其他错误阻止了这种情况的发生

标签: android admob monogame


【解决方案1】:

找了很久的答案,测试了多条建议,终于找到了解决办法。

Xamarin 有一个可以从组件商店下载的 Google Play 服务组件。我最初尝试过这个,但是在 VS2012 中遇到了我的解决方案文件的问题。所以这就是我手动添加组件所做的:

  • https://components.xamarin.com/view/googleplayservices/登录并下载组件

  • 在您的 Android 解决方案中创建一个名为“lib”的文件夹,并将压缩后的组件文件夹中的 dll 文件提取到其中

  • 添加 dll 文件作为对您项目的引用。您现在应该添加了这四个引用:

    1. GooglePlayServicesLib
    2. Xamarin.Android.Support.v4
    3. Xamarin.Android.Support.v7.AppCompat
    4. Xamarin.Android.Support.v7.MediaRouter
  • 导航到您的项目属性,单击“应用程序”选项卡(第一个)并在“Java Max Heap Size”下输入 1G(否则编译时会出现 Java Heap out of memory 错误)

  • 确保您的应用程序设置为使用 API 14 或更高版本 (Android 4.0)。项目属性页也可以这样做

  • 在您的 AndroidManifest.xml 文件中,确保您具有以下内容:

    <activity 
        android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
    
  • 获取您的 AdMob 单元 ID

  • 将您的 Activity.cs 文件更改为如下内容:

    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
        }
    }
    
  • 编译(一开始需要一点时间),运行它,在 LogCat 窗口中查看标记为“广告”的消息,其中包含您的设备 ID。更多信息在这里:http://webtutsdepot.com/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

  • 设置设备ID字符串,重新编译,运行

最后,如果您等待大约 30-60 秒,您会看到一个测试添加显示为横幅。祝大家好运,我希望这会有所帮助,因为它现在是最新信息

【讨论】:

  • 更新(2014 年 10 月 9 日)在具有最新单游戏版本 (#1350) 的新项目中使用此代码时,我在使用 frameLayout.AddView() 时遇到了问题。显然,monogame 源代码发生了一些变化,并且无法编译。我最终删除了下载的引用并通过 nuGET 管理器安装它们,它工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多