【发布时间】:2017-12-20 20:16:59
【问题描述】:
我正在尝试使用最新版本的 Xamarin Forms 创建一个使用 Azure AD B2C 身份验证的简单应用程序。我在使用 Visual Studio 2017 Community Edition 15.5.2 的 Windows 10 Pro 上。我遵循了Installing Xamarin on Visual Studio in Windows 设置指南。我创建了一个全新的“跨平台”Xamarin Forms 应用程序,并且我已经成功地让模板应用程序在内置的 Android 模拟器、配置我的 Mac Mini 后的 iOS 模拟器和注册后的 Xamarin Live Player 上呈现用于 TestFlight 测试版。
接下来,我开始尝试实施 Azure AD B2C 身份验证。我阅读了Integrate Azure AD B2C into a Xamarin forms app using MSAL,并尝试根据我在指南中看到的内容对我的应用程序进行修改。这是我遇到麻烦的地方。每当我从处理登录按钮单击的函数中调用 AcquireTokenAsync 时,它会挂起几秒钟,然后失败并出现以下错误:
Java.Lang.NoSuchMethodError: 没有静态方法 startActivity(Landroid/app/Activity;Landroid/content/Intent;Landroid/os/Bundle;)V 在 Landroid/support/v4/app/ActivityCompat 类中;或其超类 (“android.support.v4.app.ActivityCompat”的声明出现在 /data/app/com.companyname.MobileClient-1/base.apk)
为了确保这不是我在 Azure 中搞砸的事情,我确实克隆了上面 MSAL 指南中引用的示例 GitHub 项目,按照步骤修改代码,并验证它确实可以按预期工作我的 Azure 资源。
我花了几天时间试图解决这个问题,但没有成功。我并排比较了示例项目和我的新项目,发现了一些差异,但试图协调两者要么完全失败,要么没有任何进展。有几件事让我觉得可能是个问题:
- MSAL 示例解决方案的主要项目在解决方案资源管理器中与(便携式)一起列出。我的没有。它使用 .NET 标准。我什至看不到在 Visual Studio 中制作便携式项目的方法。
- MSAL 示例解决方案使用 Xamarin.Forms 2.3.4.224。我的解决方案是使用最新版本。不过,降级到那个版本并没有做任何事情。
- MSAL 示例解决方案中的 Android 特定 MainActivity 类继承自
global::Xamarin.Forms.Platform.Android.FormsApplicationActivity。我的 Android 特定 MainActivity 类继承自global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity。我尝试切换我的,但我一直遇到我无法解决的问题。老实说,在尝试阅读后我什至不明白其中的区别。 - MSAL 示例解决方案没有警告。开箱即用,无需修改,我的解决方案有 20 多个。它们包括:
Xamarin.Forms.Platform.dll (vv8.0) 的 $(TargetFrameworkVersion) 大于您的项目 (v7.1) 的 $(TargetFrameworkVersion)。 您需要增加 $(TargetFrameworkVersion) 为您的 项目。
检测到的包版本超出依赖约束: Xamarin.Android.Support.CustomTabs 23.3.0 需要 Xamarin.Android.Support.v4 (= 23.3.0) 但版本 Xamarin.Android.Support.v4 25.4.0.2 已解决。
MobileClient.Droid.Resource.Color.hint_foreground_material_light。 请检查您的 Nuget 包版本是否为 兼容。
我现在真的不知道该去哪里。我只是继续在我的 MSAL 示例解决方案的副本中添加更多内容来继续前进……但我担心示例与当前状态“落后”多远。我不想从一开始就将我的解决方案与过时或过时的机制结合起来。
编辑:我现在相当确定这与 Android 模拟器有关。我已经能够将相同的 Xamarin 应用程序推送到我的实际 iPhone 上,并且一切似乎都正常。不过,我没有实际的 Android 设备可供测试。
编辑 #2:我使用了 SDK 管理器并安装了所有有可用更新的东西。这并没有解决问题。
【问题讨论】:
标签: android xamarin.forms android-emulator azure-ad-b2c msal