当前位置: 首页 > 知识库问答 >
问题:

适用于iOS的Xamarin表单和Firebase AdMob

廉博赡
2023-03-14

直到几天前,我的应用程序运行良好,直到我在输出中收到一条消息,建议我添加以下行:

request.TestDevices = new[] { "yourtestcodeid" };

对于Xamarin组件存储,该组件称为Xamarin。谷歌。网间网操作系统。MobileAds已不存在,但您必须安装Firebase AdMob for iOS。

问题是,该示例仅适用于natve iOS项目。我有一个Xamarin表单项目,在主项目中有一个通用视图

public class AdMobView : ContentView {
    /// <summary>
    /// Initializes a new instance of the <see cref="AdMobView"/> class.
    /// </summary>
    public AdMobView() {
    }
}

并在项目中针对每个平台进行了实施。对于iOS,是:

[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobRenderer))]
namespace WordBankEasy.iOS.Renderers {
public class AdMobRenderer : ViewRenderer {
    const string AdmobID = "ca-app-pub-yourcode";

    BannerView adView;
    BannerView adViewTableView;
    BannerView adViewWindow;
    Interstitial adInterstitial;
    bool viewOnScreen;

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e) {
        base.OnElementChanged(e);

        if(e.NewElement == null)
            return;

        if(e.OldElement == null)
        {
            adView = new BannerView(
                size: AdSizeCons.SmartBannerPortrait, 
                origin: new CGPoint(0, UIScreen.MainScreen.Bounds.Size.Height - AdSizeCons.Banner.Size.Height))
            {
                AdUnitID = AdmobID,
                RootViewController = UIApplication.SharedApplication.Windows[0].RootViewController
            };

            adView.AdReceived += (sender, args) =>
            {
                if(!viewOnScreen) this.AddSubview(adView);
                viewOnScreen = true;
            };

            adView.LoadRequest(GetRequest());
            base.SetNativeControl(adView);
        }
    }

    private void AdViewWindow_AdReceived(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

    Request GetRequest()
    {
        var request = Request.GetDefaultRequest();
        // Requests test ads on devices you specify. Your test device ID is printed to the console when
        // an ad request is made. GADBannerView automatically returns test ads when running on a
        // simulator. After you get your device ID, add it here
        request.TestDevices = new[] { "96080e40efec5229aad21b540eae6fe0" };
        return request;
    }
}
}

现在我无法查看广告,但我有一种新的错误

必须设置的rootViewController属性

如何更改我的代码?提前感谢您的任何建议。

共有1个答案

赏夕
2023-03-14

使用新组件后,代码中需要做一些更改,如下所示:

if(e.OldElement == null)
{
    UIViewController viewCtrl = null;

    foreach(UIWindow v in UIApplication.SharedApplication.Windows)
    {
        if (v.RootViewController != null)
        {
            viewCtrl = v.RootViewController;
        }
    }

    adView = new BannerView(size: AdSizeCons.Banner, origin: new CGPoint(-10, 0))
    {
        AdUnitID = AdmobID,
        RootViewController = viewCtrl
    };

    adView.AdReceived += (sender, args) =>
    {
        if(!viewOnScreen) this.AddSubview(adView);
        viewOnScreen = true;
    };

    adView.LoadRequest(GetRequest());
    base.SetNativeControl(adView);
}
 类似资料:
  • 我想知道是否有办法在Xamarin中裁剪视频。我似乎找不到任何例子。我试图查看现有的函数和类,但什么也找不到。 基本上制作方视频,比如Vine和Instagram的视频。我认为这是通过裁剪视频的其余部分来实现的,而不仅仅是放大。

  • 我已经用Visual studio 2017 Professional和Visual studio 2019累积添加创建了Xamarin表单中的应用程序。 但是我可以在http和https协议中点击post请求,但是我不能在这两个协议中点击Get请求。 无法按get请求。

  • 我想在我的移动应用程序中使用谷歌oauth授权。我之前已经在测试控制台应用中实现了此功能。但是,在我在 Xamarin Android中重新定位我的代码后,出现了一些问题。法典: 这是脏代码,但在控制台应用中执行得很好。当我尝试在 Xamarin 中启动方法时,我捕获异常: 无法启动带有“”的浏览器https://accounts.google.com/o/oauth2/v2/auth?acces

  • 问题内容: 有人知道iOS的Elasticsearch客户端库吗?如果它也是迅速写的,那将是一个好处。 elasticsearch的“客户端”部分显示了多个平台的多个库,但对于iOS没有任何显示,我觉得有人必须这样做吗? 干杯 问题答案: 我怀疑是否有人- 上次我检查时没有,并且有充分的理由。请记住,为了允许IOS客户端(或Android)使用客户端库连接到Elasticsearch,您必须打开集

  • 问题内容: 这可能是一个简单的问题,但对我来说目前还不清楚,我必须把事情整理好……也许有人可以帮我解决这个问题)。 我知道AVC附带了MVC。我知道有Microsoft库,还有jquery。我知道,在MVC 3中,他们引入了不引人注目的javascript,它为html添加了一些特殊标签以进行清理… 但是ist如何一起玩? 示例:我想为每个ajax发布一个远程表单(局部视图)以向博客文章添加评论。

  • 我试图在wordpress中使用AMP与表单动作。我使用action-xhr与POST方法。 当我提交表单时,它会给出错误信息 响应必须包含AMP-访问-控制-允许-源-起源头 表单提交失败:错误:响应必须包含AMP-访问-控制-允许-源-源头 甚至尝试添加标题,如下所示 这个问题仍然存在。有什么建议吗? 我使用的是wordpress版本5.0.3