ITMS-90809:已弃用 API 使用尝试使用 Xamarin iOS 部署 admob 横幅

问题描述

当我尝试部署我的应用程序时,我收到了一封来自苹果的邮件

亲爱的开发者:

我们发现您的应用最近交付的一个或多个问题“天气位置信息”1.7.7 (1.7.7)。请更正以下问题,然后重新上传

ITMS-90809:不推荐使用 API - 不再接受使用 UIWebView 的新应用。相反,使用 WKWebView 来提高安全性和可靠性。了解详情 (https://developer.apple.com/documentation/uikit/uiwebview)。

最好的问候,

应用商店团队

我对 Xamarin 平台真的很陌生,我认为被苹果拒绝的人来自这个班:

using System;
using Xamarin.Forms;


namespace WeatherLocationInfo.Controls
{
    public class AdmobControl : View
    {
    public static readonly BindableProperty AdUnitIdProperty = BindableProperty.Create(
                   nameof(AdUnitId),typeof(string),typeof(AdmobControl),string.Empty);

    public string AdUnitId
    {
        get => (string)GetValue(AdUnitIdProperty);
        set => SetValue(AdUnitIdProperty,value);
    }
}
}

如果我将 public class AdmobControl : View 更改为 public class AdmobControl : UIView 并且

using UIKIT; 

我在此行收到此错误get => (string)GetValue(AdUnitIdProperty); set => SetValue(AdUnitIdProperty,value);

CS0103 The name GetValue does not exist in the current context
CS0103 The name SetValue does not exist in the current context

我能否得到一些示例,如何修复/更新我的代码并进行部署,而不会被苹果拒绝。

我休耕了这个steps,但苹果再次拒绝了我。 现在,在 iOS 构建选项的其他 mtouch 参数中,我尝试添加以下行:--optimize=force-rejected-types-removal 但他们再次拒绝了我。

我在 iOS 项目中使用 Xamarin.Forms(4.8.0.1451),在基础项目中使用 Xamarin.Forms(4.8.0.1821)

有没有办法解决这个苹果拒绝的问题?

我的类 AdMobVieWrenderer 如下所示:

using System.ComponentModel;
using Foundation;
using Google.MobileAds;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using WeatherLocationInfo.Controls;
using WeatherLocationInfo.iOS.Implementations;

[assembly: ExportRenderer(typeof(AdmobControl),typeof(AdMobVieWrenderer))]
namespace WeatherLocationInfo.iOS.Implementations
{
    [Protocol]
    public class AdMobVieWrenderer : VieWrenderer<AdmobControl,BannerView>
    {
        [System.Obsolete]
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
        protected override void OnElementChanged(ElementChangedEventArgs<AdmobControl> e)
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
        {
            base.OnElementChanged(e);
            if (Control == null)
            {
                SetNativeControl(CreateBannerView());
            }
        }



    [System.Obsolete]
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
        protected override void OnElementPropertyChanged(object sender,PropertyChangedEventArgs e)
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
        {
            base.OnElementPropertyChanged(sender,e);
            Control.AdUnitID = Element.AdUnitId;
        }

    [System.Obsolete]
    private BannerView CreateBannerView()
    {
        var bannerView = new BannerView(AdSizeCons.SmartBannerPortrait)
        {
            AdUnitID = Element.AdUnitId,RootViewController = GetVisibleViewController()
        };

        bannerView.LoadRequest(GetRequest());

        Request GetRequest()
        {
            var request = Request.GetDefaultRequest();
            return request;
        }

        return bannerView;
    }

    private UIViewController GetVisibleViewController()
    {
        var windows = UIApplication.SharedApplication.Windows;
        foreach (var window in windows)
        {
            if (window.RootViewController != null)
            {
                return window.RootViewController;
            }
        }
        return null;
    }
}

}

被苹果拒绝的原因是在这个类的代码中吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)