Мобильные привязки Blazor iOS не отображают вход в Azure AD B2C

#c# #ios #xamarin.ios #blazor

Вопрос:

Предыстория Работы над гибридным приложением Blazor, которое использует мобильные привязки Blazor для распространения в качестве приложения для Android и iOS. Основная функциональность приложения работает и была протестирована путем развертывания приложения в службе приложений Azure для его тестирования в качестве веб-приложения, а также загрузки в Google Play Store для внутреннего тестирования.

Постановка проблемы Приложение может успешно скомпилироваться и успешно работать в Android, однако при попытке отладки на эмуляторе iOS мы получаем пустое представление. Запуск соответствует тестовым проектам, которые я видел, и соответствует рабочему шаблону привязок для мобильных устройств Blazor. Вот пример мобильного проекта привязки Blazor для iOS

Детали проекта

  • Цель развертывания iOS 8.0
  • Мобильная библиотека классов C# , построенная с использованием стандарта .NET 2.1
  • При запуске приложения должен отображаться экран входа в систему, и для входа используется Azure AD B2C для обеспечения безопасности входа и регистрации.

Подробности проблемы iOS Запуск приложения довольно прост и соответствует стандартной настройке проекта для мобильного проекта Blazor Bindings. Main.cs совпадает с исходным шаблоном. Существует отличие от проекта шаблона в AppDelegate.cs, чтобы разрешить MSAL для аутентификации в функции openURL, изменение можно увидеть в строке 29.

AppDelegate.cs

 // The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to
// application events from iOS.
[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    //
    // This method is invoked when the application has loaded and is ready to run. In this
    // method you should instantiate the window, load the UI into it and then make the window
    // visible.
    //
    // You have 17 seconds to return from this method, or iOS will terminate your application.
    //
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();

        // For iOS, wrap inside a navigation page, otherwise the header looks wrong
        var formsApp = new App();
        formsApp.MainPage = new NavigationPage(formsApp.MainPage);

        LoadApplication(formsApp);

        return base.FinishedLaunching(app, options);
    }

    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        if (AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url))
        {
            return true;
        }

        return base.OpenUrl(app, url, options);
    }
}
 

App.cs

 public App(IFileProvider fileProvider = null)
        {
            HttpClient httpClient = new HttpClient();
            
            var hostBuilder = MobileBlazorBindingsHost.CreateDefaultBuilder()
                .ConfigureServices((hostContext, services) =>
                {
                    // ... IOC Configuration
                    // ...
                })
                .UseWebRoot("wwwroot");

            
            if (fileProvider != null)
            {
                hostBuilder.UseStaticFiles(fileProvider);
            }
            else
            {
                hostBuilder.UseStaticFiles();
            }
            var host = hostBuilder.Build();

            MainPage = new ContentPage { Title = "Pronto Pay" };
            host.AddComponent<Main>(parent: MainPage);
        }