Xamarin.forms 尽管我写的代码正确,为什么我的应用程序中没有出现广告?

Xamarin.forms 尽管我写的代码正确,为什么我的应用程序中没有出现广告?,xamarin.forms,xamarin.android,Xamarin.forms,Xamarin.android,我正在尝试向我的xamarin android应用程序添加广告。 我跟着视频做这件事。 但是当我完成时,我发现一个警告('MobileAds.Initialize(Context,string)'已过时:'deprecated'),并且在尝试启动该程序时,该广告不起作用。 我尝试了大多数解决方案,但我的应用程序中没有出现广告 这是主活动中的代码 using System; using Android.App; using Android.Content.PM; using Android.Run

我正在尝试向我的xamarin android应用程序添加广告。 我跟着视频做这件事。 但是当我完成时,我发现一个
警告('MobileAds.Initialize(Context,string)'已过时:'deprecated')
,并且在尝试启动该程序时,该广告不起作用。 我尝试了大多数解决方案,但我的应用程序中没有出现广告

这是主活动中的代码

using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Gms.Ads;

namespace App1.Droid
{
    [Activity(Label = "App1", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;
        base.OnCreate(savedInstanceState);
        MobileAds.Initialize(ApplicationContext, "ca-app-pub-3192508017252023~9595491677");
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
}
这是AndroidManifest的代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:versionCode="1" android:versionName="1.0" package="com.companyname.app1">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application android:label="App1.Android" android:theme="@style/MainTheme">
  <meta-data
      android:name="com.google.android.gms.ads.APPLICATION_ID"
      android:value="ca-app-pub-3192508017252023~9595491677"/>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
这是广告控制视图

using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace App1.Controls
{
public class Ad_control_view:View
{
}
}

这是Ad_view_render

using Android.App;
using Android.Content;
using Android.Gms.Ads;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using App1.Controls;
using App1.Droid;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly:ExportRenderer(typeof(Ad_control_view),typeof(Ad_view_render))]
namespace App1.Droid
{
public class Ad_view_render:ViewRenderer<Ad_control_view,AdView>
{
    public Ad_view_render(Context context):base(context)
    {

    }
    string ad_unit_id = "ca-app-pub-3192508017252023/5820253414";
    AdSize ad_size = AdSize.SmartBanner;
    AdView ad_view;
    private AdView Create_Ad_view()
    {
        if (ad_view != null)
            return ad_view;
        ad_view = new AdView(Context)
        {
            AdSize = ad_size,
            AdUnitId = ad_unit_id
        };
        var ad_params = new LinearLayout.LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent);
        ad_view.LayoutParameters = ad_params;
        ad_view.LoadAd(new AdRequest.Builder().Build());
        return ad_view;
    }
    protected override void OnElementChanged(ElementChangedEventArgs<Ad_control_view> e)
    {
        base.OnElementChanged(e);
        if (Control==null&& e.NewElement!=null)
        {
            SetNativeControl(Create_Ad_view());
        }

    }
}
}
使用Android.App;
使用Android.Content;
使用Android.Gms.Ads;
使用Android.OS;
使用Android.Runtime;
使用Android.Views;
使用Android.Widget;
使用App1.控件;
使用App1.Droid;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Xamarin.Forms;
使用Xamarin.Forms.Platform.Android;
[assembly:ExportRenderer(类型化(Ad_控制_视图)、类型化(Ad_视图_呈现))]
名称空间App1.Droid
{

公共类Ad_view_render:ViewRenderer使用最新版本的AdMob,您将在不传递应用程序ID的情况下进行初始化(该ID将从AndroidManifest中提取):


从VisualStudioNuget软件包的Xamarin.GooglePlayServices.Ads.Lite的119.1.0版开始,我将更准确地回答这个问题

不推荐使用MobileAds.Initialize(AndroidContext,“APP_ID”)

因此,您所要做的就是删除或注释这行代码,并将这行代码保存在您的AndroidManifest.xml中

<manifest>
<application>
    <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ADMOB_APP_ID"/>
</application>
</manifest>

此包之前的所有版本都需要MainActivity类的OnCreate方法中的代码行


希望这个答案能对你有所帮助!

嗨,欢迎来到SO!回顾一下如何写一个好问题会很好。例如,最好将你的警告信息复制/粘贴到你的帖子正文中,而不是发布一个屏幕截图的链接。这将增加有人可以帮助你的机会。xilliam感谢你的广告vice.所以这一行已经过时了。我编辑了代码,但没有出现广告。@Elway您在应用程序输出中看到了什么错误?我还建议使用测试横幅广告单元来排除自定义广告单元的任何问题:
ca-app-pub-394025609994254/630978111
(这将进入您的横幅广告)如果这不起作用,我们需要看到您为
Ad\u control\u view
编写代码实际上,输出中没有错误,我从google创建了一个横幅广告,并从AdMob获取了代码。很抱歉,我是初学者,不知道在这里编写代码,所以我会将代码放在主帖子中。谢谢you@Elwahy一点问题也没有,我们都得开始omewhere。我也绝不是专家。你是否有一个Android自定义渲染器,可以修改
Ad\u control\u view
?如果没有,这将是实现此功能所必需的。请查看此链接以了解如何执行此操作的示例:(特别是查看Ad视图渲染器部分)是的,我有Ad_view_render和Ad_Conrol_view,我把代码放在了帖子里。谢谢你的关心。这是对的,谢谢你的关心。
using Android.App;
using Android.Content;
using Android.Gms.Ads;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using App1.Controls;
using App1.Droid;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly:ExportRenderer(typeof(Ad_control_view),typeof(Ad_view_render))]
namespace App1.Droid
{
public class Ad_view_render:ViewRenderer<Ad_control_view,AdView>
{
    public Ad_view_render(Context context):base(context)
    {

    }
    string ad_unit_id = "ca-app-pub-3192508017252023/5820253414";
    AdSize ad_size = AdSize.SmartBanner;
    AdView ad_view;
    private AdView Create_Ad_view()
    {
        if (ad_view != null)
            return ad_view;
        ad_view = new AdView(Context)
        {
            AdSize = ad_size,
            AdUnitId = ad_unit_id
        };
        var ad_params = new LinearLayout.LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent);
        ad_view.LayoutParameters = ad_params;
        ad_view.LoadAd(new AdRequest.Builder().Build());
        return ad_view;
    }
    protected override void OnElementChanged(ElementChangedEventArgs<Ad_control_view> e)
    {
        base.OnElementChanged(e);
        if (Control==null&& e.NewElement!=null)
        {
            SetNativeControl(Create_Ad_view());
        }

    }
}
}
base.OnCreate(bundle);
MobileAds.Initialize(this);
<manifest>
<application>
    <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ADMOB_APP_ID"/>
</application>
</manifest>